机器学习往往伴随着大量迭代过程,需要训练诸多模型,才能找到合适的那一个,优化算法能够帮我们快速训练模型。
文章目录
1. Mini-batch梯度下降
解决问题:大数据集上训练速度慢
分割mini-batch训练样本:X{t},Y{t}
上图是一个epoch的训练流程。
2. 理解mini-batch梯度下降算法
可以看到,mini-batch的损失函数曲线更加不平滑,因为每次训练样本随机性太大。
这里batch_size为1时,就成了随机梯度下降。
新问题出现了:不会总朝着最小值靠近。
解决方案:减小学习率。
size选择:2的次方。64~512较为常见。
3. 指数加权平均数
这里得到了移动平均值——每日温度的指数加权平均值。
将上面的算式符号化以后得到上图公式,β=0.9等价于过去10天平均值,红线部分;β=0.98等价于过去50天平均温度,绿线部分,β=0.5,等价于过去过去两天的平均温度。
通过调整β,获取最好的效果。
4. 理解指数加权平均数
把公式一层一层带进去,我们可以发现,第一百天的温度等于前99天的温度乘不同的权重之和。只是越往前,权重越小。
指数衰减函数如上图,权重最大为0.1。公式大概等于1/1-β。
对应之前说过β是多少对应多少天的均值,0.9的10次方等于1/e,0.98的50次方等于1/e。
用这个可以不用直接计算过去10天或者50天的均值,节省了一些内存。
5.指数加权平均的偏差修正
问题:最开始计算移动平均数的起点较低。
如果不关心初期偏差,就不需要使用偏差修正。
6. 动量梯度下降法
加快了运行速度
想法:计算梯度的指数加权平均数。
从上图可以看出,由于每次梯度下降都会有上下波动,这样就不能给较大的学习率。
或者说从纵轴上来看,学习慢一点,减少摆动。
直观上的理解:动量梯度下降法能够最小化碗状函数,想象其为从山上往下滚的球,提供了加速度,Momentum项为速度。
(???)
之前的梯度下降法每一步都独立于之前的步骤。
选择β为0.9是个很鲁棒数。
上图公式如果需要调整β还需要相应调整σ。
7. RMSprop
看了上面式子不难发现,就是算(dW)2的指数加权平均数,然后更新的时候除以其sqrt。
原理:b为垂直方向,W为水平方向,我们希望减缓纵轴的摆动。(???)
目前只需要知道,RMSprop消除了纵轴的摆动,可以使用更大的学习率,加快学习速度。
8. Adam优化算法
Adam优化算法就是RMSprop+Momentum。
Momentum使得梯度保留了加速度,而RMSprop通过减小b,来减少纵轴的波动。
Adam(Adaptive Moment Estimation)。
9. 学习率衰减
问题:mini-batch迭代过程中有噪音,不会真正收敛。
加一个衰减率,对学习率进行衰减。
其他学习率衰减的办法。
10. 局部最优的问题
以前以为梯度为0的地方为局部最优,其实是鞍点。
低维空间的直觉,不能直接应用到高维空间中。
真正的问题是平稳段,使得学习非常缓慢,使用Adam即可。