教材选用《动手学深度学习》,李沐等著;
在训练模型时,我们会使⽤优化算法不断迭代模型参数以降低模型损失函数的值。当迭代终⽌时,模型的训练随之终⽌。此时的模型参数就是模型通过训练所学习到的参数。
优化算法对于深度学习⼗分重要。⼀⽅⾯,训练⼀个复杂的深度学习模型可能需要数小时、数⽇、甚⾄数周时间。而优化算法的表现直接影响模型的训练效率。另⼀⽅⾯,理解各种优化算法的原理以及其中超参数的意义将有助于我们更有针对性地调参,从而使深度学习模型表现更好。
优化与深度学习
优化在深度学习中有很多挑战。以下描述了其中的两个挑战:局部最小值和鞍点。
局部最小值
当一个优化问题的数值解在局部最优解附近时,由于目标函数有关解的梯度接近或变成零,最终迭代求得的数值解可能只令目标函数局部最小化而非全局最小化。
鞍点
梯度接近或变成零可能是由于当前解在局部最优解附近所造成的。事实上,另⼀种可能性是当前解在鞍点(saddle point)附近。
下图的空间函数看起来像⼀个⻢鞍,而鞍点恰好是⻢鞍上可坐区域的中⼼。
由于深度学习模型参数通常都是⾼维的,⽬标函数的鞍点通常⽐局部最小值更常⻅。
随机梯度下降
在梯度下降中,我们先选取一个初始值x和常数𝜂>0,然后不断迭代x直到达到停止条件。其中正数𝜂通常叫做学习率,是⼀个超参数。
使⽤过小的学习率,会导致x更新缓慢从而需要更多的迭代才能得到较好的解;使⽤过⼤的学习率,x会不断越过(overshoot)最优解并逐渐发散。所以,一个合适的学习率通常是需要通过多次实验找到的。
当训练数据集的样本较多时,梯度下降每次迭代计算开销较大,因而随机梯度下降(Stochastic gradient descent)通常更受青睐。
小批量随机梯度下降
小批量随机梯度下降在每轮迭代中随机均匀采样多个样本来组成一个小批量B,然后使用这个小批量来计算梯度。|B| 代表批量⼤小,即小批量中样本的个数,是⼀个超参数。
当批量较小时,每次迭代中使用的样本少,这会导致并行处理和内存使用效率变低;当批量较大时,每个小批量梯度里可能含有更多的冗余信息。为了得到较好的解,批量较大时比批量较小时可能需要计算更多数目的样本,例如增大迭代周期数。
动量法
动量法使⽤了指数加权移动平均(exponentially weighted moving average)的思想。它将过去时间步的梯度做了加权平均,且权重按时间步指数衰减。
动量法使得相邻时间步的⾃变量更新在⽅向上更加⼀致。这样就可以使⽤较⼤的学习率,从而使⾃变量向最优解更快移动。
Adagrad算法
Adagrad在迭代过程中不断调整学习率,并让目标函数自变量中每个元素都分别拥有自己的学习率。使用 Adagrad 时,自变量中每个元素的学习率在迭代过程中一直在降低(或不变)。
RMSProp算法
RMSProp和Adagrad的不同在于,RMSProp使⽤了小批量随机梯度按元素平⽅的指数加权移动平均来调整学习率。
Adadelta算法
Adadelta没有学习率超参数,它通过使⽤有关⾃变量更新量平⽅的指数加权移动平均的项来替代学习率。
Adam算法
Adam在RMSProp基础上对小批量随机梯度也做了指数加权移动平均。