梯度下降算法_Adam-一种随机优化算法

本文详细介绍了优化算法的发展,重点讲解了Adam算法。Adam是深度学习中广泛使用的优化方法,结合了梯度下降、Adagrad和RMSProp的优点,支持稀疏梯度并能自适应调整学习率。文章探讨了Adam的收敛性、偏差修正以及在不同实验中的表现,总结了Adam的优缺点,并提供了优化技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

9d9e0a9bc7aeea1972ae2b03b8275f3b.png

【前言】: 优化问题一直是机器学习乃至深度学习中的一个非常重要的领域。尤其是深度学习,即使在数据集和模型架构完全相同的情况下,采用不同的优化算法,也很可能导致截然不同的训练效果。

adam是openai提出的一种随机优化方法,目前引用量已经达到4w+,在深度学习算法优化中得到广泛的使用,是一种高效的优化算法。该算法是在梯度下降算法(SGD)的理念上,结合Adagrad和RMSProp算法提出的,计算时基于目标函数的一阶导数,保证了相对较低的计算量。adma的优点如下:参数更新的大小不随着梯度大小的缩放而变化;更新参数时的步长的边界受限于超参的步长的设定;不需要固定的目标函数;支持稀疏梯度;它能够自然的执行一种步长的退火。

ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION​arxiv.org

一. 优化算法的前世今生

1 Gradient Descent(梯度下降算法)

97eef467f5dee6b84c28108a99de2474.png

优化问题中大部分问题都可以转化为求解一个标量的目标函数

的最大值或最小值。当
对其参数
可微时,可采用梯度下降法进行求解。梯度下降法通过向当前位置梯度的负方向移动以实现最小化损失函数。

即最小化损失函数:

梯度更新如下:

优点: 针对凸函数

可以得到全局最优解;

缺点: 1> 收敛速度慢,

2> 要求目标函数是stationary(固定的), 训练数据需要一次性填到内存中,因此需求内 存大,当数据量大时,无法使用GD;

2 Stochastic Gradient Descent(随机梯度下降)

随机梯度下降顾名思义,就是在梯度下降基础上增加了随机性,即目标函数可以是随机的。目标函数可以使用minibatch中的样本计算得到,其中minibatch为在总样本中随机采样的样本。随着采样的不同,目标函数也是随机变化的。这可以有效的解决梯度下降的内存问题。

具体算法流程如下:

366efc9af5de1aa04bfc411dd69ff8c6.png

相对梯度下降算法,增加了采样过程,如标红位置。

优点:1> 通过调节采样数据的大小,易于使用有限的内存;

2> 相对于GD算法,收敛更快;

缺点:1> 训练不稳定;

2> 学习率难以选择;(学习率太小,梯度下降的步伐比较慢,训练的时间长;学习率太大,在凸函数最优解位置会来回震荡,难以收敛。所以一般随着训练不断的降低学习率)

3 SGD with Momentum

SGD是一种非常流行的优化策略,但它可能会收敛很慢。Momentum使用动量的方式加速了学习过程,尤其是遇到:损失函数高曲率情况,梯度很小但是相对稳定,噪声梯度等情况。其更新公式为:

### 梯度下降算法Adam优化器的关系 梯度下降算法是一类用于最小化目标函数的迭代方法,其核心思想是沿着负梯方向更新参数以逐步逼近最优解[^3]。而Adam优化器(Adaptive Moment Estimation)则是在梯度下降基础上发展起来的一种改进型优化算法。 #### Adam优化器的特点 Adam优化器结合了动量项和自适应学习率的优点,能够有效应对非凸优化问题以及大规模数据集带来的挑战[^2]。具体而言: - **动量机制**:通过引入指数加权平均来平滑历史梯度信息,从而加速收敛并减少震荡。 - **自适应学习率调整**:针对不同参数单独设置步长大小,使得稀疏特征可以更快得到更新,同时保持密集特征稳定变化。 这些特性使Adam成为目前最流行的深度学习优化工具之一。 --- ### 数学模型对比 对于标准形式下的批量梯度下降(Batch Gradient Descent),每次迭代按照如下规则更新权重w: \[ w := w - \eta * g_t \] 其中,\(g_t\)表示当前时刻t处关于损失函数L(w)相对于w求导所得梯度向量;\(\eta>0\)代表全局固定的学习速率. 相比之下,Adam采用更加复杂但高效的策略来进行参数调节.它利用了一阶矩估计(momentum term M_t) 和二阶未中心化的方差估计(V_t),定义如下: \[ M_t=\beta_1*M_{t-1}+(1-\beta_1)*g_t \\ V_t=\beta_2*V_{t-1}+(1-\beta_2)*(g_t)^2 \] 随后应用偏差修正技术获得最终的实际值\(m_hat_t,v_hat_t\): \[ m_hat_t=M_t/(1-(\beta_1)^t )\\ v_hat_t=V_t / (1-(\beta_2)^t ) \] 最后完成一次完整的参数更新操作: ```python import math def adam_update(w, m_prev, v_prev, grad, t, lr=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8): mt = beta1 * m_prev + (1 - beta1) * grad vt = beta2 * v_prev + (1 - beta2) * (grad ** 2) m_corr = mt / (1 - beta1 ** t) v_corr = vt / (1 - beta2 ** t) delta_w = -lr * m_corr / (math.sqrt(v_corr) + epsilon) return w + delta_w, mt, vt ``` 上述代码片段展示了如何基于Adam实现单次参数更新过程. --- ### 应用场景区分 | 特性/算法 | 普通梯度下降 | Adam | |------------------|-----------------------------------|-------------------------------| | 学习率控制 | 需手动设定单一全局值 | 自动适配各维度独立动态调整 | | 收敛速度 | 较慢 | 显著提升 | | 对噪声敏感程度 | 容易受随机波动影响 | 更强鲁棒性 | | 计算开销 | 单纯依赖简单乘除运算即可 | 增加额外存储维护移动均值变量 | 因此,在实际工程实践中当面临高度复杂的神经网络结构或者海量样本规模时推荐优先考虑使用像Adam这样的高级版本替代基础版GD方案[^1][^2]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值