![深度学习:核心技术、工具与案例解析](https://wfqqreader-1252317822.image.myqcloud.com/cover/482/22728482/b_22728482.jpg)
2.4 最优化算法
深度学习和机器学习中经常用到一种基于梯度下降等算法衍生出来的优化算法,通过迭代的方式不断搜索最优的参数解。如果将权重参数的解空间比作一个丘陵,而我们要找的最优解就是丘陵里的最低点,不断迭代搜索的过程就像不断将一个小球(小球所在的坐标代表参数当时的值)向最低点移动的过程,所以在移动的过程中,我们最关心的是每个步骤的移动方向和移动步长,这也分别对应于梯度下降中的梯度(方向)和步长,如图2-30所示。
![](https://epubservercos.yuewen.com/06597E/11298012504376706/epubprivate/OEBPS/Images/figure_0062_0001.jpg?sign=1739303580-mfH5oUcyJijWLVFo9MGlMlUQLrjjra86-0-856923de4b5625bf74478c11abce46ea)
图2-30 优化算法的求解过程
下面几节将介绍深度学习中经常使用到的几种典型的优化算法。
2.4.1 梯度下降
梯度下降法是比较常用的并且基本的权重参数求解方法。根据每次训练所使用的数据量不同,梯度下降法可以分为以下几种类型。
1.批量梯度下降(Batch Gradient Descent)
对整个数据集求梯度,然后对权重进行更新。
符号说明:
▼ θ为权重参数。
▼ η为步长。
▼ δJ(θ)表示对全体数据求梯度。
![](https://epubservercos.yuewen.com/06597E/11298012504376706/epubprivate/OEBPS/Images/figure_0063_0001.jpg?sign=1739303580-uHBcyrZvsnFy3dk7pelvfQPweN95MRTb-0-b6adc80231af32b04296faf56b1eb59f)
优点:
▼ 对凸优化问题可以收敛到全局最小值,对非凸优化问题至少可以收敛到局部极小值。
缺点:
▼ 速度较慢。
▼ 内存不能容纳下的样本处理开销较大。
▼ 不能进行在线学习。
2.随机梯度下降(Stochastic Gradient Descent)
▼ x(i); y(i)代表随机提取的样本。
![](https://epubservercos.yuewen.com/06597E/11298012504376706/epubprivate/OEBPS/Images/figure_0063_0002.jpg?sign=1739303580-ni1ssuZTO4yUJgSKxztw7yglcYqcH7Bv-0-199f37d984776f3c61f91e81432df3f7)
优点:
▼ 相比批量梯度下降,随机梯度下降速度更快。
▼ 可以进行在线学习。
缺点:
▼ 参数更新误差较大。
3.小批次随机梯度下降(Mini-batch Gradient Descent)
▼ x(i:i+n); y(i:i+n)代表随机取得的n个样本。
![](https://epubservercos.yuewen.com/06597E/11298012504376706/epubprivate/OEBPS/Images/figure_0064_0001.jpg?sign=1739303580-B7bEshGb3jvve1ZsGQMjaVXERkgozvId-0-38292823d8c68e0d6dfbc7b7ea4e07b9)
小批次随机梯度下降的优缺点介于BGD和SGD之间,Batchsize是用户可配置的超参数。
针对梯度下降衍生出了一系列针对深度学习的优化算法,都是围绕着梯度和步长两个方向进行设计和优化的,由于篇幅有限,这里我们选取常用的Adam进行介绍。
2.4.2 Adam
Adam(Adaptive Moment Estimation)本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正之后,每一次迭代的学习率都有一个确定的范围,使得参数比较平稳。
▼ 动量:SGD在迭代过程中有比较大的噪声。而动量(Momentum)方法可以比较好地缓解这个问题。尤其是在面对小而连续的梯度但是含有很多噪声的时候,动量可以很好地加速学习。Momentum使用的是物理中的动量概念。前几次的梯度也会参与运算。
▼ 自适应学习率:可以自动变更学习速率,只是需要设定一个全局的学习速率∈,但是这并不是实际的学习速率。它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。
参数说明:
▼ 全局学习率∈,初始参数θ,数值稳定量δ,一阶动量衰减系数ρ1,二阶动量衰减系数ρ2。
其中几个参数的取值一般为δ=10-8, ρ1= 0.9, ρ2= 0.999
▼ 中间变量:一阶动量s,二阶动量r,都初始化为0。
算法迭代流程:
1)从训练集中的随机抽取一批容量为m的样本{x1, …, xm},以及相关的输出yi。
2)计算梯度和误差,更新r和s,再根据r和s以及梯度计算参数更新量。
![](https://epubservercos.yuewen.com/06597E/11298012504376706/epubprivate/OEBPS/Images/figure_0065_0001.jpg?sign=1739303580-6iNppXDpbADcelv4KtWUJibBi4GONB5v-0-a8816e29fa72e797b00807497a9c2e28)
![](https://epubservercos.yuewen.com/06597E/11298012504376706/epubprivate/OEBPS/Images/figure_0065_0002.jpg?sign=1739303580-rvN2Fc7qTXM9zTs78FaYffnKqnzldkMB-0-c052bb7419bdcc78d66c6f79facf7226)
![](https://epubservercos.yuewen.com/06597E/11298012504376706/epubprivate/OEBPS/Images/figure_0065_0003.jpg?sign=1739303580-bsduXS7hCnr7HssDET3sMGjHMbcxZ40K-0-499772310c2f196675eab70b125e32a3)
![](https://epubservercos.yuewen.com/06597E/11298012504376706/epubprivate/OEBPS/Images/figure_0065_0004.jpg?sign=1739303580-IXImFUEnIQTz6FJn9QgCYcFtanFK88zD-0-376ede0b76903956839b878aa969eade)
![](https://epubservercos.yuewen.com/06597E/11298012504376706/epubprivate/OEBPS/Images/figure_0065_0005.jpg?sign=1739303580-Q7s1H7GmXvchCQnpVitggQNcI1r0OEE6-0-17a9ed9f29edb845c23983624947e7f2)
![](https://epubservercos.yuewen.com/06597E/11298012504376706/epubprivate/OEBPS/Images/figure_0065_0006.jpg?sign=1739303580-yjcNww5mIU2bcRTQsJQApdit4m8zpXVA-0-1b2e02f8d0e840ba181db89b0eff4bdb)
![](https://epubservercos.yuewen.com/06597E/11298012504376706/epubprivate/OEBPS/Images/figure_0065_0007.jpg?sign=1739303580-3nVIdlmzLcIpUVCAkaCpDuDX2IuR58rK-0-7eb09601f2111aedd27513869998989d)
对于稀疏数据,应尽量使用学习率可自适应的优化方法,不用手动调节,而且最好采用默认值。
SGD的训练时间通常更长,容易陷入鞍点,但是在好的初始化和学习率调度方案的情况下,结果会更可靠。若希望收敛速度更快,并且神经网络是较深较复杂的情况时,推荐使用学习率自适应的优化方法。Adadelta、RMSprop、Adam是比较相近的算法,相似情况下表现较为相近。