深度学习(23)随机梯度下降一: 随机梯度下降简介
深度学习(23)随机梯度下降一: 随机梯度下降简介
- 1. What’s Gradient?
- 2. What does it mean?
- 3. How to search?
- 4. For instance
- 5. Learning Process
- 6. AutoGrad
- 7. GradientTape
- 8. Persistent GradientTape(多次调用)
- 9. 2nd2^{nd}2nd-order
- 10. 二阶求导实战
Outline
- What’s Gradient
- What does it mean
- How to Search
- AutoGrad
1. What’s Gradient?
- 导数,derivative
- 偏微分,partial derivative
- 梯度,gradient
∇f=(∂f∂x1;∂f∂x2;…;∂f∂xn)∇f=(\frac{∂f}{∂x_1} ; \frac{∂f}{∂x_2} ;…; \frac{∂f}{∂x_n} )∇f=(∂x1∂f;∂x2∂f;…;∂xn∂f)
2. What does it mean?
可以看到,梯度就是函数对x求偏导和对y求偏导的向量和; 在函数上升的时候,梯度方向是向外扩散的; 在函数上升的快的时候,梯度的向量的模也大(就是图中箭头长); 在函数梯度趋于缓慢或为0时,梯度的向量的模小(就是图中箭头短);
如上图所示,蓝色区域代表函数值较小的区域,因为箭头是向外扩散的,而梯度的方向就是函数值增大的方向; 红色区域代表函数值较大的区域,因为箭头是向内收缩的,而梯度的反方向就是函数值减小的方向;
3. How to search?
∇f→largervalue∇f→larger\ value∇f→larger value
- Search for minima:
- lr/α/ηlr/α/ηlr/α/η
θt+1=θt−αt∇f(θt)θ_{t+1}=θ_t-α_t ∇f(θ_t)θt+1=θt−αt∇f(θt)
- lr/α/ηlr/α/ηlr/α/η
- Search for minima:
4. For instance
θt+1=θt−αt∇f(θt)θ_{t+1}=θ_t-α_t ∇f(θ_t)θt+1=θt−αt∇f(θt)
(1) Function:
J(θ1,θ2)=θ12+θ22J(θ_1,θ_2 )=θ_1^2+θ_2^2J(θ1,θ2)=θ12+θ22
(2) Objective:
minθ1,θ2J(θ1,θ2)\min_{θ_1,θ_2}J(θ_1,θ_2 )θ1,θ2minJ(θ1,θ2)
(3) Update rules:
θ1≔θ1−αdθ1J(θ1,θ2)θ_1≔θ_1-α \frac{d}{θ_1}J(θ_1,θ_2 )θ1:=θ1−αθ1dJ(θ1,θ2)
θ2≔θ2−αdθ2J(θ1,θ2)θ_2≔θ_2-α \frac{d}{θ_2}J(θ_1,θ_2 )θ2:=θ2−αθ2dJ(θ1,θ2)
(4) Derivatives:
ddθ1J(θ1,θ2)=ddθ1θ12+ddθ1θ22=2θ1\frac{d}{dθ_1} J(θ_1,θ_2 )=\frac{d}{dθ_1 } θ_1^2+\frac{d}{dθ_1} θ_2^2=2θ_1dθ1dJ(θ1,θ2)=dθ1dθ12+dθ1dθ22=2θ1
ddθ2J(θ1,θ2)=ddθ2θ12+ddθ2θ22=2θ1\frac{d}{dθ_2} J(θ_1,θ_2 )=\frac{d}{dθ_2} θ_1^2+\frac{d}{dθ_2} θ_2^2=2θ_1dθ2dJ(θ1,θ2)=dθ2dθ12+dθ2dθ22=2θ1
5. Learning Process
(1) Learning Process-1
(2) Learning Process-2
←\leftarrow←
6. AutoGrad
- With tf.GradientTape() as tape:
- Build computation graph
- loss=fθ(x)loss=f_θ (x)loss=fθ(x)
- [w_grad] = tape.gradient(loss, [w])
7. GradientTape
(1) with tf.GradientTape() as tape
: 将要更新的参数梯度全部放入这个函数里;
(2) grad1 = tape.gradient(y, [w])
: 其中y就是损失losslossloss,[w]为要更新的参数;
可以看到,计算结果为[None],这是因为我们放入方法内的函数是y2=x∗wy_2=x*wy2=x∗w,与y无关,所以返回值为[None];
(3) grad2 = tape.gradient(y2, [w])
: 更新w的梯度,即:
∂y2∂w=x=2\frac{∂y_2}{∂w}=x=2∂w∂y2=x=2
8. Persistent GradientTape(多次调用)
with tf.GradientTape(persistent=True) as tape
: 设置参数persistent=True
,这样就可以进行多次更新操作了;
9. 2nd2^{nd}2nd-order
y=xw+by=xw+by=xw+b
∂y∂x=x\frac{∂y}{∂x}=x∂x∂y=x
∂2y∂x2=∂y′∂w=∂x∂w=None\frac{∂^2 y}{∂x^2 }=\frac{∂y'}{∂w}=\frac{∂x}{∂w}=None∂x2∂2y=∂w∂y′=∂w∂x=None
- 要包2层
tf.GradientTape()
,因为要求二阶导数。
- 要包2层
10. 二阶求导实战
import tensorflow as tfw = tf.Variable(1.0)
b = tf.Variable(2.0)
x = tf.Variable(3.0)with tf.GradientTape() as t1:with tf.GradientTape() as t2:y = x * w + bdy_dw, dy_db = t2.gradient(y, [w, b])
d2y_dw2 = t1.gradient(dy_dw, w)print(dy_dw)
print(dy_db)
print(d2y_dw2)assert dy_dw.numpy() == 3.0
assert d2y_dw2 is None
运行结果如下:
参考文献:
[1] 龙良曲:《深度学习与TensorFlow2入门实战》
[2] http://mccormickml/2014/03/04/gradient-descent-derivation/
[3] http://ruder.io/optimizing-gradient-descent/
深度学习(23)随机梯度下降一: 随机梯度下降简介相关推荐
- python深度学习第三讲——用python写神经网络梯度下降(手写字符识别mnist)
机器学习使用训练数据进行学习.使用训练数据进行学习,严格来说,就是针对训练数据计算损失函数的值,找出使该值尽可能小的参数.因此,计算损失函数时必须将所有的训练数据作为对象.也就是说,如果训练数据有10 ...
- 花书+吴恩达深度学习(二九)生成随机网络 GSN
文章目录 0. 前言 1. 生成随机网络 GSN 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 花书+吴恩达深度学习(二七)深度生成模型之玻尔兹曼机及其变体(RBM, DB ...
- 深度学习之循环神经网络(7)梯度裁剪
深度学习之循环神经网络(7)梯度裁剪 1. 张量限幅 2. 限制范数 3. 全局范数裁剪 梯度弥散 梯度爆炸可以通过 梯度裁剪(Gradient Clipping)的方式在一定程度上的解决.梯度裁剪 ...
- 深度学习之循环神经网络(6)梯度弥散和梯度爆炸
深度学习之循环神经网络(6)梯度弥散和梯度爆炸 循环神经网络的训练并不稳定,网络的善妒也不能任意加深.那么,为什么循环神经网络会出现训练困难的问题呢?简单回顾梯度推导中的关键表达式: ∂ht∂hi= ...
- 深度学习之循环神经网络(3)梯度传播
深度学习之循环神经网络(3)梯度传播 通过循环神经网络的更新表达式可以看出输出对张量Wxh\boldsymbol W_{xh}Wxh.Whh\boldsymbol W_{hh}Whh和偏置b\b ...
- 深度学习之卷积神经网络(6)梯度传播
深度学习之卷积神经网络(6)梯度传播 在完成手写数字图片识别实战后,我们对卷积神经网络的使用有了初步的了解.现在我们来解决一个关键问题,卷积层通过移动感受野的方式实现离散卷积操作,那么它的梯度传播是 ...
- DL框架之TensorFlow:深度学习框架TensorFlow Core(低级别TensorFlow API)的简介、安装、使用方法之详细攻略
DL框架之TensorFlow:TensorFlow Core(低级别TensorFlow API)的简介.安装.使用方法之详细DL框架之TensorFlow:深度学习框架TensorFlow Cor ...
- ML之模型文件:机器学习、深度学习中常见的模型文件(.h5、.keras)简介、h5模型文件下载集锦、使用方法之详细攻略
ML之模型文件:机器学习.深度学习中常见的模型文件(.h5..keras)简介.h5模型文件下载集锦.使用方法之详细攻略 目录 ML/DL中常见的模型文件(.h5..keras)简介及其使用方法 一. ...
- DL之AF:机器学习/深度学习中常用的激活函数(sigmoid、softmax等)简介、应用、计算图实现、代码实现详细攻略
DL之AF:机器学习/深度学习中常用的激活函数(sigmoid.softmax等)简介.应用.计算图实现.代码实现详细攻略 目录 激活函数(Activation functions)相关配图 各个激活 ...
- 【深度学习】PyTorch 中的线性回归和梯度下降
作者 | JNK789 编译 | Flin 来源 | analyticsvidhya 我们正在使用 Jupyter notebook 来运行我们的代码.我们建议在Google Colaborat ...
最新文章
- Django 图片上传upload_to路径指定失效的问题记录
- centeros php 实战
- step5 . day5 网络编程 基于UDP协议的多人网络在线聊天功能
- 使用tab键分割的文章能快速转换成表格。( )_EXCEL的163种使用技巧集锦-42~62
- ubunu安装软件的一个错误
- leetcode103. 二叉树的锯齿形层次遍历(bfs)
- C# Collection was modified;enumeration operation may not execute
- SQL Server链接服务器(一台机器SQL Server登陆,同时映射登陆到另外一台远程服务器的数据库)
- 清除数据库中大于10W行的垃圾历史数据
- 远程登录服务器时,提示未被授予终端服务器登录权限?
- 关于用友凭证打印模板
- 中国象棋(单机版)java_中国象棋大师-中国象棋单机版下载 2017最新版-中国象棋单机游戏下载-pc6游戏网...
- PHP格式化 插件 vs code
- TLS SNI(TLS Server Name Indication)配置:F5、Nginx和IIS
- Java编程——subString,截取当前字符串的部分内容
- python中 math.isfinite返回值为false_带有Python示例的math.isfinite()方法
- 7.5.3 QListWidgetItem条目视图介绍
- 区块链 图灵完备是什么
- 人工智能在电力系统中的应用值得思考的问题
- 如何使用pyinstaller将Python的代码打包
热门文章
- oracle客户端没有deinstall.bat,Oracle数据库11gR2的卸载 - deinstall
- list容器java_【Java容器】List容器使用方法及源码分析
- led透明屏生产厂家_如何实现LED双面透明显示屏,双面LED透明屏
- Please make sure you have the correct access rights and the repository exists.报错问题
- Ajax POST请求获取后台返回的数据
- The executable was signed with invalid entitlements
- webpack3 css,媒体查询不能使用CSS /样式加载器和Webpack3
- java位宽_Java的数据类型
- 小猿圈Java学习之通过命令行设置属性值
- linux下安装配置redis服务