Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)

1.小批量梯度下降mini-batch

1.1 概念

  • 小批量梯度下降,顾名思义,指的是:
  • 假如有一个训练集,大小为1,000,000,每次运行梯度下降,都需要整体遍历一遍数据集之后才能够运行一步。
  • 小批量梯度下降,则将这一百万个样本,分成多份,每1000个样本(可以是其他数字)成为一个小批量。每次运行一个小批量样本时,梯度更新一次。那么,遍历整体一百万个样本时,梯度会更新1000次,即走1000步。
  • 小批量维度:
    X t ∈ ( X n , 1000 ) X^{t}∈(X_n,1000) Xt(Xn,1000)
    Y t ∈ ( 1 , 1000 ) Y^t ∈ (1,1000) Yt(1,1000)
    Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第1张图片

1.2 常用小批量份数

  • 一般来说,当样本数量 ≤ ≤ 2000时,直接采用梯度下降算法
  • 当样本数量$>$2000时,采取小批量梯度下降
  • 每一组的样本数可以分为: 64 , 128 , 256 , 512 64,128,256,512 64,128,256,512等等,都是以2的幂次方为准
  • 所有的X{t} Y{t}都是要放在CPU/GPU中的,这和你的配置,以及一个训练样本的大小都有关系,但是如果你使用的mini-batch超过了 CPU/GPU 内存的容量,不管你怎么做 你都会发现,结果会突然变得很糟 。

1.3 执行过程

和梯度下降类似,只不过梯度下降的X变成了X{t}。
repeat (for i = 1 to m / m t m/m_t m/mt):
前向传播 → → 计算Z,A值 → → 反向传播 → → 计算梯度 → → 更新梯度。

1.4 噪声影响

  • 小批量梯度会产生噪声影响,因此会沿着一条弯弯扭扭的线条往最优化中心(最低点)移动。
  • 同时,小批量梯度(绿色)和随机批量梯度(紫色,一个样本为一个mini-batch)都不会直接在中心停留,而是在周围不断徘徊。
    Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第2张图片
    Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第3张图片

2.指数加权平均

2.1 概念

以温度为例。
公式: V t = β V t − 1 + ( 1 − β ) θ t V_t=βV_{t-1} + (1-β)θ_t Vt=βVt1+(1β)θt
≈ 1 / ( 1 − β ) 天 的 平 均 气 温 ≈1/(1-β) 天的平均气温 1/(1β)

  • 减少β会给画图的曲线增加噪音(因为以前的权值变小,最新的权值变大,导致曲线变动会更加及时,参照10天温度平均值)
  • 增加β会让曲线向右移动,并且更平滑(因为以前的权值变大,最新的权值变小,曲线变动会比较缓慢,也就是很久之后才生效,参照50天温度平均值)
    Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第4张图片
    红色是以10天的平均温度画的曲线
    Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第5张图片
    绿色的是以50天的平均温度画的曲线。更加平滑,并且向右移动。
    这是因为以50天平均温度时,β取的0.98,那么由公式来看,则会以 V t − 1 V_{t-1} Vt1为主,那么温度的即时变化则会反应的相对较慢。
    Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第6张图片
    黄色的是以2天平均温度画的曲线。
    Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第7张图片

2.2 代码

代码比较高效,只用一个初始化值和一行代码即可给出平均值(其他算法给的平均值更准确,但是没有这个高效)。
V θ = 0 V_θ = 0 Vθ=0
repeat:
V θ : = β V + ( 1 − β ) θ t V_θ := βV + (1-β)θ_t Vθ:=βV+(1β)θt
在这里插入图片描述

2.3 偏差修正

即用 V t ( 1 − β t ) \frac{V_t}{(1-β^t)} (1βt)Vt来代表 V t V_t Vt,则能够很好的消除开始时的误差
Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第8张图片

3.加速梯度下降的方法

3.1动量梯度下降算法(Momentum)

3.1.1 概念

指让梯度下降的过程中,通过指数加权平均化,使得每一次迭代的过程中少走弯路,始终朝向比较正确的方向进行。如下图,红色的路径为用动量梯度下降算法进行决策后的最优路径。

Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第9张图片

3.1.2 用法

迭代 t 中:一般来说,β的值为 0.9 最为合适

  • 计算小批量梯度(mini-batch)的dw,db
  • v d w = β V d w + ( 1 − β ) d W v_{dw}=βV_{dw}+(1-β)dW vdw=βVdw+(1β)dW
  • v d b = β V d b + ( 1 − β ) d b v_{db}=βV_{db}+(1-β)db vdb=βVdb+(1β)db
  • W = W − α v d w , b = b − α v d b W=W-αv_{dw},b=b-αv_{db} W=Wαvdwb=bαvdb

3.2 均方根传递(Root Mean Square prop)(RMSprop)

3.2.1 概念

通过运用指数加权平均的方法,在更新dw,db的时候,除上一个对应的数,以此来消除横向/纵向的误差。
Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第10张图片
如图,我们可以看到纵向(b方向)的斜率很大,而横向的斜率很小,因此,我们在更新dw,db的过程中,会给b方向除以一个较大的数,来减少震荡,而w方向除以一个较小的数。
具体表达看以下公式。

3.2.2 用法公式

迭代 t 中:一般来说, β 2 β_2 β2的值为 0.9 最为合适

  • 计算小批量梯度(mini-batch)的dw,db
  • S d w = β 2 S d w + ( 1 − β 2 ) d W 2 S_{dw}=β_2S_{dw}+(1-β_2)dW^2 Sdw=β2Sdw+(1β2)dW2
  • S d b = β 2 S d b + ( 1 − β 2 ) d b 2 S_{db}=β_2S_{db}+(1-β_2)db^2 Sdb=β2Sdb+(1β2)db2
  • W = W − α d w S d w + ε , b = b − α d b S d b + ε W=W-α \frac{dw}{\sqrt{S_{dw}}+\varepsilon},b=b-α\frac{db}{\sqrt{S_{db}}+\varepsilon} W=WαSdw +εdwb=bαSdb +εdb

3.3 Adam优化算法

3.3.1 概念

Adam优化算法其实是动量(Momentum)和均方根(RMS)的结合,适用于多数的神经网络

3.3.2 用法

V d w = 0 , S d w = 0 , V d b = 0 , S d b = 0 V_{dw}=0 , S_{dw}=0 , V_{db}=0,S_{db}=0 Vdw=0,Sdw=0,Vdb=0,Sdb=0
在迭代 t 中:

  • 计算dw,db,using mini-batch算法
  • v d w = β 1 V d w + ( 1 − β 1 ) d W v_{dw}=β_1V_{dw}+(1-β_1)dW vdw=β1Vdw+(1β1)dW         v d b = β 1 V d b + ( 1 − β 1 ) d b v_{db}=β_1V_{db}+(1-β_1)db vdb=β1Vdb+(1β1)db
  • S d w = β 2 S d w + ( 1 − β 2 ) d W 2 S_{dw}=β_2S_{dw}+(1-β_2)dW^2 Sdw=β2Sdw+(1β2)dW2       S d b = β 2 S d b + ( 1 − β 2 ) d b 2 S_{db}=β_2S_{db}+(1-β_2)db^2 Sdb=β2Sdb+(1β2)db2
  • V d w c o r r e c t = V d w / ( 1 − β 1 t ) V_{dw}^{correct} =V_{dw}/(1-β_1^t) Vdwcorrect=Vdw/(1β1t) V d b c o r r e c t = V d b / ( 1 − β 1 t ) V_{db}^{correct} =V_{db}/(1-β_1^t) Vdbcorrect=Vdb/(1β1t)
  • S d w c o r r e c t = S d w / ( 1 − β 2 t ) S_{dw}^{correct} =S_{dw}/(1-β_2^t) Sdwcorrect=Sdw/(1β2t) S d b c o r r e c t = S d b / ( 1 − β 2 t ) S_{db}^{correct} =S_{db}/(1-β_2^t) Sdbcorrect=Sdb/(1β2t)
  • W = W − α V d w c o r r e c t S d w + ε , b = b − α V d b c o r r e c t S d w + ε W=W-α\frac{V_{dw}^{correct}}{\sqrt{S_{dw}}+\varepsilon},b=b-α\frac{V_{db}^{correct}}{\sqrt{S_{dw}}+\varepsilon} W=WαSdw +εVdwcorrectb=bαSdw +εVdbcorrect
  • Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第11张图片

3.3.3 参数取值

Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第12张图片

  • α需要多次调优
  • β1的默认值设置为0.9,这是涉及到动量算法的dW的移动平均 或者说加权平均
  • β2 推荐使用0.999 ,这是关于dW平方与db平方的移动加权平均计算
  • 对于ε 其实如何选择影响都不大 但是Adam论文的作者推荐使用10的-8次方作为默认值

4.学习速率衰减(Learning rate decay)

4.1 概念

指的是,在迭代t中,为了使得算法一步步朝向最优解走,而逐渐降低步长,即学习速率,一次来最接近最优点
Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第13张图片

4.1.2 方法

epach-num为迭代次数
Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第14张图片
Deep Leaning 学习笔记之改善神经网络的超参数(2.1)—— 优化算法速度(小批量、动量、均方根、adam优化算法)_第15张图片

你可能感兴趣的:(DeepLearning)