学习率衰减

什么是学习率衰减

加快算法学习速率的一个办法就是随着时间慢慢减小学习率,我们称之为学习率衰减(Learnign rate decay)

为什么要学习率衰减

训练初期,我们希望神经网络学习速度快,代价函数能够迅速收敛,这个时候我们会选择较大的学习率。

当我们逐渐靠近极小值时,如果依旧使用比较大的学习率,很有可能会导致“步幅过大”,参数更新过猛,导致越过了最低点,同理,当我们到达了另外一侧后,很有可能又因为学习率过高,导致依旧“步幅过大”,再次越过最低点,这样循环往复,最终这些参数构成的代价函数值只能在最低点附近不断徘徊波动,无法得到真正的最优解、无法收敛(此时的代价函数是不断震荡的),甚至发散。

Learning rate

因此,在训练一定程度后,我们应该减小学习率,避免上面这种情况的发生,当然如果我们继续训练,过一段时间后我们应当继续减小学习率,以保证逐步达到最优解。

学习率衰减-1
学习率衰减-2

学习率衰减的方法

\[ \alpha = \frac{1}{1+d\times epo}\alpha_0 \]

  • \(d\)为decay-rate,即衰减率,是我们选定的一个常数
  • \(epo\)为epoch-number,即迭代次数(第几次epoch)
  • \(\alpha_0\)为初始学习率
学习率-1
  1. 指数衰减

\[ \alpha = \lambda^{epo}\alpha_0 \]

  • \(epo\)为epoch-number,即迭代次数(第几次epoch)
  • \(\alpha_0\)为初始学习率
  • \(\lambda\)为我们指定的常数,\(\lambda\in(0,1)\)
学习率-2

\[ \alpha = \frac{k}{\sqrt{epo}}\alpha_0 \]

  • \(k\)为我们指定的常数
  • \(epo\)为epoch-number,即迭代次数(第几次epoch)
  • \(\alpha_0\)为初始学习率
学习率-3

\[ \alpha = \frac{k}{\sqrt{t}}\alpha_0 \]

  • \(k\)为我们指定的常数
  • \(t\)为第几个iteration
  • \(\alpha_0\)为初始学习率
学习率-4
  1. 离散下降的学习率

\[ \alpha = \left\{ \begin{aligned} &\alpha_0\quad epo\in[1,epo_0]\\\ &\alpha_1\quad epo\in[epo_0+1,epo_1]\\\ &\alpha_2\quad epo\in[epo_1+1,epo_2]\\\ &\cdots\cdots \end{aligned} \right. \]

学习率-离散衰减

比如,每训练5次,学习率衰减为原先的一半。

当然,离散下降也可以结合前面的几种方法,比如:

  • 每过10个epoch,\(epo = epo+1\)\(\alpha = \lambda^{epo}\alpha_0\),即:\(\alpha = \lambda^{\lfloor \frac{epo}{10} \rfloor}\)
学习率-离散衰减+指数衰减
  1. 手动衰减

当我们发现学习速度下降的时候,手动减小学习率,平时的时候比如每隔一小时减小一次学习率等等。这种方式通常只有在模型比较小的时候才使用

通常情况下,优化算法时我们并不会优先考虑学习率衰减


学习率衰减
https://blog.shinebook.net/2025/03/15/人工智能/理论基础/深度学习/学习率衰减/
作者
X
发布于
2025年3月15日
许可协议