![深度学习与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=1739492481-GDEXmdJTm3LO7uczeZ9BO1L00r5S7yU2-0-1f611d280a04634f1f2c9d2a9e05ec83)
式中,α——学习率;
▽J(wt-1)——方向。
4.4.1 AdaGrad
在应用梯度下降算法的过程中,每个参数更新方向和幅度是不一样的。在某个时间段,某些变量已经到达极小值附近。然而,可能有些变量仍然在初始位置不远处。此时不变的学习率可能会导致一些问题。如果学习率偏大,那么处于极小值附近的参数很容易不稳定。如果学习率偏小,那么更新不多的参数收敛得还是很慢。AdaGrad的思想是对于不同的参数去设置不同的学习率以解决这个问题。学习率一开始设置得比较大,用以快速进行梯度下降。随着优化过程的进行,减小那些已经下降很多的参数的学习率。对于还没怎么下降的参数,则继续保持一个较大的学习率。
AdaGrad先计算梯度,然后累计梯度的二次方,计算公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_12415.jpg?sign=1739492481-7FHhGZtDrmuJDQMLIPBGpKv9HIhvWfvV-0-06878b21460ec07161d79e9f8b780586)
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_12416.jpg?sign=1739492481-wnzoceczy90O5LT7opKMWqKVRo77TGxr-0-64c625e08c8d201aca2c50b689677ef6)
根据累积的梯度二次方,计算更新公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_12418.jpg?sign=1739492481-0qTM1GhJxPMBb1rvLeyoIe2S9VoTXmw2-0-876e2ca46e17cd14c6663a0c08c33d19)
式中,δ——一个极小值,为了防止分母为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=1739492481-2ZXolsg6BGewdTlbXTJl8G6rO5R7NUay-0-8131501080638b33c0a3f21ef7b34bfa)
(5) 计算梯度累积:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_13841.jpg?sign=1739492481-TKsFY2umB4EcKQSuZ7JsL0Jd9cXyMTS6-0-9fe355df232dfea7a08ac8b70cda29bf)
(6) 计算更新:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_13843.jpg?sign=1739492481-c4PsiLK2TTB7lZfYPim1w3g5oT0jB41E-0-f55cb222a3511b1a109a5da5224a2883)
4.4.2 RMSProp
AdaGrad的问题就是学习率最终会无限小,为了解决这个问题,RMSProp作为AdaGrad的扩展,提出通过求当前状态下平方梯度的对数平均值来解决上述问题。时刻t的平方梯度平均值定义公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P64_12422.jpg?sign=1739492481-ZwMJaEKuGvP8GspKp5jkTr1P7cHLG3OX-0-6990c42a820f6adaf3f492acdcba75aa)
式中,rt——t-1时刻的平方梯度平均值;
γ——对数平均值的比例系数。
相应的梯度更新如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P64_12424.jpg?sign=1739492481-7WKrPNQSyhoohJAKEeAZ3AwzcUvqPdZp-0-8a1860f552d02759fd2f253caa8e9cea)
式中,δ和ε的设定都是和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=1739492481-Nrjb2MezyRQufp2G4pmXREh8wsFQecAY-0-97e5052226b665038ee8448270b3e042)
(5) 计算时刻t的平方梯度平均值:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P64_13848.jpg?sign=1739492481-70vMdrb7S63868jWlMMFuad6p9jQnUyI-0-c3aeec2602c57ff6fa626f06f3a154c7)
(6) 计算更新:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P64_13850.jpg?sign=1739492481-dOJWDLOeYa4hawfoN8XH94x7hTMsxKQH-0-cb0f4cc609b16e36779f4335c9549a01)
相比于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=1739492481-jMGJKueYR70mcXfckKUNTfS0ZqBiOK3c-0-327c30571b6712d3077220f69de6253d)
式中,gt——时刻t的梯度;
γ1——一阶梯度累积系数。
类似于RMSProp,Adam计算平方梯度累积系数公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_12435.jpg?sign=1739492481-PN9jn7J6hEQF4qsfhVXoWdwzG1g7weKV-0-43eaf69cc5f0f45fc97143e5e3056af8)
式中,γ2——平方梯度累积系数。
在计算st和rt之后,Adam计算一阶和二阶修正公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_12436.jpg?sign=1739492481-yPsZSKhaCAJ2Q1acowkrcj7sqIsPUnAD-0-6a6e08fde7dd04a15205dea337f45bbb)
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_12437.jpg?sign=1739492481-iGh1NIZpksEOZOF3SvkBmv5Dm96jkzAM-0-f3c5d902a2232580ccff379bed06288b)
随后,Adam根据一阶和二阶修正更新权重公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_12439.jpg?sign=1739492481-dUK9JLdRcTaB1F6nZztEssmHsrayoM25-0-0a196d1957123fc142b02f7910b06279)
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=1739492481-AtkGWEACPN69B1FAPJyDaZpkgM14D9Wj-0-0101d1be85ab74d95644451d211c9a92)
(5) 计算一阶梯度偏差:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_13855.jpg?sign=1739492481-KekiCovxjzjWaj6PobikY6I9wrKwwwTz-0-3ea26bec85ee20fa7217191cc4e11d67)
(6) 计算二阶梯度偏差:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_13857.jpg?sign=1739492481-JIYFb391LhCLd4nGQ1GeTI6659iX008k-0-94ed76021170a931d814767c740f5c3e)
(7) 计算一阶修正:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_13859.jpg?sign=1739492481-44swxVpRRTuUBQeET2LNIpzmHYyoHBPl-0-e0c980394484be652dd529875d5252d1)
(8) 计算二阶修正:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_13861.jpg?sign=1739492481-ufhUPfgQMBNb6VFCAEmFhcr7SnpuymoN-0-746d50534d5f3886920421145606b5a3)
(9) 计算更新:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P66_13865.jpg?sign=1739492481-Z6JEBJQI0au4GjCHSQEca3LI63TTOznY-0-d6859ec1312239977c2992af8103e3f0)