学习链接:https://linklearner.com/activity/16/15/45
参考资料:《深度学习详解》
自适应学习率
有时候,梯度下降时会遇到”来回震荡“的情况。
这就说明对应的学习率过大了。但如果我们学习率设置的过小,在需要快速下降的时候,又由于下降的慢、下降步数增多,导致浪费了计算资源。所以提出了自适应学习率(adaptive learning rate)的概念,使得梯度下降时,学习率随着学习进度的变化而变化,而不是一个恒定值。
AdaGrad
AdaGrad (Adaptive Gradient) 是典型的自适应学习率方法,根据梯度大小自动调整学习率。
左边式子中,是学习率,
是与梯度有关的参数,t代表迭代轮数为第t轮,i代表对应模型中的第i个需要学习的参数。在AdaGrad中,学习率的变化与当次梯度更新之前所有梯度的均方差有关。这样在学习过程中可以自动改变学习率。
RMSProp
RMSprop (Root Mean Squared propogation) 与AdaGrad相似,只不过计算的公式有所改变。他只关心当前以及上一次的梯度的加权平均,并且可以调节二者的权重。
Adam
Adam (Adaptive moment estimation) 是最常用的优化策略或优化器 (optimizer) 。可以直接调用Pytorch的Adam优化器。
学习率调度
AdaGrad优化存在一些问题,就是快接近终点时突然学习率”爆炸“了,会导致误差表面上的优化路径波动明显。如下图所示:
引入学习率调度 (learning rate scheduling) 可以解决这个问题。在学习率调度中,是个随时间变化的量,因此可以将符号写为
。
学习率衰减
最常见的调度策略是学习率衰减 (learning rate decay) ,也称学习率退火 (learning rate annealing)。随着参数不断更新,会越来越小,从而不会出现快到终点时优化路径剧烈波动的问题。学习率退火的公式以及
随时间变化曲线如下:
采用退火策略后,就可以平稳到达梯度下降的终点了:
学习率预热
预热是让学习率先变大后边小,至于变到多大、变大的速度、变小的速度是超参数。残差网络 (ResNet) 是要用预热的。
Kaggle实践
分类结果跑出来了,但没找到提交地址。