![深度学习与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=1739453977-1MqAPWOgZKxZEpscX9oo8GweYGNfgnxH-0-1807b431527a12ce8550dc71385a3831)
式中,α——学习率;
▽J(wt-1)——方向。
4.4.1 AdaGrad
在应用梯度下降算法的过程中,每个参数更新方向和幅度是不一样的。在某个时间段,某些变量已经到达极小值附近。然而,可能有些变量仍然在初始位置不远处。此时不变的学习率可能会导致一些问题。如果学习率偏大,那么处于极小值附近的参数很容易不稳定。如果学习率偏小,那么更新不多的参数收敛得还是很慢。AdaGrad的思想是对于不同的参数去设置不同的学习率以解决这个问题。学习率一开始设置得比较大,用以快速进行梯度下降。随着优化过程的进行,减小那些已经下降很多的参数的学习率。对于还没怎么下降的参数,则继续保持一个较大的学习率。
AdaGrad先计算梯度,然后累计梯度的二次方,计算公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_12415.jpg?sign=1739453977-qFPzu72JWJ0NIq5araeenKCcBaeVcdIQ-0-d8c7735f771d9ad27bf216c48fe372ae)
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_12416.jpg?sign=1739453977-bGkf0Tv1p8qIcd3IzTmu4p3BvkIp76nU-0-958d39032566af6984bbcbe5f6f395e9)
根据累积的梯度二次方,计算更新公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_12418.jpg?sign=1739453977-1hFsJmwoqtFtXgoJcYZw9oXkVYOtIyno-0-40d89250188124a6d3b31a668fd6dfc7)
式中,δ——一个极小值,为了防止分母为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=1739453977-1awq6R834uo5lF8Vh5dXmGajeO7vGgVi-0-5f25b338cc5948b7cb0146641d3e89d3)
(5) 计算梯度累积:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_13841.jpg?sign=1739453977-hprX8tImDKUxyQPR8zeWR68aG4cFhIGZ-0-db64c6780e237f92eca1f8c9c0b43b09)
(6) 计算更新:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P63_13843.jpg?sign=1739453977-ieEAvkbeGtl4y1agt1bmqOBCHxXdZLG2-0-4d1008029c8c317a9bec10f6f11555d8)
4.4.2 RMSProp
AdaGrad的问题就是学习率最终会无限小,为了解决这个问题,RMSProp作为AdaGrad的扩展,提出通过求当前状态下平方梯度的对数平均值来解决上述问题。时刻t的平方梯度平均值定义公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P64_12422.jpg?sign=1739453977-fisWXNQS0cZOF1Yqp6uffKuDaBsmPkPd-0-fdfd4c6ec7af94b34aa5c9fdbe955924)
式中,rt——t-1时刻的平方梯度平均值;
γ——对数平均值的比例系数。
相应的梯度更新如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P64_12424.jpg?sign=1739453977-j7Uca5DKRGQEnuF1azQDq3fdNri7I5zR-0-0c2d784fcc3c1c613bbe8a9bc722205e)
式中,δ和ε的设定都是和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=1739453977-mxjkFtgA1YmcUWDVolkOksjW6ab87kit-0-b36d5323dc3f631eba74085db50e5acb)
(5) 计算时刻t的平方梯度平均值:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P64_13848.jpg?sign=1739453977-SwGEMBaz0IvLtDyvhScDM5ODz43Dac2W-0-e7d27eb0bc7300a5bf8436e1545eb512)
(6) 计算更新:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P64_13850.jpg?sign=1739453977-hCK3rER1lSWmD9TLeAqa9wTA5Lb6dQlk-0-1cdcac05f2cf25ff3f2d819c9386e595)
相比于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=1739453977-AaZQ28Blw24zwT1MrVkLefGZWRFD9xHs-0-44d24530d928494ec06452992410a96f)
式中,gt——时刻t的梯度;
γ1——一阶梯度累积系数。
类似于RMSProp,Adam计算平方梯度累积系数公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_12435.jpg?sign=1739453977-knLJ60W4bO0jmFmqYIpOWbKLWvZNqF0Z-0-cff0ae2d2b5e031a9e0100a885bf9b65)
式中,γ2——平方梯度累积系数。
在计算st和rt之后,Adam计算一阶和二阶修正公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_12436.jpg?sign=1739453977-P6RzUOMJoxKcd5YQasz0s4x6Fc8YwCov-0-104a0821e0c4d3c466f5fa0a11b0a63d)
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_12437.jpg?sign=1739453977-z5nUNI4sqfYV5iviJ7fIbromjvTqqdgI-0-adeb3d022607dd8b6ad31f9d11597011)
随后,Adam根据一阶和二阶修正更新权重公式如下:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_12439.jpg?sign=1739453977-0mnFLeI58qmBRu4urDAejzzwONx06Ubi-0-904b7bc82a2a02b19e97a44d620e82f4)
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=1739453977-PKkfhVtCz47Cz5KCAJUdN00Z5FZPmMCN-0-3e1e7a550c224e63ad31c1c97a9c4118)
(5) 计算一阶梯度偏差:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_13855.jpg?sign=1739453977-0ykc80T5FcnQa8dxGKQZICrKASkDkYJb-0-dbb2b81886778a248fda9ee3987af47a)
(6) 计算二阶梯度偏差:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_13857.jpg?sign=1739453977-h3cYrUd4rzebGaDfNzx6OdX6QUe6yuuo-0-24fe985f4819fe13bb7c0697b08df383)
(7) 计算一阶修正:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_13859.jpg?sign=1739453977-Td2yPlHJiBeExGeOPjjhit44zpyN4zdQ-0-1a1a15bb88f71846ae3eb4714897ca6d)
(8) 计算二阶修正:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P65_13861.jpg?sign=1739453977-RxiFCeRGaJ18EAz8AewjYsMwzn5v4sRj-0-d14015c6308c19b7a801cad3489ed478)
(9) 计算更新:
![](https://epubservercos.yuewen.com/7DD6F1/18225432101803406/epubprivate/OEBPS/Images/Figure-P66_13865.jpg?sign=1739453977-15wtD2tYcJ1hWv6XHc1HWzQG1BHHxvTR-0-d8ae77f3fab3cb50d6f8f88bd067adbd)