机器学习中的数学——优化算法:随机梯度下降(Stochastic Gradient Descent, SGD)

随机梯度下降(Stochastic Gradient Descent, SGD)及其变种很可能是一般机器学习中应用最多的的优化算法,特别是在深度学习中。如《优化技术:基础知识》中所讨论的,按照数据生成分布抽取 m m m个小批量(独立同分布的)样本,通过计算它们梯度均值,我们可以得到梯度的无偏估计。

随机梯度下降(Stochastic Gradient Descent, SGD)在第 k k k个训练迭代的更新
输入:学习率 ϵ k \epsilon_k ϵk;初始化参数 θ 0 \theta_0 θ0或第 k − 1 k-1 k1次输出参数 θ k − 1 \theta_{k-1} θk1
输出:第 k k k次迭代后的参数 θ k \theta_k θk
(1) while 停止准则未满足 \quad\text{停止准则未满足} 停止准则未满足
(2) \quad 从训练集中采包含 m m m个样本 { x ( 1 ) , x ( 2 ) , ⋯   , x ( m ) } \{x^{(1)}, x^{(2)}, \cdots, x^{(m)}\} { x(1),x(2),,x(m)}的小批量,其中 x ( i ) x^{(i)} x(i)对应目标为 y ( i ) y^{(i)} y(i)
(3) \quad 计算梯度估计: g k = g k − 1 + 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) g_k = g_{k-1} +\frac{1}{m}\nabla_\theta\sum_iL(f(x^{(i)}; \theta), y^{(i)}) gk=gk1+m1θiL(f(x(i);θ),y(i))
(4) θ k = θ k − 1 − ϵ g k \quad\theta_k = \theta_{k-1} - \epsilon g_k θk=θk1ϵgk
(5) k = k + 1 \quad k = k + 1 k=k+1
(6) return θ k \theta_k θk

SGD算法中的一个关键参数是学习率。之前,我们介绍的SGD使用固定的学习率。在实践中,有必要随着时间的推移逐渐降低学习率,因此我们将第 k k k步迭代的学习率记作 ϵ k \epsilon_k ϵk。这是因为SGD中梯度估计引入的噪声源( m m m个训练样本的随机采样)并不会在极小点处消失。相比之下,当我们使用批量梯度下降到达极小点时,整个代价函数的真实梯度会变得很小,之后为0,因此批量梯度下降可以使用固定的学习率。保证SGD收敛的一个充分条件是:
∑ k = 1 ∞ ϵ k = ∞ 且 ∑ k = 1 ∞ ϵ k 2 < ∞ \sum_{k=1}^\infty\epsilon_k=\infty\quad\text{且}\quad\sum_{k=1}^\infty\epsilon_k^2<\infty k=1ϵk=k=1ϵk2<

实践中,一般会线性衰减学习率直到第 τ \tau τ次迭代:
ϵ k = ( 1 − k τ ) ϵ 0 + k τ ϵ τ \epsilon_k=(1-\frac{k}{\tau})\epsilon_0+\frac{k}{\tau}\epsilon_\tau ϵk=(1τk)ϵ0+τkϵτ

τ \tau τ步迭代之后,一般使 ϵ \epsilon ϵ保持常数。

学习率可通过试验和误差来选取,通常最好的选择方法是监测目标函数值随时间变化的学习曲线。与其说是科学,这更像是一门艺术,我们应该谨慎地参考关于这个问题的大部分指导。使用线性策略时,需要选择的参数为 ϵ 0 \epsilon_0 ϵ0 ϵ τ \epsilon_\tau ϵτ τ \tau τ。通常 τ \tau τ被设为需要反复遍历训练集几百次的迭代次数。通常 ϵ τ \epsilon_\tau ϵτ应设为大约 ϵ 0 \epsilon_0 ϵ0的1%。主要问题是如何设置 ϵ 0 \epsilon_0 ϵ0。若 ϵ 0 \epsilon_0 ϵ0太大,学习曲线将会剧烈振荡,代价函数值通常会明显增加。温和的振荡是良好的,容易在训练随机代价函数(例如使用Dropout的代价函数)时出现。如果学习率太小,那么学习过程会很缓慢。如果初始学习率太低,那么学习可能会卡在一个相当高的代价值。通常,就总训练时间和最终代价值而言,最优初始学习率的效果会好于大约迭代100次后最佳的效果。因此,通常最好是检测最早的几轮迭代,选择一个比在效果上表现最佳的学习率更大的学习率,但又不能太大导致严重的震荡。

研究优化算法的收敛率,一般会衡量额外误差 J ( θ ) − min ⁡ θ J ( θ ) J(\theta)-\min_\theta J(\theta) J(θ)minθJ(θ),即当前代价函数超出最低可能代价的量。SGD应用于凸问题时, k k k步迭代后的额外误差量级是 O ( 1 k ) O(\frac{1}{\sqrt{k}}) O(k 1),在强凸情况下是 O ( 1 k ) O(\frac{1}{k}) O(k1)。除非假定额外的条件,否则这些界限不能进一步改进。批量梯度下降在理论上比随机梯度下降有更好的收敛率。然而,Cramér-Rao界限指出,泛化误差的下降速度不会快于 O ( 1 k ) O(\frac{1}{k}) O(k1)。Bottou and Bousquet因此认为对于机器学习任务,不值得探寻收敛快于 O ( 1 k ) O(\frac{1}{k}) O(k1)的优化算法——更快的收敛可能对应着过拟合。此外,渐近分析掩盖了随机梯度下降在少量更新步之后的很多优点。对于大数据集,SGD只需非常少量样本计算梯度从而实现初始快速更新,远远超过了其缓慢的渐近收敛。

猜你喜欢

转载自blog.csdn.net/hy592070616/article/details/123310483