代码仓库: https://github.com/brandonlyg/cute-dl
目标
- 增加学习率优化器, 加快模型在小学习率下模型的训练速度。
- 使用MNIST数据集比较同一个模型使用不同学习率优化器的表现。
常见的学习率优化算法
在上个阶段,我们使用固定学习率优化器训练识别MNIST手写数字模型。在后面的示例中将会看到: 如果学习习设置太大,模型将无法收敛; 如果设置学习率太小模型大概率会收敛速度会非常缓慢。因此必须要要给学习率设置一个合适的值,这个合适的值到底是什么需要反复试验。
训练模型的本质是,在由损失函数定义的高纬超平面中尽可能地找到最低点。由于高纬超平面十分复杂,找到全局最低点往往不现实,因此找到一个尽量接近全局最低点的局部最低点也是可以的。
由于模型参数是随机初始化的,在训练的初始阶段, 可能远离最低点,也可能距最低点较较近。为了使模型能够收敛,较小的学习率比较大的学习率更有可能达到目地, 至少不会使模型发散。
理想的状态下,我们希望,学习率是动态的: 在远离最低点的时候有较大的学习率,在靠近最低点的时候有较小的学习率。
学习率算法在训练过程中动态调整学习率,试图使学习率接近理想状态。常见的学习率优化算法有:
- 动量算法。
- Adagrad算法。
- RMSProp算法。
- Adadelta算法。
- Adam算法。
目前没有一种理论能够给出定量的结论断言一种算法比另一种更好,具体选用哪种算法视具体情况而定。
接下来将会详细讨论每种算法的数学性质及实现,为了方便讨论,先给出一些统一的定义:
- 模型经历一次向前传播和一次反向传播称训练称为一次迭代。用t表示模型当前的迭代次数,t=0,1,2,…。 当t=0是表示模型处于初始状态。
- g表示反向传播的梯度, g t g_t gt是第t次迭的梯度。其他量的表示方式和g相同。
- w表示模型学习的参数。α表示学习率超参数。
- 符号a ⊙ v如果a和v都是向量, a, v必须有相同的维度a ⊙ v表示他们相同位置上的元素相乘,结果是和a,v具有相同维度的向量. 如果a是标量v是向量a ⊙ v表示向量的标量乘法等价于av。
动量算法
数学原理
v t = v t − 1 γ + α g t w = w − v t \begin{matrix} v_t = v_{t-1}γ + αg_t \\ w = w - v_t\\ \end{matrix} vt=vt−1γ+αgtw=w−vt
其中v是动量 v 0 = 0 v_0=0 v0=0, γ是动量的衰减率 γ ∈ ( 0 , 1 ) γ∈(0,1) γ∈(0,1). 现在把 v t v_t vt展开看一下 g i , i = 1 , 2 , . . . t g_i, i=1,2,...t gi,i=1,2,...t对v_t的影响.
v t = α ( γ t − 1 g 1 + γ t − 2 g 2 + . . . + γ g t − 1 + g t ) v_t = α(γ^{t-1}g_1 + γ^{t-2}g_2 + ... + γg_{t-1} + g_t) vt=α(γt−1g1+γt−2g2+...+γgt−1+gt)
个项系数之和的极限情况:
lim t → ∞ ∑ i = 1 t γ t − i = 1 1 − γ \lim_{t \to ∞} \sum_{i=1}^t γ^{t-i} = \frac{1}{1-γ} t→∞limi=1∑tγt−i=1−γ1
令 t = 1 1 − γ t=\frac{1}{1-γ} t=1−γ1则有 1 t = 1 − γ \frac{1}{t}=1-γ t1=1−γ, g i g_i gi的指数加权平均值可用下式表示:
v ˉ t = 1 t ( γ t − 1 g 1 + γ t − 2 g 2 + . . . + γ g t − 1 + g t ) = ( 1 − γ ) ( γ t − 1 g 1 + γ t − 2 g 2 + . . . + γ g t − 1 + g t ) \bar v_t = \frac{1}{t}(γ^{t-1}g_1 + γ^{t-2}g_2 + ... + γg_{t-1} + g_t) = (1-γ)(γ^{t-1}g_1 + γ^{t-2}g_2 + ... + γg_{t-1} + g_t) vˉt=t1(γt−1g1+γt−2g2+...+γgt−1+gt)=(1−γ)(γt−1g1+γt−2g2+...+γgt−1+gt)
如果把学习率α表示为: α = α 1 − γ ( 1 − γ ) α=\frac{α}{1-γ}(1-γ) α=1−γα(1−γ),因此 v t v_t vt可以看成是最近的 1 − γ 1-γ 1−γ次迭代梯度的指数加权平均乘以一个缩放量 α 1 − γ \frac{α}{1-γ} 1−γα, 这里的缩放量 α