《深度学习工程师-吴恩达》02改善深层神经网络--优化算法 总结
1.重点归纳
1)Mini-batch梯度下降法
(1)把训练集划分为多个子集,每个子集为一个mini-batch,使用每个mini-batch的数据进行训练,每次只需要处理一个mini-batch的训练集就能进行一步梯度下降法。
(2)mini-batch梯度下降法比batch梯度下降法运行更快。
(3)在mini-batch梯度下降法中,每次迭代都在不同的训练集上进行,并不是每次迭代中损失函数都会下降,总体方向是向下的,但是会有更多的噪音。
(4)mini-batch大小取值[1, m]之间,一般为[64, 512]之间(2的n次方的数值)。
2)指数加权平均法
(1)
- vt可认为是1/(1-β)的每日的预测数值,较大β值得到的曲线平坦一些,由于多平均了几天的历史数值,缺点是曲线进一步右移,预测值适应会更缓慢一点,出现一些延迟。
- 如β=0.9,这是10天的平均值
- 展开的公式可以知道vt是由vt-1至v0的所有值组成,并且权重随着时间的远离呈指数衰减
(2)修正
- 修正原因:在计算指数移动平均时,初始值为0,导致开始那几天估测不准(远低于实际值)
- 修正公式:
- 随着t的增加,βt将接近0,当t很大时,偏差修正几乎没有作用
- 偏差修正可以更好预测温度
3)动量梯度下降法(Momentum):把加权指数移动平均法融合到梯度下降法中,可以加速梯度下降
(1)公式
(2)公式中梯度(积分项dw/db)相当于加速度,momentum项(Vdw/Vdb)相当于速度,梯度下降过程加速度负责改变梯度下降的方向,原有速度提供了惯性,使得速度比较大的方向的梯度改变慢下来。
(3)β一般取值0.9,平均了前十次的梯度,一般可以取得不错的效果。
4)RMSprop梯度下降法,可以加速梯度下降
(1)公式
(2)当导数越大(坡度越陡,如上图的db),权重变化就越小;反之当导数越小时,权重变化越大。可以消除梯度下降中的摆动,因此我们可以使用更大的学习率α,而无须在纵轴上垂直方向偏离。
5)Adam优化算法:将Momentum和RMSprop结合在一起
(1)公式
(2)这是一种极其常用的学习算法,被证明适用于不同的神经网络,适用于广泛的结构
6)学习率衰减:加速学习速度的另一个方法就是随时间慢慢减少学习率—学习率衰减,在学习的初期使用较大的步伐,当开始收敛的时候,小一些的学习率能让步伐小一些。
2.Mini-batch梯度下降法
1)对整个数据集执行梯度下降法时,必须处理整个训练集才能进行一步梯度下降法,将会花费大量时间来进行计算。
2)mini-batch梯度下降法
(1)把训练集划分为多个子集,每个子集为一个mini-batch
(2)使用每个mini-batch的数据进行训练,每次只需要处理一个mini-batch的训练集就能进行一步梯度下降法
3)mini-batch梯度下降法比batch梯度下降法运行更快
3.理解Mini-batch梯度下降法
1)迭代训练时损失函数的变化
(1)在batch梯度下降法中,每次迭代都需要遍历整个训练集,预期每次迭代的损失函数都会下降。
(2)在mini-batch梯度下降法中,每次迭代都在不同的训练集上进行,并不是每次迭代中损失函数都会下降,总体方向是向下的,但是会有更多的噪音。
噪音的原因在于,也许某mini-batch比较容易计算mini-batch,但是某些mini-batch比较难计算,所以才会出现这些摆动。
2)mini-batch大小三种情况
(1)极端情况下,当mini-batch大小等于总训练样本m时,相当于batch梯度下降法
- 如果样本量很大,缺陷在于每次梯度下降的计算时间很长;
- 如果样本不是很大,batch梯度下降会运行得很好。
(2)另一种极端情况,当mini-batch等于1时,相当于随机梯度下降法
- 随机梯度下降法永远不会收敛,而是会一直在最小值附近波动。
- 需要设置比较小的学习率,噪声会有所减少
- 不能进行向量化计算带来的加速,一次处理一个样本的效率过于低下
(3)mini-batch大小取值[1, m]之间
- 实际应用中应该选取不大不小的mini-batch大小,实际上的学习率达到最快
- 得到了大量向量化
- 不需要等待太久就可以开始后续的训练
3)mini-batch大小选择
(1)如果训练样本较小,mini-batch大小选择整个训练集大小,直接使用batch梯度下降法
- 例如说小于2000个样本
(2)如果训练样本较大,mini-batch大小一般为[64, 512]之间
- 考虑到电脑内存设置和使用方式,一般为2的n次方的数值(64, 128, 256, 512),代码运行快一些。
- 也有mini-batch大小为1024,不过比较少见
- mini-batch的特征和类大小要符合CPU/GPU内存,否则算法表现急转直下
4.指数加权平均(指数加权移动平均)
1)局部平均值/移动平均值
(1)
(2)vt可认为是1/(1-β)的每日温度
- β=0.9,这是10天的平均值,如下图红线
- β=0.98,这是50天的平均值,如下图绿线
- 较大β值得到的曲线平坦一些,由于多平均了几天的温度,缺点是曲线进一步右移,温度适应会更缓慢一点,出现一些延迟。
- 给前一天的值更多的权重,只有0.02的权重给了当日的值
- β=0.5,这是2天的平均值,如下图黄线
- 平均的数据更少,所以得到曲线有更多的噪声
- 更快适应温度变化
5.理解指数加权平均
1)从下面展开的公式可以知道vt是由vt-1至v0的所有值组成,并且权重随着时间的远离呈指数衰减
6.指数加权平均的偏差修正
1)在计算指数移动平均时,初始值为0,导致开始那几天估测不准(远低于实际值)
2)对结果进行修正:
- 随着t的增加,βt将接近0,当t很大时,偏差修正几乎没有作用
- 偏差修正可以更好预测温度
3)在计算指数移动平均时,大家不在乎执行偏差修正,因为大部分人宁愿熬过初始时期,拿到有偏差的估测然后继续计算下去。
7.动量梯度下降法(Momentum)
1)Momentum几乎总是比标准的梯度下降算法运行速度要快
梯度下降法求解过程不懂摆动,最后才慢慢摆动到最小值,这种上下摆动减慢了梯度下降法的速度,所以无法使用更大的学习率。如果使用更大的学习率,可能会偏离函数的范围。
2)momentum把加权指数移动平均法融合到梯度下降法中
(1)公式
(2)权重更新更新过程中上下摆动,平均值接近零。加入了历史的动量参数后,平均过程中正负数相互抵消,所以平均值接近零,所以上下摆动的方向变得很小,但是其它方向依然可以快速梯度下降。
(3)momentum梯度下降法迭代几次后最终摆动变小,横轴方向(假设往横轴方向下降)运动更快,在抵达最小值的路上减少了摆动。
(4)公式中梯度(积分项dw/db)相当于加速度,momentum项(Vdw/Vdb)相当于速度,梯度下降过程加速度负责改变梯度下降的方向,原有速度提供了惯性,使得速度比较大的方向的梯度改变慢下来。
(5)β一般取值0.9,平均了前十次的梯度,一般可以取得不错的效果。
(6)也可以添加偏差修正,但是一般不需要添加,因为10次迭代之后移动平均就过了初始阶段,就不再需要修正。
(7)有些资料中会把积分项的(1-β)去除,Vdw=βVdw+dw, Vdb=βVdb+db,相当于动量部分乘以了1/(1-β),在计算权重w和b时α要根据1/(1-β)作相应变化。两者是等价的,只是会影响学习率α的最佳值。
8.RMSProp(root mean square prop)
1)RMSProp也可以加速梯度下降
2)原理
(1)公式
(2)当导数越大(坡度越陡,如上图的db),权重变化就越小;反之当导数越小时,权重变化越大。因此我们可以使用更大的学习率α,而无须在纵轴上垂直方向偏离。
3)Momentum类似都可以消除梯度下降中的摆动
9.Adam(Adaptive Moment Estimation)优化算法
1)Momentum算法和RMSProp算法是少有的经受住考验的两种优化算法,适用于不同的深度学习结构。
2)Adam优化算法基本上就是将Momentum和RMSprop结合在一起
(1)公式
(2)这是一种极其常用的学习算法,被证明适用于不同的神经网络,适用于广泛的结构
(3)超参数
- 学习率α需要尝试不同的值来看哪个更好
- β1常用的缺省值为0.9
- β2 Adam作者建议0.999
- ε的选择没那么重要,Adam作者建议使用10-8,并不需要设置它,它并不会影响算法表现
10.学习率衰减
1)加速学习速度的另一个方法就是随时间慢慢减少学习率—学习率衰减,在学习的初期使用较大的步伐,当开始收敛的时候,小一些的学习率能让步伐小一些。
2)方法一:
(1)其中一种公式:
(2)学习率呈递减趋势
(3)需要超时不同的超参数α0和decay-rate找到合适的值
3)方法二(指数衰减):
4)方法三:
5)方法四:离散下降的学习率,也就是某个步骤有某个学习率,学习率每个步骤都变成前一步骤的一半
11.局部最优的问题
1)局部最优点
2)通常梯度为零的点并不是上图中的局部最优点,实际上成本函数的零梯度点通常是鞍点(如下图)。
3)一个具有高维度空间的函数,如果梯度为零,那么在每个方向它可能是凸函数,也可能是凹函数。有些维度方向向下,有些向上,同时向下的可能性比较小,所以在高维空间更可能碰到鞍点。
(1)首先你不太可能困在极差的局部最优中
(2)平稳段使得学习是否缓慢,像Momentum和RMSprop这样的算法能够假设学习。更成熟的算法是像Adam这样的算法能够加快速度,让你尽快往下走出平稳段。