自己动手实现深度学习框架-5 使用学习率优化器加快模型训练速度

本文介绍了如何通过实现不同的学习率优化算法,如动量、Adagrad、RMSProp、Adadelta和Adam,来加速深度学习模型的训练。通过在MNIST数据集上比较这些算法,展示了它们如何影响模型的收敛速度和性能。实验结果显示,Adam算法在较小学习率下20000步左右即可达到92.4%的验证准确率,而Adagrad更适合模型微调,其他算法各有优势。
摘要由CSDN通过智能技术生成

代码仓库: https://github.com/brandonlyg/cute-dl

目标

  1. 增加学习率优化器, 加快模型在小学习率下模型的训练速度。
  2. 使用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=vt1γ+αgtw=wvt
        其中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=α(γt1g1+γt2g2+...+γgt1+gt)
        个项系数之和的极限情况:
lim ⁡ t → ∞ ∑ i = 1 t γ t − i = 1 1 − γ \lim_{t \to ∞} \sum_{i=1}^t γ^{t-i} = \frac{1}{1-γ} tlimi=1tγti=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(γt1g1+γt2g2+...+γgt1+gt)=(1γ)(γt1g1+γt2g2+...+γgt1+gt)
        如果把学习率α表示为: α = α 1 − γ ( 1 − γ ) α=\frac{α}{1-γ}(1-γ) α=1γα(1γ),因此 v t v_t vt可以看成是最近的 1 − γ 1-γ 1γ次迭代梯度的指数加权平均乘以一个缩放量 α 1 − γ \frac{α}{1-γ} 1γα, 这里的缩放量 α

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值