吴恩达神经网络和深度学习课程自学笔记(六)之优化算法
Mini-batch梯度下降法
简要介绍
训练集向量化:
将训练集分为小集合,子集取名为Mini-batch。假设训练集总共5000000个,小集合为1000,则有:
其中,1-1000为x^{1},1001-2000为x^{2},……最后一个为x^{5000}。y也是一样。
设t为Mini-batch个数,则有x^{t},y^{t}。
传统(batch)梯度下降一次训练整个训练集,而Mini-batch梯度下降每次训练一个小集合。
实现方法
一次得到5000个梯度下降(传统的一次一个),因此速度很快。
对于有丢失的训练集,Mini-batch也很快。
进一步理解Mini-bacth梯度下降
(1)Mini-batch size = m ——- 传统梯度下降
(2)Mini-batch size = 1 ——- 随机梯度下降
对于(1):每次迭代需要处理大量的训练样本,因此训练集很大时,速度很慢。
对于(2):减小学习速率噪声会有所减少。但会失去所有向量化带来的加速。
对于(3):实际中,选择不大不小的Mini-batch;第一得到了向量化的加速,第二处理大量训练样本也很快。
选择Mini-batch size的技巧
(1)如果训练集较小(小于2000左右),使用传统(batch)梯度下降。较大则选用Mini-batch,size设为2的次方(64,128,256,512)计算机运算较快。
(2)确保 X^{t} 、Y^{t} 符合GPU/CPU内存。
(3)实际中多尝试几个size的值以找到最优值。
指数加权平均
有如下式子:
更正式的:
t = 1/(1-β) 。(β=0.9,就是前10天的平均温度)
对于温度-天数曲线图有合适的β使曲线更符合。
理解指数加权平均
天数随着系数的减少而指数式减少。
实际执行
代码占用内存较少(只有简单的几行),但是信息(前t 天温度)占用内存较多。
指数加权平均的偏差修正
让平均数运算更准确。
问题
在 t 较小时:
解决办法
Momentum(动量梯度下降)
运行速度快于标准的梯度下降。原理是:计算梯度的指数加权平均数,并利用该梯度更新权重。
问题
对于标准的梯度下降:
当我们使用较小的学习速率时,虽然不太摆动但是速度很慢;使用较大的学习速率时,摆动较厉害,最终到达最优点的时间也比较长。
解决办法:采用较大学习速率,同时减少纵轴摆动。
Momentum
计算之后,纵轴平均值为0,减小了摆动,只往横轴方向运动。
可以看做是一个球往下滚,其中β是摩擦力(不会一直滚下去);dw,db是加速度;Vdw,Vdb是速度。
在球往下滚的时候,获得了动量,所以叫动量梯度下降。
超参数:学习速率(α)和β。β一般取0.9效果挺好。
Tip:实际中不会受到偏差修正的困扰。
另一种还有 Vdw = βVdw +dw ,此时Vdw缩小了(1-β)倍,α要根据(1-β)相应变化。
两者性能上基本没差别,但一般用前者(后者在调整Vdw和Vdb时还需要调整α)。
RMsprop (均方根)
加速梯度下降。
假设:
则我们需要减缓 b ,加快 w 。
则有:
纵轴摆动较大,所以db较大,大于dw,所以 Sdb也较大,Sdw较小。而 w 更新时 dw 除以一个较小的数,b 更新时db除以一个较大的数。所以经过迭代之后,纵轴摆动减小。之后可以用较大的α来加快学习。
Tip:实际上dw可能是高维参数。
Tip:防止Sdw/Sdb趋近于0(分母为0),则在分母上加一个参数(很小的,10的负8次方左右)。
Adam优化算法
Momentum 和 RMsprop 的结合体。结合了两种算法,有效适用于不同神经网络以及广泛的结构。
具体实现:
超参数:
学习率衰减
加快学习算法的一个方法:随时间慢慢减少学习率。
若α为固定值,则会在最优点附近摆动,不会精确地收敛。
在刚开始时能承受较大的步长,但在快收敛时则需小步长。
有三种方式:
局部最优问题
实际上代价函数梯度为0的点不是局部最优点,而是鞍点。
高维度更容易碰到鞍点。
(1)一般不太可能困在极差的局部最优中,条件是存在大量参数,且代价函数J定义在较高的维度空间。
(2)平稳段使学习变得十分缓慢,这也是Momentum和RMsprop能够加速的地方。而Adam能让我们 尽早往下走出平稳段。