本文主要是介绍【机器学习:Stochastic gradient descent 随机梯度下降 】机器学习中随机梯度下降的理解和应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【机器学习:随机梯度下降 Stochastic gradient descent 】机器学习中随机梯度下降的理解和应用
- 背景
- 随机梯度下降的基本原理
- SGD的工作流程
- 迭代方法
- 示例:线性回归中的SGD
- 历史
- 主要应用
- 扩展和变体
- 隐式更新(ISGD)
- 动量
- 平均
- AdaGrad
- RMSProp
- Adam
- 基于符号的随机梯度下降
- 回溯行搜索
- 二阶方法
- 连续时间的近似
- 优点与缺点
- GPT可视化示例
随机梯度下降(通常缩写为 SGD)是一种迭代方法,用于优化具有适当平滑特性(例如可微分或可子微分)的目标函数。它可以看作是梯度下降优化的随机近似,因为它用实际梯度的估计值(从随机选择的数据子集计算)取代了实际梯度(从整个数据集计算)。特别是在高维优化问题中,这减少了非常高的计算负担,实现了更快的迭代,以换取更低的收敛率。
随机近似背后的基本思想可以追溯到 1950 年代的罗宾斯-门罗算法。如今,随机梯度下降已成为机器学习中一种重要的优化方法。
背景
统计估计和机器学习都考虑了最小化具有总和形式的目标函数的问题:
Q ( w ) = 1 n ∑ i = 1 n Q i ( w ) Q(w)=\frac1n\sum^n_{i=1}Q_i(w) Q(w)=n1i=1∑nQi(w)
其中参数 w w w是最小化的 Q ( w ) Q(w) Q(w)需要估计。每个求和函数 Q i Q_{i} Qi通常与数据集中的第i个观测值(用于训练)。
在经典统计中,求和最小化问题出现在最小二乘法和最大似然估计(对于独立观测值)中。 作为总和最小化器出现的一般估计器类称为 M 估计器。然而,在统计学中,人们早就认识到,对于某些最大似然估计问题来说,即使是局部最小化也过于严格。[3]因此,当代统计理论家经常考虑似然函数的静止点(或其导数、分数函数和其他估计方程的零点)。
经验风险最小化也会出现总和最小化问题。其中, Q i ( w ) Q_i(w) Qi(w)是第 i i i 个例子的损失函数值, Q ( w ) Q(w) Q(w)是经验风险。
当用于最小化上述函数时,标准(或 “批量”)梯度下降法会执行以下迭代:
w : = w − η ∇ Q ( w ) = w − η n ∑ i = 1 n ∇ Q i ( w ) w:=w-\eta \nabla Q(w) = w-\frac\eta n\sum^n_{i=1}\nabla Q_i(w) w:=w−η∇Q(w)=w−nηi=1∑n∇Qi(w)
步长表示为 η \eta η(在机器学习中有时被称为学习率)和这里:=”表示更新算法中的变量。
在许多情况下,求和函数具有简单的形式,可以对求和函数和和梯度进行低成本的计算。例如,在统计学中,单参数指数族允许经济的函数计算和梯度计算。
然而,在其他情况下,评估和梯度可能需要对所有求和函数的梯度进行昂贵的评估。当训练集很大并且不存在简单的公式时,评估梯度的总和变得非常昂贵,因为评估梯度需要评估所有求和函数的梯度。为了节省每次迭代的计算成本,随机梯度下降在每一步都对求和函数的子集进行采样。这在大规模机器学习问题的情况下非常有效。
随机梯度下降的基本原理
在机器学习中,我们通常有一个损失函数(Loss Function),它用于衡量模型预测值与实际值之间的差异。优化的目标是找到一组参数,使得损失函数的值最小。
在传统的梯度下降(Gradient Descent)中,每次更新参数时都需要计算整个数据集的梯度,这在数据集很大时会非常耗时。而随机梯度下降通过每次仅使用一个数据点来估计梯度,从而大大减少了计算量。
SGD的工作流程
- 初始化参数:首先,对模型参数进行初始化。
- 选择样本:在每次迭代中随机选择一个训练样本。
- 计算梯度:计算选中样本的梯度。
- 更新参数:根据梯度和学习率更新模型参数。
- 重复步骤2-4:直到满足停止条件,如迭代次数或梯度下降到一定阈值。
迭代方法
在随机(或“在线”)梯度下降中,真实梯度近似于单个样本的梯度:
w : = w − η ∇ Q i ( w ) w:=w-\eta\nabla Q_i(w) w:=w−η∇Qi(w)
将总目标函数的波动作为相对于小批量的梯度步长。
当算法扫描训练集时,它对每个训练样本执行上述更新。可以对训练集进行多次遍历,直到算法收敛。如果这样做,数据可以在每次传递时进行洗牌,以防止循环。典型的实现可能使用自适应学习率,使算法收敛。
在伪代码中,随机梯度下降可以表示为:
- 选择参数和学习率的初始向量。
- 重复,直到得到一个近似的最小值
- 随机随机洗牌训练集中的样本。
- For i = 1 , 2 , … , n , d o : i=1, 2,\dots,n,do: i=1,2,…,n,do:
- w : = w − η ∇ Q i ( w ) w:=w-\eta\nabla Q_i(w) w:=w−η∇Qi(w)
计算真实梯度和单个样本的梯度之间的折衷是在每一步针对多个训练样本(称为“小批量”)计算梯度。这可以比所描述的“真正的”随机梯度下降更好地执行,因为代码可以利用矢量化库,而不是像中首先显示的那样单独计算每个步骤,其中它被称为“束模式”反向传播算法”。它还可能导致更平滑的收敛,因为每一步计算的梯度是在更多训练样本上平均的。
利用凸最小化和随机逼近理论分析了随机梯度下降的收敛性。简而言之,当学习率 η \eta η以适当的速率下降时,并且受到相对温和的假设,当目标函数是凸函数或伪凸函数时,随机梯度下降几乎肯定会收敛到全局最小值,否则几乎肯定会收敛到局部最小值。 这实际上是罗宾斯-西格蒙德定理的结果。
示例:线性回归中的SGD
假设我们有一个线性回归模型,其损失函数是均方误差(MSE)。我们的目标是找到一组参数,使得损失函数最小。
- 初始化参数:随机初始化斜率和截距。
- 随机选择样本:从数据集中随机选择一个点(x, y)。
- 计算梯度:对于该点,计算损失函数关于斜率和截距的梯度。
- 更新参数:根据梯度和学习率调整斜率和截距。
- 重复:重复步骤2-4,直到参数收敛。
假设我们想要使用最小二乘法将一条直线拟合到具有观测值和相应估计响应的训练集。要最小化的目标函数是
Q ( w ) = ∑ i = 1 n Q i ( w ) = ∑ i = 1 n ( y i ^ − y i ) 2 = ∑ i = 1 n ( w 1 + w 2 x i − y i ) 2 Q(w)=\sum^n_{i=1}Q_i(w)=\sum^n_{i=1}(\hat{y_i}-y_i)^2=\sum^n_{i=1}(w_1+w_2x_i-y_i)^2 Q(w)=i=1∑nQi(w)=i=1∑n(yi^−yi)2=i=1∑n(w1+w2xi−yi)2
上述伪代码中针对此特定问题的最后一行将变成:
[ w 1 w 2 ] = [ w 1 w 2 ] − η [ ∂ ∂ w 1 ( w 1 + w 2 x i − y i ) 2 ∂ ∂ w 2 ( w 1 + w 2 x i − y i ) 2 ] = [ w 1 w 2 ] − η [ 2 ( w 1 + w 2 x i − y i ) 2 x i ( w 1 + w 2 x i − y i ) ] \begin{gathered} \begin{bmatrix} w_1 \\ w_2 \end{bmatrix}= \quad \begin{bmatrix} w_1 \\ w_2 \end{bmatrix} \begin{matrix} -\eta \end{matrix} \begin{bmatrix} \frac{\partial}{\partial w_1}(w_1 + w_2 x_i - y_i)^2 \\ \frac{\partial}{\partial w_2}(w_1 + w_2 x_i - y_i)^2 \end{bmatrix}= \begin{bmatrix} w_1 \\ w_2 \end{bmatrix} \begin{matrix} -\eta \end{matrix} \begin{bmatrix} 2(w_1 + w_2 x_i - y_i) \\ 2x_i(w_1 + w_2 x_i - y_i) \end{bmatrix} \end{gathered} [w1w2]=[w1w2]−η[∂w1∂(w1+w2xi−yi)2∂w2∂(w1+w2xi−yi)2]=[w1w2]−η[2(w1+w2xi−yi)2xi(w1+w2xi−yi)]
请注意,在每次迭代或更新步骤中,仅在单个 x i x_i xi处评估梯度。这是随机梯度下降和批量梯度下降之间的主要区别。
历史
1951 年,Herbert Robbins 和 Sutton Monro 引入了最早的随机逼近方法,即随机梯度下降。一年后,在这项工作的基础上,Jack Kiefer 和 Jacob Wolfowitz 发表了一种非常接近随机梯度下降的优化算法,使用中心差异作为梯度的近似值。在 20 世纪 50 年代后期,Frank Rosenblatt 使用 SGD 来优化他的感知器模型,展示了随机梯度下降在神经网络中的首次适用性。
反向传播于 1986 年首次被描述,随机梯度下降用于有效优化具有多个隐藏层的神经网络的参数。不久之后,又出现了另一项改进:小批量梯度下降,即用小批量数据替代单个样本。 1997 年,首次探索了通过如此小批量实现的矢量化所带来的实际性能优势,为机器学习的高效优化铺平了道路。截至 2023 年,这种小批量方法仍然是训练神经网络的标准,平衡了随机梯度下降与梯度下降的优点。
到 1980 年代,势头已经引入,并于 1986 年被添加到 SGD 优化技术中。然而,这些优化技术假设恒定的超参数,即固定的学习率和动量参数。在 2010 年代,2011 年的 AdaGrad(用于“自适应梯度”)和 2012 年的 RMSprop(用于“均方根传播”)引入了应用具有每个参数学习率的 SGD 的自适应方法。2014 年,Adam (“自适应矩估计”)出版,将 RMSprop 的自适应方法应用于动量;然后开发了 Adam 的许多改进和分支,例如 Adadelta、Adagrad、AdamW 和 Adamax。
在机器学习中,2023 年的优化方法主要由亚当派生的优化器主导。截至 2023 年,TensorFlow 和 PyTorch 是迄今为止最受欢迎的机器学习库,主要仅包括 Adam 派生的优化器,以及 Adam 的前身,例如 RMSprop 和经典 SGD。 PyTorch 还部分支持有限内存 BFGS,这是一种行搜索方法,但仅适用于没有参数组的单设备设置。
主要应用
随机梯度下降是一种流行的算法,用于在机器学习中训练各种模型,包括(线性)支持向量机、逻辑回归(参见,例如,Vowpal Wabbit)和图形模型。当与反向传播算法结合使用时,它是训练人工神经网络的事实标准算法。地球物理学界也报道了它的使用,特别是全波形反演 (FWI) 的应用。
随机梯度下降与 L-BFGS 算法竞争,L-BFGS 算法也被广泛使用。随机梯度下降至少从 1960 年起就被用于训练线性回归模型,最初的名称为 ADALINE。
另一种随机梯度下降算法是最小均方 (LMS) 自适应滤波器。
扩展和变体
对基本随机梯度下降算法的许多改进已被提出和使用。特别是在机器学习中,设定学习率(步长)的必要性被认为是一个问题。随机梯度下降算法在概念上的一个简单扩展是,使学习率成为迭代次数 t t t 的递减函数 η t \eta_t ηt,从而给出一个学习率时间表,这样,最初的迭代会导致参数发生较大变化,而后面的迭代则只进行微调。自 MacQueen 研究 k-means 聚类以来,人们就知道了这样的时间表。Spall 给出了在 SGD 的几个变体中选择步长的实用指南。
隐式更新(ISGD)
如前所述,经典随机梯度下降通常对学习率 η \eta η 敏感。快速收敛需要较大的学习率,但这可能会导致数值不稳定。通过考虑隐式更新,可以在很大程度上解决该问题,即在下一次迭代而不是当前迭代中评估随机梯度:
w n e w : = w o l d − η ∇ Q i ( w n e w ) . w^{new}:=w^{old}-\eta\nabla Q_i(w^{new}). wnew:=wold−η∇Qi(wnew).
该方程是隐式的,因为 w n e w w^{new} wnew出现在方程两边。它是近端梯度法的随机形式,因为更新也可以写为:
w n e w : = arg min w { Q i ( w ) + 1 2 η ∣ ∣ w − w o l d ∣ ∣ 2 } . w^{new}:=\argmin_w{\{Q_i(w)+\frac1{2\eta}||w-w^{old}||^2\}}. wnew:=wargmin{Qi(w)+2η1∣∣w−wold∣∣2}.
例如,考虑具有特征 x 1 , … , x n ∈ R p x_1,\dots,x_n\in \mathbb R^p x1,…,xn∈Rp和 y 1 , … , y n ∈ R p y_1,\dots,y_n\in \mathbb R^p y1,…,yn∈Rp观测值的最小二乘法。我们希望解决:
min w ∑ j = 1 n ( y j − x j ′ w ) 2 , \min_w\sum^n_{j=1}(y_j-x'_jw)^2, wminj=1∑n(yj−xj′w)2,
其中 x j ′ w = x j , 1 w 1 + x j , 2 w 2 + ⋯ + x j , p w p x'_jw=x_{j,1}w_1+x_{j,2}w_2+\dots+x_{j,p}w_p xj′w=xj,1w1+xj,2w2+⋯+xj,pwp表示内积。注意, x x x可以将“1”作为包含截距的第一个元素。经典的随机梯度下降过程如下:
w n e w = w o l d + η ( y i − x i ′ w o l d ) x i w^{new} = w^{old}+\eta(y_i-x'_iw^{old})x_i wnew=wold+η(yi−xi′wold)xi
其中 i i i在 1 和 n n n之间均匀采样。虽然在相对*温和的假设条件下,该程序理论上会收敛,但在实践中,该程序可能相当不稳定。特别是,当 η \eta η假设错误,导致 I − η x i x i ′ I-\eta x_i x _i' I−ηxixi′绝对特征值很大时,程序可能会在几次迭代中出现数值发散。相比之下,隐式随机梯度下降法(简称 ISGD)可以用封闭形式求解,即
w n e w = w o l d + η 1 + η ∣ ∣ x i ∣ ∣ 2 ( y i − x i ′ w o l d ) x i . w^{new} = w^{old}+\frac{\eta}{1+\eta ||x_i||^2}(y_i-x'_iw^{old})x_i. wnew=wold+1+η∣∣xi∣∣2η(yi−xi′wold)xi.
由于学习率 η \eta η现在已经归一化,因此该程序在数值上几乎始终保持稳定。在最小二乘问题中,经典随机梯度下降法与隐式随机梯度下降法的比较与最小均方差滤波法(LMS)和归一化最小均方差滤波法(NLMS)的比较非常相似。
尽管 ISGD 的闭式求解只可能在最小二乘法中实现,但这一过程可以在多种模型中有效实现。具体地说,假设 Q i ( w ) Q_i(w) Qi(w)只通过与特征 x i x_i xi , 的线性组合来依赖于特征 w w w , 因此我们可以写成 ∇ w Q i ( w ) = − q ( x i ′ w ) x i \nabla_wQ_i(w)=-q(x'_iw)x_i ∇wQi(w)=−q(xi′w)xi , 其中 q ( ) ∈ R q()\in \mathbb R q()∈R也可以依赖于特征 x i x_i xi , 但 y i y_i yi不依赖于特征 w w w, 除非通过 x i ′ w x'_iw xi′w 。最小二乘法遵守这一规则,逻辑回归和大多数广义线性模型也是如此。例如,在最小二乘法中 q ( x i ′ w ) = y i − x i ′ w q(x'_iw)=y_i-x'_iw q(xi′w)=yi−xi′w ,而在逻辑回归 q ( x i ′ w ) = y i − S ( x i ′ w ) q(x'_iw)=y_i-S(x'_iw) q(xi′w)=yi−S(xi′w)中, 其中 S ( u ) = e u / ( 1 + e u ) S(u)=e^u/(1+e^u) S(u)=eu/(1+eu)是逻辑函数。在泊松回归中, q ( x i ′ w ) = y i − e x i ′ w q(x'_iw)=y_i-e^{x'_iw} q(xi′w)=yi−exi′w , 等等。
在这种情况下,ISGD 的实现方法如下。让 f ( ξ ) = η q ( x i ′ w o l d + ξ ∣ ∣ x i ∣ ∣ 2 ) f(\xi)=\eta q(x'_iw^{old}+\xi||x_i||^2) f(ξ)=ηq(xi′wold+ξ∣∣xi∣∣2),其中 ξ \xi ξ为标量。那么,ISGD 相当于 :
w n e w = w o l d + ξ ∗ x i , w h e r e ξ ∗ = f ( ξ ∗ ) . w^{new} = w^{old}+\xi^*x_i, where \xi^*=f(\xi^*). wnew=wold+ξ∗xi,whereξ∗=f(ξ∗).
比例因子 ξ ∗ ∈ R \xi^*\in \mathbb R ξ∗∈R可以通过对分法找到,因为在大多数正则模型中,如前面提到的广义线性模型,函数 q ( ) q() q()是递减的,因此对于 ξ ∗ \xi^* ξ∗是 [ m i n ( 0 , f ( 0 ) ) , m a x x ( 0 , f ( 0 ) ) ] [min(0, f(0)), maxx(0, f(0))] [min(0,f(0)),maxx(0,f(0))]。
动量
进一步的提议包括动量法或重球法,在ML背景下,它出现在Rumelhart,Hinton和Williams关于反向传播学习[31]的论文中,并借用了苏联数学家Boris Polyak在1964年关于求解函数方程的文章中的想法。带动量的随机梯度下降会记住每次迭代时的更新 Δ w \Delta w Δw,并将下一次更新确定为梯度和上一次更新的线性组合:
Δ w : = α Δ w − η ∇ Q i ( w ) w : = w + δ w \Delta w:=\alpha\Delta w-\eta\nabla Q_i(w)\\ w:=w+\delta w Δw:=αΔw−η∇Qi(w)w:=w+δw
进一步得到:
w : = w − η ∇ Q i ( w ) + α Δ w w:=w-\eta\nabla Q_i(w)+\alpha\Delta w w:=w−η∇Qi(w)+αΔw
其中,要估计 Q ( w ) Q(w) Q(w)的最小化参数 w w w, η \eta η是步长(有时在机器学习中称为学习率),并且 α \alpha α是介于 0 和 1 之间的指数衰减因子,它决定了当前梯度和早期梯度对权重变化的相对贡献。
动量这个名字源于物理学中对动量的类比:权重矢量,被认为是一个在参数空间中行进的粒子,从损失的梯度(“力”)中产生加速度。与经典的随机梯度下降不同,它倾向于保持沿同一方向行进,从而防止振荡。几十年来,计算机科学家已成功将动量用于人工神经网络的训练。动量法与欠阻尼Langevin动力学密切相关,可以与模拟退火相结合。
在 1980 年代中期,Yurii Nesterov 修改了该方法,以使用在下一个点预测的梯度,并且由此产生的所谓 Nesterov 加速梯度有时用于 2010 年代的 ML。
平均
平均随机梯度下降是由 Ruppert 和 Polyak 在 1980 年代后期独立发明的,是普通的随机梯度下降,记录了其参数向量随时间变化的平均值。也就是说,更新与普通随机梯度下降相同,但算法也会进行跟踪。
w ‾ = 1 t ∑ i = 0 t − 1 w i \overline w = \frac 1t\sum^{t-1}_{i=0}w_i w=t1i=0∑t−1wi
当优化完成后,这个平均参数向量代替 w w w。
AdaGrad
AdaGrad(用于自适应梯度算法)是一种改进的随机梯度下降算法,具有每参数学习率,于 2011 年首次发布。非正式地,这增加了稀疏参数的学习率,并降低了稀疏参数的学习率。在数据稀疏且稀疏参数信息量更大的环境中,这种策略通常比标准随机梯度下降提高收敛性能。此类应用的示例包括自然语言处理和图像识别。
它仍然有一个基本学习率 η \eta η,但该学习率与向量 { G j , j } \{G_{j,j}\} {Gj,j} 的元素相乘,该向量是外积矩阵的对角线
G = ∑ τ = 1 t g τ g τ T G=\sum^{t}_{\tau=1}g_\tau g^T_\tau G=τ=1∑tgτgτT
其中,梯度 g τ = ∇ Q i ( w ) g_\tau=\nabla Q_i(w) gτ=∇Qi(w)在迭代 τ \tau τ 处。对角线由下式给出
G j , j = ∑ τ = 1 t g τ , j 2 G_{j, j}=\sum^{t}_{\tau=1}g_{\tau, j }^2 Gj,j=τ=1∑tgτ,j2
这个向量本质上是按维度存储梯度平方的历史总和,并在每次迭代后更新。更新的公式是现在
w : = w − η d i a g ( G ) − 1 2 ⊙ g w:=w-\eta diag(G)^{-\frac12}⊙g w:=w−ηdiag(G)−21⊙g
或者写成按参数更新,
w j : = w j − η G j , j g j . w_j:=w_j-\frac{\eta}{\sqrt{G_{j,j}}}g_j. wj:=wj−Gj,jηgj.
每个 { G ( i , i ) } \{G (i,i)\} {G(i,i)}都会产生一个适用于单个参数i的学习率的缩放因子。由于该因子的分母 G i = ∑ τ = 1 t g τ 2 \sqrt{G_i}=\sqrt{\sum^t_{\tau=1}g^2_{\tau}} Gi=∑τ=1tgτ2是先前导数的 l 2 \mathbb l_2 l2范数,因此极端参数更新会受到抑制,而更新很少或很小的参数则会获得更高的学习率。
虽然 AdaGrad 专为凸问题而设计,但已成功应用于非凸优化。
RMSProp
RMSProp(均方根传播)是 James Martens 和 Ilya Sutskever 于 2012 年发明的一种方法,当时他们都是 Geoffrey Hinton 小组的博士生,其中学习率与 Adagrad 一样,适用于每个参数。这个想法是将权重的学习率除以该权重最近梯度大小的运行平均值。不同寻常的是,它没有发表在一篇文章中,而只是在 Coursera 讲座中进行了描述。
因此,首先根据均值平方计算运行平均值,
v ( w , t ) : = γ v ( w , t − 1 ) + ( 1 − γ ) ( ∇ Q i ( w ) ) 2 v(w,t):=\gamma v(w,t-1)+(1-\gamma)(\nabla Q_i(w))^2 v(w,t):=γv(w,t−1)+(1−γ)(∇Qi(w))2
其中 γ \gamma γ是遗忘因素。将历史梯度存储为平方和的概念是从 Adagrad 中借来的,但引入了“遗忘”,通过逐渐降低旧数据的影响来解决 Adagrad 在非凸问题中的学习率递减问题。
参数更新为,
w : = w − η v ( w , t ) ∇ Q i ( w ) w:=w-\frac{\eta}{\sqrt{v(w,t)}}\nabla Q_i(w) w:=w−v(w,t)η∇Qi(w)
RMSProp 在不同应用中表现出良好的学习率适应性。RMSProp 可以看作是 Rprop 的泛化,并且能够处理小批量,而不仅仅是全批次。
Adam
Adam(自适应矩估计的缩写)是 2014 年对 RMSProp 优化器的更新,将其与动量方法的主要功能相结合。在此优化算法中,使用指数遗忘梯度和梯度第二矩的运行平均值。给定参数和一个损失函数,其中索引当前训练迭代(索引为 ),Adam 的参数更新由下式给出:
m w ( t + 1 ) ← β 1 m w ( t ) + ( 1 − β 1 ) ∇ w L ( t ) m_{w}^{(t+1)} \leftarrow \beta_1 m_{w}^{(t)} + (1 - \beta_1) \nabla_w L^{(t)} mw(t+1)←β1mw(t)+(1−β1)∇wL(t)
v w ( t + 1 ) ← β 2 v w ( t ) + ( 1 − β 2 ) ( ∇ w L ( t ) ) 2 v_{w}^{(t+1)} \leftarrow \beta_2 v_{w}^{(t)} + (1 - \beta_2) (\nabla_w L^{(t)})^2 vw(t+1)←β2vw(t)+(1−β2)(∇wL(t))2
m ^ w = m w ( t + 1 ) 1 − β 1 t \hat{m}_{w} = \frac{m_{w}^{(t+1)}}{1 - \beta_1^t} m^w=1−β1tmw(t+1)
v ^ w = v w ( t + 1 ) 1 − β 2 t \hat{v}_{w} = \frac{v_{w}^{(t+1)}}{1 - \beta_2^t} v^w=1−β2tvw(t+1)
w ( t + 1 ) ← w ( t ) − η m ^ w v ^ w + ϵ w^{(t+1)} \leftarrow w^{(t)} - \eta\frac{ \hat{m}_{w}}{\sqrt{\hat{v}_{w}} + \epsilon} w(t+1)←w(t)−ηv^w+ϵm^w
其中 ϵ \epsilon ϵ是一个小标量(例如: 1 0 − 8 10^{-8} 10−8)用于防止被0除法, β 1 \beta_1 β1(例如0.9)和 β 2 \beta_2 β2(例如0.999)分别是梯度和梯度秒矩的遗忘因子。平方和平方根是按元素进行的。
建立亚当收敛的最初证明是不完整的,随后的分析表明,亚当并不是所有凸目标的收敛。尽管如此,亚当在实践中的表现仍然很出色,因此在实践中继续使用。此外,该算法的深远影响激发了多种更新的、鲜为人知的基于动量的优化方案,这些方案使用 Nesterov 增强梯度(例如:NAdam 和 FASFA)和对二阶信息的不同解释(例如:Powerpropagation和 AdaSqrt)。然而,最常用的变体是 AdaMax,它使用无穷范数推广 Adam,以及 AMSGrad,它通过使用最大过去平方梯度而不是指数平均值来解决 Adam 的收敛问题。AdamW是后来的更新,它减轻了 Adam 中权重衰减算法的不最佳选择。
基于符号的随机梯度下降
尽管基于符号的优化可以追溯到前面提到的 Rprop,但在 2018 年,研究人员试图通过消除随机梯度的大小并仅考虑其符号来简化 Adam。
回溯行搜索
回溯线搜索是梯度下降的另一种变体。以下所有内容均来自上述链接。它基于一种称为 Armijo-Goldstein 条件的条件。这两种方法都允许学习率在每次迭代中发生变化;但是,更改的方式是不同的。回溯线搜索使用函数评估来检查 Armijo 的条件,原则上,算法中用于确定学习率的循环可能很长,并且事先未知。自适应 SGD 在确定学习率时不需要循环。另一方面,自适应 SGD 不保证“下降属性”——回溯行搜索享有这种属性—— f ( x n + 1 ) ≤ f ( x n ) f(x_{n+1})\leq f(x_n) f(xn+1)≤f(xn),这是所有 n 的“下降属性”。如果成本函数的梯度是全局 Lipschitz 连续的,Lipschitz 常数为 L,并且学习率选择为 1/L 量级,则 SGD 的标准版本是回溯线搜索的特例。
二阶方法
标准(确定性)牛顿-拉夫森算法(“二阶”方法)的随机类比在随机逼近的设置中提供了一种渐近最优或接近最优的迭代优化形式[citation needed]。Byrd、Hansen、Nocedal 和 Singer 开发了一种在经验风险函数中使用总和的 Hessian 矩阵的直接测量方法。然而,在实践中,直接确定优化所需的 Hessian 矩阵可能是不可能的。Spall 等人给出了不需要直接 Hessian 信息的 SGD 二阶版本的实用且理论上合理的方法。(Ruppert给出了一种基于有限差异而不是同时扰动的低效方法。近似 Hessian 矩阵的另一种方法是用 Fisher 信息矩阵替换它,后者将通常的梯度转换为自然梯度。这些不需要直接 Hessian 信息的方法基于上述经验风险函数中的求和值或求和的梯度值(即 SGD 输入)。特别是,二阶最优性是渐近实现的,而无需直接计算经验风险函数中求和的 Hessian 矩阵。
连续时间的近似
对于较小的学习速率 η \eta η,随机梯度下降 ( w n ) n ∈ N 0 (w_n)_{n\in \mathbb N_0} (wn)n∈N0可以看作是梯度流偏微分方程的离散化
d d t W t = − ∇ Q ( W t ) \frac{d}{dt}W_t=-\nabla Q(W_t) dtdWt=−∇Q(Wt)
受到额外的随机噪声的影响。这种近似仅在以下意义上的有限时间范围内有效:假设所有系数 Q i Q_i Qi都足够平滑。让 T > 0 T>0 T>0和 g : R d → R g:\mathbb R^d \rightarrow\mathbb R g:Rd→R成为足够平滑的测试函数。然后,存在一个常数 C > 0 C>0 C>0,使得对于所有 η > 0 \eta >0 η>0
max k = 0 , . . . , ⌊ T / η ⌋ ∣ E [ g ( w k ) ] − g ( W k η ) ∣ ≤ C η , \max_{k=0,...,\lfloor T/\eta\rfloor} | \mathbb{E}[g(w_k)] - g(W_{k\eta}) | \leq C\eta, k=0,...,⌊T/η⌋max∣E[g(wk)]−g(Wkη)∣≤Cη,
其中 E \mathbb E E表示对随机梯度下降方案中指标的随机选择的期望。
由于这种近似不能捕捉到随机梯度下降平均行为周围的随机波动,因此随机微分方程 (SDE) 的解被提议作为限制对象。更准确地说,是 SDE 的解决方案
d W t = − ∇ ( Q ( W t ) + 1 4 η ∣ ∇ Q ( W t ) ∣ 2 ) d t + η ∑ ( W t ) 1 2 d B t , dW_t = -\nabla ( Q(W_t) + \frac{1}{4} \eta|\nabla Q(W_t)|^2 ) dt + \sqrt{\eta} \sum(W_t)^{\frac12} d B_t, dWt=−∇(Q(Wt)+41η∣∇Q(Wt)∣2)dt+η∑(Wt)21dBt,
为
Σ ( w ) = 1 n 2 ( ∑ i = 1 n Q i ( w ) − Q ( w ) ) ( ∑ i = 1 n Q i ( w ) − Q ( w ) ) ⊤ \Sigma(w) = \frac{1}{n^2}( \sum_{i=1}^n Q_i(w) - Q(w) ) ( \sum_{i=1}^n Q_i(w) - Q(w) )^\top Σ(w)=n21(i=1∑nQi(w)−Q(w))(i=1∑nQi(w)−Q(w))⊤
其中 d B t dB_t dBt表示关于布朗运动的伊托积分是一个更精确的近似值因为存在一个常数 C > 0 C>0 C>0使得
max k = 0 , . . . , ⌊ T / η ⌋ ∣ E [ g ( w k ) ] − E [ g ( W k η ) ∣ ] ≤ C η 2 . \max_{k=0,...,\lfloor T/\eta\rfloor} | \mathbb{E}[ g(w_k)] - \mathbb{E}[g(W_{k\eta}) | ] \leq C\eta^2. k=0,...,⌊T/η⌋max∣E[g(wk)]−E[g(Wkη)∣]≤Cη2.
然而,该SDE仅近似于随机梯度下降的一点运动。对于随机流的近似,必须考虑具有无限维噪声的SDEs。
优点与缺点
优点:
- 适用于大规模数据集。
- 能够在线更新模型(即边训练边更新)。
缺点:
- 收敛速度可能较慢。
- 可能收敛到局部最小值而非全局最小值。
GPT可视化示例
为了更好地解释随机梯度下降的原理,我将创建一张图表,展示在二维空间中,如何通过SGD逐步逼近损失函数的最小值。
让我们生成这张图表。
上图展示了随机梯度下降(SGD)在二维空间中的工作原理。图中的等高线图表示损失函数,而箭头序列显示了SGD的路径。从一个随机点出发,箭头逐步指向损失函数的最小值。这个过程揭示了SGD的迭代本质,以及由于梯度估计的随机性,路径是如何呈锯齿形逐渐接近最小值的。
这种可视化有助于理解SGD在求解优化问题时的动态过程,特别是在机器学习和深度学习的背景下。通过这种方式,我们可以直观地看到算法是如何在参数空间中导航,以寻找能够最小化损失函数的参数值。
这篇关于【机器学习:Stochastic gradient descent 随机梯度下降 】机器学习中随机梯度下降的理解和应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!