吴恩达Coursera深度学习课程 deeplearning.ai (2-2) 优化算法--课程笔记
相关课件:https://download.csdn.net/download/haoyutiangang/10495508
2.1 Mini-batch 梯度下降法
原因: 大数据集时,执行一次循环时间很长,梯度下降很慢;
mini-batch 是指将大数据集 n分成一系列小数据集m,每计算一个小数据集就执行一次梯度下降,这样一次大数据集的计算可以下降n/m 次,从而增加梯度下降的速度。
- 执行一次小数据集为一次 mini-batch
- 执行一次大数据集为一次 epoch
mini-batch 使用上角标{i}表示,例如 表示第一个 mini-batch中的 Z
2.2 理解 mini-batch 梯度下降法
mini-batch梯度: 小幅震动,总体下降
- batch梯度下降:
- 对所有m个训练样本执行一次梯度下降,每一次迭代时间较长;
- Cost function 总是向减小的方向下降。
- 随机梯度下降:
- 对每一个训练样本执行一次梯度下降,但是丢失了向量化带来的计算加速;
- Cost function总体的趋势向最小值的方向下降,但是无法到达全局最小值点,呈现波动的形式。
- Mini-batch梯度下降:
- 选择一个1 < size < m的合适的size进行Mini-batch梯度下降,可以实现快速学习,也应用了向量化带来的好处。
- Cost function的下降处于前两者之间。
选择 mini-batch 的大小
- 小数据集(m<2000) 选用 batch 梯度下降
- 大数据集选取:2^6, 2^7, 2^8, 2^9, 2^10 (都尝试一下选用最优的)
- Mini-batch的大小要符合CPU/GPU内存,且为2幂次。
2.3 指数加权平均
为了介绍下面的优化算法,需要先理解指数加权平均,又叫指数加权移动平均。
公式:
为对过去的权重,1- 为对当前值的权重,组合为移动加权平均。
结果大体相当于平均了近 1/(1-) 天的值, 例如 = 0.95 相当于平均了近20天的值
2.4 理解指数加权平均
一般来说有
上文说 = 0.9 则 = 1 - 0.9 = 0.1 也就是 , 经过10天左右权重下降到1/e,所以大体平均了 天的数值。
- 指数加权平均算法仅需要一行代码,一个 catch 来保存上次计算的结果即可。
- 如果直接用前几天的平均数则需要保存几个 catch, 运算也较为复杂。
2.5 指数加权平均的偏差修正
由于加权平均的执行的前期,历史几天的数据不足(比如第一天执行时就没有之前几天的历史数据), 所以会造成前期数值很小的情况。
- 偏差修正
经过修正后,前期的值不在变得很小,并且后期修正逐渐趋向于1, 从而和不修正的后期重合。
实际过程中,一般直接忽略前期偏差的影响,不用修正偏差。
2.6 动量(Momentum)梯度下降法
Momentum:计算梯度的指数加权移动平均v,用这个值来更新参数。
梯度下降如上图蓝线所示,梯度下降过程中有纵向波动,由于这种波动的存在,我们只能采取较小的学习率,否则波动会更大。
而使用动量梯度下降法(指数加权平均)后,经过平均,相当于抵消了上下波动,使波动趋近于零(如图中红线所示),这样就可以采用稍微大点的学习率加快梯度下降的速度。
算法实现
2.7 RMSprop(root mean square prop)
另一种抵消波动加快梯度下降的算法
利用 S 来更新参数
- 与 Momentum 区别:平方后的指数加权平均,更新参数时再开方
- 为了与 Momentum 的参数 () 相区分,这里使用
- 的出现是防止除数为0,一般 即可
2.8 Adam 优化算法
Adam: adaptive moment estimation.
Adam = Momentum(表示第一距) + RMSprop(表示第二矩)
超参数的选择
- : 需要进行调试
- : 推荐 0.9,dW 的加权平均
- : 推荐 0.999, 的加权平均
- : 推荐 ,防止除数为0
2.9 学习率衰减
我们采用 mini-batch 算法时,设置一个固定的学习率 , 由于样本缺失会造成一定幅度的波动,很难收敛,会在最低点附近波动。
如果设置一个较小的学习率,则起初下降太慢。
为了下降快起初学习率可以比较大,为了收敛学习率应该逐渐变小,这就是学习率衰减。
学习率衰减的实现
epoch: 一次样本的全集,多个 mini-batch
epoch_num: 第几次 epoch
-
常用
-
指数衰减
-
其他
-
离散衰减
-
手动衰减
- 数据量小时,感觉下降慢了,自己手动修改
2.10 局部最优的问题
低维情况下可能出现多个极小值,也就是局部最优解。
高维情况下出现极小值的概率很小,因为极小值要求每个参数的导数在这里都是极小值,比如20000维,导数为0时都是极小值的概率很小,更大可能出现部分极小值部分极大值的情况,我们称为鞍点。
- 几乎不可能陷入局部最小值点,更多是鞍点
- 处于鞍点的平稳区会减缓梯度下降速度,利用 Adam 等算法可以得到改善。