上海启嘟渡科技商贸有限公司
SEARCH

与我们合作

我们专注提供互联网一站式服务,助力企业品牌宣传多平台多途径导流量。
主营业务:网站建设、移动端微信小程序开发、营销推广、基础网络、品牌形象策划等

您也可通过下列途径与我们取得联系:

微 信: wxyunyingzhe

手 机: 15624122141

邮 箱:

十分钟速通优化器原理,通俗易懂(从SGD到AdamW)

更新时间:2024-12-31 04:42:31

在深度学习的优化过程中,梯度下降法起到了关键作用。梯度下降法通过计算损失函数关于参数的梯度,来寻找参数空间中的最小值。这个最小值对应着损失函数的最小值,从而达到优化的目的。一个经典的例子是对于函数 \(f(x) = (x-1)^2 + 1\),在点 (1, 1) 处,梯度是向量 (2),这指示了函数值增大的方向。因此,为了减小函数值,我们需要沿着梯度的相反方向移动。

在深度学习中,参数优化的目标是寻找损失函数的最小值,这可以类比为函数 \(L(w)\),其中 \(w\) 是参数。为了优化,我们需要计算损失函数关于每个参数的偏导数,得到梯度向量。然后,我们沿着梯度的反方向进行更新,以逐步减小损失值。

在优化算法的演进中,SGD(随机梯度下降)算法应运而生。SGD通过每次随机选取一部分数据来更新参数,相较于原始的梯度下降法,它在大规模数据集上具有更高的计算效率。其公式形式为 \(\theta_{t+1} = \theta_t - \eta_t \cdot \nabla_{\theta} L(w_t)\),其中 \(\theta_t\) 表示参数的当前值,\(\eta_t\) 是学习率,\(\nabla_{\theta} L(w_t)\) 是损失函数关于参数的梯度。

为了克服SGD的不稳定性,引入了动量(Momentum)的概念。动量通过累加历史梯度,抵消了梯度变化剧烈的部分,加速了收敛过程。动量更新的公式为 \(v_t = \beta \cdot v_{t-1} + \eta \cdot \nabla_{\theta} L(w_t)\),其中 \(\beta\) 是动量参数。

Nesterov加速梯度(NAG)算法进一步改进了动量更新,通过预测未来梯度的方向来优化更新过程,从而提高收敛速度。

PyTorch中的SGD实现通过简化Nesterov算法,采用当前参数位置来预估下一个梯度,从而实现优化。

AdaGrad算法为了解决学习率调整问题,通过累积梯度的平方和来自适应地调整学习率,从而在不同参数上实现差异化学习。其公式为 \(g_t = \nabla_{\theta} L(w_t)\),并有 \(\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t} + \epsilon} \cdot g_t\)。

RMSProp优化器结合了指数加权移动平均法,以减小历史梯度对当前学习率的影响,从而改善了学习率调整的性能。

Adam算法将SGD Momentum和RMSProp结合,通过计算一阶矩和二阶矩来自动调整学习率,适用于大规模数据集和高维度参数空间。

AdamW优化器则改进了Adam算法在权重衰减(L2正则化)上的不足,通过将权重衰减的梯度与Adam算法解耦,提高了模型的泛化性能。

优化器的演进是一个不断探索和解决问题的过程,通过理解每种优化器背后的原理,可以更深入地掌握深度学习的优化技术。

多重随机标签

猜你喜欢文章

QQ客服 电话咨询