没有合适的资源?快使用搜索试试~ 我知道了~
首页神经网络梯度更新优化器详解笔记.docx
神经网络梯度更新优化器详解笔记.docx
需积分: 50 30 下载量 141 浏览量
更新于2023-03-03
收藏 1.88MB DOCX 举报
这篇文章将按照时间线详细讲解各类深度学习优化器,包括常用与不常用的(动量、NAG、adam、Adagrad、adadelta、RMSprop、adaMax、Nadam、AMSGrad)本文档将对每个优化器进行更加清晰的讲解,包括数学表达式推导和现实含义,所以可以更容易理解每一个优化器,对于深度学习小白来说也可以很容易看懂
资源详情
资源推荐
阅读“An overview of gradient descent optimization
algorithms”笔记
一、前言:
最新的深度学习库包含各种优化梯度下降的算法,比如有
cae、keras、tensorow、pytorch 等,但是通常这些算法被当做一个黑匣子使用,
所以无法比较这些算法的优与劣。
二、梯度下降变形形式
1、批量归一化(BGD)
每次经过完整一轮训练后更新一次参数,这使得梯度下降过程变得比较慢,并且需
要很大内存保存中间结果。
代码表示:
'''
for i in range(nb_epochs):
params_grad = evaluate_gradient(loss_function, data, params)
params = params - learning_rate * params_grad
'''
2、随机梯度下降(SGD)
随机梯度下降是对每个训练样本就更新一次网络参数,这样使得网络更新参数速度
很快,但是问题就是由于训练数据多样,容易朝偏离网络最优点方向训练,网络训练
不稳定。
代码表示:
'''
for i in range(nb_epochs):
np.random.shue(data)
for example in data:
params_grad = evaluate_gradient(loss_funcon, example, params)
params = params - learning_rate * params_grad
'''
3、小批量梯度下降(MBGD)
小批量梯度下降是批量梯度下降与随机梯度下降之间的一个折中,即经过一个小批
量的训练数据更新一次参数,可以保证网络训练速度不太慢,也能使训练方向不至于
偏离太多,具有一定稳定性。当使用小批量梯度下降时,通常也使用 SGD 这个术语。
代码表示:
'''
for i in range(nb_epochs):
np.random.shue(data)
for batch in get_batches(data, batch_size=50):
params_grad = evaluate_gradient(loss_funcon, batch, params)
params = params - learning_rate * params_grad
'''
三、梯度下降遇到的困难
小批量梯度下降不仅不能保证良好的收敛性,而且也存在一些其他的问题:
(1)很难选择一个合适的学习率,如果学习率太小,将会导致收敛非常缓慢;如果学
习率太大,也会阻碍收敛,导致损失函数值在最小值附近波动甚至发散。
(2)上述问题可以通过提前定义一个学习速率表,当达到相应轮数或者阈值时根据表
改变学习率,但是这样无法适应训练数据本身特征。
(3)并且,对于所有参数我们使用同一个学习速率,如果我们的数据是稀疏的或者我
们特征具有不同的频率,我们可能不希望将它们更新到同样的程度,并且我们希望对
那些出现频率低的特征更新更快。
(4)另外在神经网络中,普遍是具有非凸的误差函数,这使得在优化网络过程中,很
容易陷入无数的局部最优点,而且更大困难往往也不是陷入局部最优点,而是来自鞍
点(也就是在一个维度上其梯度是递增,另一个维度其梯度是递减,而在鞍点处其梯
度为 0),这些鞍点附近往往被相同误差点所包围,且在任意维度梯度近似为 0,所以
随机梯度下降很难从这些鞍点逃出。如下图:
%
四、梯度下降优化算法
接下来将列举一些被深度学习社区广泛用于解决上述困难的算法,这些算法有个共
同之处,一般是求一阶动量(m)和二阶动量(V),然后利用一阶、二阶动量本身或者他
们组合来优化梯度下降(其中一阶动量为与梯度相关函数,二阶动量为与梯度平方相
关的函数)
首先还是给出梯度下降的公式:
θ
t +1
=θ
t
−η
∂
(
Loss
)
∂θ
t
引入梯度下降优化算法后:
θ
t +1
=θ
t
−η
m
t
√
V
t
1、动量(momentum)
随机梯度下降的方法很难通过峡谷区域(也就是在一个维度梯度变化很大,另一个
维度变化较小),这个很好理解,因为梯度下降是梯度更新最大的反方向,如果这个
时候一个维度梯度变化很大,那么就很容易在这个方向上振荡,另一个方向就更新很
慢,如下图:
上面上图没有加动量,下图加了动量的方法,可以看到有动量可以在变化小的维度上
加快更新,使得加快收敛。该方法是通过添加一个参数 β 构建一个一阶动量 m,其中 m
有下列表达式:
m
t
=βm
t −1
+
(
1−β
)
∂
(
Loss
)
∂θ
t
而对于其二阶动量 V=1,所以其参数更新公式为:
θ
t +1
=θ
t
−η m
t
其中 β 一般取 0.9,接下来我不会立即来讲解上面两个公式为什么是这样,怎么理解。
我们来看看其它表达式,相信大家在搜索动量梯度下降时,有时候在其它地方也会看
到下面这种表达式:
v
t
=γv
t −1
+η ∇
θ
t
J
(
θ
t
)
θ
t +1
=θ
t
−v
t
这里的
γ
一般也是等于 0.9,看起来这两种表达式有很大不一样,其实是差不多的,只
不过第一种我觉得看起来更容易理解,第二种我觉得就不是那么明显的去理解,下面
我将根据这两种表达式对比并分析动量梯度下降原理,这样更容易理解,将表达式继
续拆开可以得到:
剩余13页未读,继续阅读
恩泽君
- 粉丝: 180
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功