AdamOptimizer和随机梯度下降法SGD的区别

本文探讨了AdamOptimizer和随机梯度下降法(SGD)在优化过程中的不同之处,重点解析它们的工作原理和应用场景。AdamOptimizer结合了动量法和RMSProp的优势,适合大规模数据集和非平稳目标函数;而SGD则以其简单和效率高著称,常用于初始化模型权重。了解两者间的区别有助于在实际项目中选择合适的优化器。

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


Adam 这个名字来源于adaptive moment estimation,自适应矩估计, 如果一个随机变量 X 服从某个分布,X 的一阶矩是 E(X),也就是样本平均值,X 的二阶矩就是 E(X^2),也就是样本平方的平均值。Adam 算法根据损失函数对每个参数的梯度的一阶矩估计和二阶矩估计动态调整针对于每个参数的学习速率。 TensorFlow提供的tf.train.AdamOptimizer可控制学习速度。 Adam 也是基于梯度下降的方法,但是每次迭代参数的学习步长都有一个确定的范围,不会因为很大的梯度导致很大的学习步长,参数的值比较稳定。it does not require stationary objective, works with sparse gradients, naturally
### 优化算的定义与原理 #### 牛顿 牛顿是一种基于二阶导数信息的优化方,它通过构建目标函数的二次近似来寻找极小值点。具体来说,在每次迭代过程中,牛顿不仅考虑了梯度(一阶导数)的方向,还利用了Hessian矩阵(二阶导数)的信息来调整步长[^1]。这种方的优点在于其具有较快的收敛速度——通常是二阶收敛,这意味着在接近最优解时,误差会迅速减小。然而,由于计算存储Hessian矩阵的成本较高,特别是在高维空间中,因此实际应用中可能会受到限制。 #### 随机梯度下降 (Stochastic Gradient Descent, SGD) 随机梯度下降是对传统批处理梯度下降的一种改进版本。相比于批量梯度下降需要遍历整个数据集才能完成一次更新,SGD每次只选取单一样本或者少量样本进行参数更新[^3]。这种方式显著减少了每轮迭代所需的计算资源,并允许模型快速响应新数据的变化。尽管如此,SGD也可能因为频繁波动而导致最终解不够精确;另外,如果学习率设置不当,则可能出现振荡甚至发散的情况。 #### 小批量随机梯度下降 (Mini-batch Stochastic Gradient Descent, Mini-batch SGD) 为了平衡计算效率与稳定性之间的矛盾,提出了小批量随机梯度下降作为折衷方案。该方介于全量梯度下降随机梯度下降之间:每次从训练集中抽取固定数量的小批次样本来估算整体梯度并据此调整权重[^4]。相比单纯的SGD而言,mini-batch能够提供更加平滑的学习曲线,同时保留了一定程度上的噪声优势以帮助跳出局部极小值区域。 #### Adam (Adaptive Moment Estimation) Adam 是一种自适应矩估计优化器,综合了 Momentum RMSProp 的特点,旨在克服单一技术可能存在的缺陷。它的核心思想是在不同维度上动态调节各自独立的学习速率,从而加快收敛过程的同时保持良好的泛化性能[^2]。具体操作如下: - **第一时刻估计** \( m_t \): 对过去所有梯度按指数衰减速平均; - **第二未中心化的方差估计** \( v_t \): 记录历史平方梯度加权移动均值; 两者分别对应动量项平滑后的平方根项,经过偏差校正后用于指导下一步前进方向及步伐长度的选择。 ```python import numpy as np def adam_optimizer(params, grads, lr=0.001, beta1=0.9, beta2=0.999, eps=1e-8): t = 0 mt = vt = None if not isinstance(mt, list): mt = [np.zeros_like(param) for param in params] if not isinstance(vt, list): vt = [np.zeros_like(param) for param in params] t += 1 lr_t = lr * np.sqrt(1.0 - beta2**t)/(1.0 - beta1**t) for i, grad in enumerate(grads): mt[i] = beta1*mt[i] + (1-beta1)*grad vt[i] = beta2*vt[i] + (1-beta2)*(grad**2) params[i] -= lr_t * mt[i]/(np.sqrt(vt[i]) + eps) return params ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值