![深度学习与MindSpore实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/465/34061465/b_34061465.jpg)
4.4 自适应学习率
介绍完如何提升深度学习模型的性能效果后,本节将着重介绍如何优化深度学习系统的训练过程。在第2章介绍的优化算法中,无论是基本的梯度下降法还是其他优化算法,训练过程的学习率都是一个很大的问题。不可变的学习率在一定程度上影响了模型的收敛速度,使得训练时长变大,计算开销居高不下。如果在训练过程中学习率可变,那么模型收敛速度会明显提升。本节将介绍3种常用的自适应学习率算法:AdaGrad、RMSProp和Adam。首先回顾梯度下降公式,即:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P62_12412.jpg?sign=1739462294-M2vfK0KFAcepaUlCpVlZqcChPvwQ1YeR-0-0be3dabbc5deda63af981f9581d3c2b9)
式中,α——学习率;
▽J(wt-1)——方向。
4.4.1 AdaGrad
在应用梯度下降算法的过程中,每个参数更新方向和幅度是不一样的。在某个时间段,某些变量已经到达极小值附近。然而,可能有些变量仍然在初始位置不远处。此时不变的学习率可能会导致一些问题。如果学习率偏大,那么处于极小值附近的参数很容易不稳定。如果学习率偏小,那么更新不多的参数收敛得还是很慢。AdaGrad的思想是对于不同的参数去设置不同的学习率以解决这个问题。学习率一开始设置得比较大,用以快速进行梯度下降。随着优化过程的进行,减小那些已经下降很多的参数的学习率。对于还没怎么下降的参数,则继续保持一个较大的学习率。
AdaGrad先计算梯度,然后累计梯度的二次方,计算公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_12415.jpg?sign=1739462294-yuI71UY8n5kvPnXdDeiRHoMZbqXrxQI8-0-a4bd7bf1d6a0f93a0569103165f3ad2d)
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_12416.jpg?sign=1739462294-eFEpF3H9tZJoP6wlChgMoLTZvwAjmwj8-0-a557463a4c8107ff99631d0387729fa9)
根据累积的梯度二次方,计算更新公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_12418.jpg?sign=1739462294-xHFaR7glwMdNiMoUibp1vOCNgFdQGorp-0-5f946090d7973c707d6a787a5ebd4c14)
式中,δ——一个极小值,为了防止分母为0;
ε——全局学习率。
随着训练过程的进行,梯度的累积会越来越大,使得整体的学习率会越来越小。AdaGrad可以自动地根据迭代来更改学习率。但AdaGrad有一个很明显的缺点在于其分母项的累积总和总在不断地增长,这会导致学习率缩小并变得无限小,致使算法不能再更新权重。AdaGrad算法如算法4.1所示。
算法4.1 AdaGrad算法
输入:全局学习率ε,极小值δ(一般设置为10-7),累积梯度变量r=0
输出:收敛的参数wT
(1) 初始化参数w0
(2) 当不满足停止条件时执行:
(3) 从数据{(x(i), y(i))}均匀随机选取样本m个样本
(4) 计算梯度:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_13839.jpg?sign=1739462294-EttejDNNbuK7AOZEATQWmtAMc4UzoBtX-0-4db36a8ec101c76e4cd8f5228e2bec66)
(5) 计算梯度累积:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_13841.jpg?sign=1739462294-8IS3E4vJ3UalyvmIY30Yxtbb9kBzncqL-0-eeef15835c7b453918126ecb7fc00ea0)
(6) 计算更新:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_13843.jpg?sign=1739462294-cUdt2uPuYrCMnzZFMDA8QNS8mhtNP97z-0-db26e81b511b1d089c51bbdd08a46ef3)
4.4.2 RMSProp
AdaGrad的问题就是学习率最终会无限小,为了解决这个问题,RMSProp作为AdaGrad的扩展,提出通过求当前状态下平方梯度的对数平均值来解决上述问题。时刻t的平方梯度平均值定义公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P64_12422.jpg?sign=1739462294-32X4tPKtl7hElSZn2vpKD4P8lLpQggMD-0-7763c3e9a9715752326ed7097984bcf8)
式中,rt——t-1时刻的平方梯度平均值;
γ——对数平均值的比例系数。
相应的梯度更新如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P64_12424.jpg?sign=1739462294-a42OFATw6IG6QDUGBzrL05xXCqEA6Gpn-0-6741afa59edcae941671f46ff107b0c1)
式中,δ和ε的设定都是和AdaGrad一样。采用求平均值而非像AdaGrad那样求和的方式,可以有效地避免学习率无限低问题。
RMSProp算法总结如算法4.2所示。
算法4.2 RMSProp算法
输入:全局学习率ε,极小值δ(一般设置为10-7),比例系数γ(一般设置为0.9)
输出:收敛的参数wT
(1) 初始化参数w0
(2) 当不满足停止条件时执行
(3) 从数据{(x(i), y(i))}均匀随机选取m个样本
(4) 计算梯度:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P64_13846.jpg?sign=1739462294-zUdIVjp2L4XFOu0jQMoZVVFrEKizniRN-0-d442c1c163a4dbefd0a65e175d08c0b2)
(5) 计算时刻t的平方梯度平均值:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P64_13848.jpg?sign=1739462294-a8NPUhRbdO964Xa9cZlUQ4OVylKf4MY6-0-d643bf0225a98559b41d6ba50f3fc7b8)
(6) 计算更新:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P64_13850.jpg?sign=1739462294-lSom5pPSDrgixPIgGiBokK1xEebIncgf-0-1ca8f2746eb63a08465892d62bdeccc0)
相比于AdaGrad,RMSProp算法通过将梯度累积变为加权平均值,使其在非凸设置中表现更好。AdaGrad在应用于凸函数时可以快速收敛。而神经网络训练多数是非凸函数,由于AdaGrad缩小了学习速率,可能在达到极小值前使学习速率过小。RMSProp使用加权平均值来丢弃很远的信息,以便快速收敛。经过大量的深度学习实验,RMSProp算法是一种有效并且实用的神经网络优化算法。
4.4.3 Adam
Adam(Adaptive Moment)算法也是目前比较常用的自适应学习率算法,其可视为对RMSProp的一种优化。与RMSProp不同的是,Adam在模型训练早期偏差较小。通常Adam对超参数的选择相当稳定,只是有时可能会需要更改学习速率。首先Adam计算一阶梯度偏差公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_12433.jpg?sign=1739462294-DdDZDSQRUAPg5jrWMOMKlvbNwnXuj2Bz-0-bd4a3d2acf9ab648698967b882a7a2e2)
式中,gt——时刻t的梯度;
γ1——一阶梯度累积系数。
类似于RMSProp,Adam计算平方梯度累积系数公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_12435.jpg?sign=1739462294-gU4vTsQ0nauMZ9cT1nGotwhLZtwZWdVO-0-317bd448def16d24663ce8e340611db2)
式中,γ2——平方梯度累积系数。
在计算st和rt之后,Adam计算一阶和二阶修正公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_12436.jpg?sign=1739462294-9OKGJrPj4xfy4VjT5mb5Eg3myNKTPaB4-0-1ae95e677a795ad0f6dcf2f3604430ea)
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_12437.jpg?sign=1739462294-Sxir0lDPMMNiuUeq4FHlYifAqTj2b32I-0-dd259126ec67a48ffccea39360c38873)
随后,Adam根据一阶和二阶修正更新权重公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_12439.jpg?sign=1739462294-kf2kf4unuybgqPA2yB5Ed5pz991yrAwe-0-38952d481d20e85c520b65f2f7ce8d9b)
Adam算法总结如算法4.3所示。
算法4.3 Adam算法
输入:全局学习率ε(一般设置为0.001)、极小值δ(一般设置为10-7)、一阶系数γ1(一般设置为0.9)、二阶系数γ2(一般设置成0.999)
输出:收敛的参数wT
(1) 初始化参数w0
(2) 当不满足停止条件时执行:
(3) 从数据{(x(i), y(i))}均匀随机选取m个样本
(4) 计算梯度:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_13853.jpg?sign=1739462294-SerEFcsZawUHSGXBnEyxoQqpIL4v6zL3-0-8e372437b7857f316195947d85dab5d6)
(5) 计算一阶梯度偏差:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_13855.jpg?sign=1739462294-DjJud6pVT0kyF4tZWMzw3cyQO2MEZZ0P-0-cf67fa013f1e35f50db576ce8e9d1eba)
(6) 计算二阶梯度偏差:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_13857.jpg?sign=1739462294-HdVzAAw2PTHaOoY48mky2smVHg5LJvQ7-0-3a173219ee017a502658e19544557a23)
(7) 计算一阶修正:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_13859.jpg?sign=1739462294-m8leRF6LY8cFHx3eurVyXYGRxdBlryO6-0-06b13b0505cf4d44ad68685265f2a8d2)
(8) 计算二阶修正:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_13861.jpg?sign=1739462294-59krleoi4ViCabvfBcN1YCaYwLX3Vr3Y-0-de8396adeaa2550d88510ce28b60d49d)
(9) 计算更新:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P66_13865.jpg?sign=1739462294-T85iSuzojCq2Eox4TFnSKx0amQCQ3EA7-0-85db452d61022b2baf04f774ab3af163)