在梯度下降中,学习率太小可能造成收敛过慢,学习率太大可能造成结果在收敛值两边震荡,如图,红色箭头是学习率太小,绿色箭头是学习率太大:
将在不同学习率下,loss值随训练代数的变化可视化如下:
那么,如何设置学习率learning rate:
idea 1:
使learning rate随训练次数增大而减小。因为初始时,我们离目标较远,随训练次数增大,离目标越来越近,就可以使步长减小。
例如:η表示learning rate,ηt表示第t次的learning rate
idea 2:将每个参数的学习率除以其先前导数的均方根
在idea1中,对于某一参数W,有
所以模型中有多个参数时,同一代中所有参数的learning rate都相同,为了使不同参数的learning rate有所不同,我们提出了idea2
在idea2中,δt是先前所有代的导数的均方根,即:
类比一元二次方程y=ax2+bx+c,我们发现,收敛的点正比于y的一次微分,反比于y的二次微分
且我们刚提出的w可以简化成:
这样做,gt是参数变化的一次微分,分母的均方根代表了参数变化的二次微分
idea 3:RMSProp
为了适应此类情况:
提出了idea2的进阶版,在其基础上,采用以下算法:
其中,α值由用户手动调整,用来调整对新的梯度变化和旧的之间的权重。例如α=0.1,则用户更相信新的梯度变化,新的梯度变化将给模型结果带来更大的影响,而若α=0.9,则用户更相信旧的变化,新的梯度变化将给模型结果带来微小影响