优化器介绍——SGD和Adam

一、 torch.optim.SGD 随机梯度下降

        该类可实现 SGD 优化算法,带动量 的SGD 优化算法和带 NAG(Nesterov accelerated gradient)的 SGD 优化算法,并且均可拥有 weight_decay(权重衰减) 项。

1.SGD代码

'''
params(iterable)- 参数组,优化器要优化的那部分参数。
lr(float)- 初始学习率,可按需随着训练过程不断调整学习率。
momentum(float)- 动量,通常设置为 0.9,0.8
dampening(float)- dampening for momentum ,暂时不了其功能,在源码中是这样用的:buf.mul_(momentum).add_(1 - dampening, d_p),值得注意的是,若采用nesterov,dampening 必须为 0.
weight_decay(float)- 权值衰减系数,也就是 L2 正则项的系数
nesterov(bool)- bool 选项,是否使用 NAG(Nesterov accelerated gradient)
'''
class torch.optim.SGD(params, lr=<object object>, momentum=0, dampening=0, weight_decay=0, nesterov=False)

2.基本思路

在每个训练样本上计算梯度并更新权重,因此也被称为在线学习。

在SGD中,模型的参数向负梯度方向更新,使得损失函数的值逐渐减少。具体来说,每个训练样本的误差对每个参数的

### 比较 SGD 优化器Adam 优化器 #### 工作原理 SGD(随机梯度下降)是一种简单而广泛使用的优化算法,其核心思想是在每次迭代中仅使用单个样本或一小批样本来估计整个数据集上的梯度并更新参数。这种方式使得训练过程更加高效且具有一定的噪声,有助于跳出局部最优解[^1]。 相比之下,Adam(自适应矩估计)结合了动量法RMSProp的优点,在计算当前时刻的学习率时不仅考虑了一阶矩(即均值),还加入了二阶矩(未中心化的方差)。这允许Adam能够自动调整每个参数的学习速率,并且对于稀疏梯度表现良好[^2]。 #### 特点对比 - **收敛速度**:由于Adam利用历史梯度信息来动态调节步长,通常情况下它比传统的SGD更快地达到较低的损失函数值。 - **内存消耗**:虽然两者都需要存储模型权重其他必要的状态变量,但是Adam额外维护着两个移动平均数——过去梯度的一阶矩估计m_t以及平方梯度的指数加权平均v_t,因此可能会占用更多内存资源。 - **超参敏感性**:SGD主要依赖于设置合适的学习率;然而,不恰当的选择可能导致发散或者过慢收敛。相反,尽管Adam拥有更多的可调参数(如β₁, β₂ ε),但这些默认配置往往适用于大多数情况下的性能优化[^3]。 #### 实际应用场景 当处理大规模神经网络尤其是卷积神经网络(CNNs) 或者循环神经网络(RNNs),并且希望获得快速稳定的训练效果时,推荐优先尝试Adam作为初始选项。而对于一些简单的线性回归问题或者其他小型浅层架构,则可能发现SGD已经足够胜任任务需求,并且有时甚至可以获得更好的泛化能力。 ```python import torch.optim as optim # 使用SGD优化器的例子 optimizer_sgd = optim.SGD(model.parameters(), lr=0.01) # 使用Adam优化器的例子 optimizer_adam = optim.Adam(model.parameters()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值