绝大多数深度学习中的目标函数都很复杂。因此,很多优化问题并不存在解析解,而需要使用基于数值方法的优化算法找到近似解。这类优化算法一般通过不断迭代更新解的数值来找到近似解。我们讨论的优化算法都是这类基于数值方法的算法。
非凸优化的阻碍:局部最小值、鞍点。
梯度下降
批量梯度下降 (batch gradient descent)
在每一轮自变量迭代里,梯度下降使用整个训练数据集来计算梯度
如果使用梯度下降,每次自变量迭代的计算开销为 O(n) O ( n ) ,它随着 n n 线性增长。因此,当训练数据样本数很大时,梯度下降每次迭代的计算开销很高。
随机梯度下降(stochastic gradient descent)
每次只随机采样一个样本来计算梯度
每次迭代的开销从梯度下降的 O(n) O ( n ) 降到了常数 O(1) O ( 1 )
随机梯度下降的更新轨迹相对于梯度下降更加曲折,实际中,它来自样本的噪音使得梯度的准确度下降,所以在使用同样的超参数的情况下,随机梯度下降收敛到的值相对梯度下降来说更最优值远。但因为随机梯度下降每一次迭代的计算比梯度下降更加简单,在同样运行时间下,随机梯度下降可以进行更多次的自变量迭代,它最终得到的解的质量可能会比梯度下降更优。
小批量随机梯度下降(mini-batch stochastic gradient descent)
深度学习训练中实际使用,每一轮迭代里我们随机采样多个样本来组成一个小批量(mini-batch),然后对它计算梯度
小批量随机梯度下降中每次迭代的计算开销为 O(|Bt|)。
- 当批量大小为 1 时,该算法即随机梯度下降;
- 当批量大小等于训练数据样本数时,该算法即梯度下降。
- 当批量较小时,每次迭代中使用的样本少,这会导致并行处理和内存使用效率变低。这使得在计算同样数目样本的情况下比使用更大批量时所花时间更多。
- 当批量较大时,每个小批量梯度里可能含有更多的冗余信息,且在处理了同样多样本的情况下,它比批量较小的情况下对自变量的迭代次数更少,这两个因素共同导致了它靠近解的速度更慢。
- 为了得到较好的解,批量较大时比批量较小时可能需要计算更多数目的样本。因此批量大小是一个重要的用来权衡计算效率和靠近解速度的超参数。
可以通过调整的批量大小来权衡计算效率和训练误差下降速度。
深度学习常使用的优化算法均基于小批量随机梯度下降,但区别在于如何使用梯度来更新自变量。这些改进算法主要基于两个技术:使用指数加权移动平均来平滑时间步之间的变化,和对每个自变量元素使用自适应的学习率。
动量法(momentum)
在时间步 0,动量法创建速度变量 v0∈Rd v 0 ∈ R d ,并将其元素初始化成 0。在时间步