1. 背景
优化算法的目标函数通常是一个基于训练数据集的损失函数,其目标在于降低训练误差;
2. 优化在DL中的挑战
很多优化问题并不存在解析解,而需要使用基于数值方法的优化算法找到近似解,即数值解。
2.1 局部最小值
梯度接近或变成0可能是由于当前解在局部最优解附近造成的,也可能是在鞍点附近。
2.2 鞍点
由于DL模型参数通常是高维的,目标函数的鞍点通常比局部最小值更常见。假设一个函数的输入为k维向量,输出为标量,那么它的海森矩阵有k个特征值。
当函数的海森矩阵在梯度为0的位置上的特征值
1. 全为正时,该函数得到局部最小值;
2. 全为负时,该函数得到局部最大值;
3. 有正有负时,该函数得到鞍点。
3. 梯度下降
梯度下降法(gradient descent)是求解无约束最优化问题的常用方法,其实现简单,是一种迭代算法,每一步需要求解目标函数的梯度向量。目标函数有关自变量的梯度代表了目标函数在自变量当前位置下将最快的方向(负梯度方向)。在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变量。
当目标函数是凸函数时,梯度下降法的解是全局最优解,一般情况下,其解不保证是全局最优解,GD的收敛速度也未必是很快的。
3.1 梯度下降GD
在每一次迭代中,梯度下降使用整个训练数据来计算梯度,也被称为批量梯度下降,时间复杂度为O(n)。
3.2 随机梯度下降SGD
在每次迭代中,随机均匀采样一个样本来计算梯度,这种方法可以减少每次迭代的计算开销,时间复杂度为O(1)。
随机梯度是对梯度的无偏(良好)估计。
3.3 小批量随机梯度下降
在每次迭代中,随机均匀采样多个样本来组成一个小批量,然后使用这个小批量来计算梯度。
4. 动量法
动量法使用了指数加权移动平均的思想,它将过去时间步的梯度做了加权平均,且权重
按时间步指数衰减,也使得相邻时间步的自变量更新在方向上更加一致。自变量在各个方向上的移动幅度不仅取决于当前梯度,还取决于过去的各个梯度在各个方向上是否一致。
相对于小批量SGD,动量法需要对每一个自变量维护一个同它一样形状的速度变量,且
超参数里多了动量超参数。
4.1 AdaGrad
AdaGrad算法根据自变量在每个维度的梯度值的大小来调整各个维度上的学习率,从而避免统一的学习率难以适应所有维度的问题。在迭代过程中不断调整学习率,并让目标函数自变量中每个元素都分别拥有自己的学习率。
存在的问题:
AdaGrad在调整学习率时分母上的变量 一直在累加按元素平方的小批量随机梯度,所以目标函数自变量每个元素的学习率在迭代过程中一直在降低(或不变)。因此学习率在迭代
早期降得较快且当前解依然不佳时,其在迭代后期由于学习率过小,可能较难找到一个有用的解。
4.2 RMSProp
RMSProp这是为了解决AdaGrad存在的问题,使用小批量随机梯度按元素平方的指数加权移动平均来调整学习率。其自变量每个元素的学习率在迭代过程中就不再一直在降低(或不变)。
4.3 AdaDelta
和RMSProp一样,AdaDelta也针对AdaGrad算法在迭代后期可能较难找到有用解的问题做了改进,两者都使用了小批量随机梯度 按元素平方的指数加权移动平均变量 。有意思的是, AdaDelta算法没有学习率这一超参数,它通过使用有关自变量更新量平方的指数加权移动平均的项来替代RMSProp中的学习率。
与RMSProp不同,AdaDelta还维护一个额外的状态变量 ,其元素同样在时间步0时被初始化为0。
AdaDelta算法需要对每个自变量维护 和 两个状态变量。
5. Adam算法
Adam算法使用了动量变量 和RMSProp中小批量随机梯度按元素平方的指数加权移动平均
变量 ,并在时间步0将它们中每个元素初始化为0。
6. 牛顿法&拟牛顿法
两者都是求解无约束最优化问题的常用方法,且收敛速度快。
6.1 牛顿法
是迭代算法,每一步需要求解目标函数的海赛矩阵的逆矩阵,计算比较复杂。
6.2 拟牛顿法
通过正定矩阵近似海赛矩阵的逆矩阵或海赛矩阵,进而简化过程。
BFGS算法是流行的拟牛顿算法。
7. 约束最优化问题
在约束最优化问题中,常常利用拉格朗日对偶性将原始问题转换为对偶问题,通过
解对偶问题而得到原始问题的解。如SVM与最大熵模型。