优化器
常见的优化器
SGD
随机梯度下降,基本的优化算法,它通过计算每个参数的梯度来更新参数。
我们可以使用SGD实现对所有样本的梯度下降、小批量梯度下降或者单样本的随机梯度下降。
1 | |
params:要优化的参数的迭代器或列表lr:学习率,必须指定,没有默认值momentum:动量因子,用于加速梯度下降的过程,比如momentum=0.9dampening:动量的阻尼系数,用于控制动量的影响。当dampening非零时,会减少动量的累积效应weight_decay:权重衰减(L2惩罚),用于正则化,防止模型过拟合nesterov:是否使用Nesterov动量,默认值为False。Nesterov动量是一种改进的动量方法,它在计算梯度时考虑了未来的位置
比如:
1 | |
Adam
optim.Adam 是 PyTorch 中提供的一种自适应矩估计(Adaptive
Moment Estimation,简称 Adam)优化器
1 | |
AdamW
AdamW会将优化过程中使用的针对网络权重的衰减项(或者叫正则项)从loss中单独拿出,不参与Adam中一阶二阶动量的计算。
原先Adam的实现如果采用了L2权重衰减,则相应的权重衰减项会被直接加到loss中,从而导致动量的一阶二阶滑动平均考虑了该权重衰减项,这会干扰正则化的强度。Adam的自适应学习率机制会导致权重衰减系数也会“改变”。
AdamW的使用与Adam相同:
1 | |
优化器的使用
定义好优化器后,我们可以使用zero_grad()方法将优化器中需要优化的参数的梯度全部变为零,这样做的目的是防止梯度累积
如果要对参数进行梯度下降的优化,使用step()方法,
比如,实现一个Softmax回归:
1 | |
给不同的层设置不同的学习率等参数
除了上述的参数传入方式外,pytorch的optim还支持以字典的形式传入参数,如果对不同的层想设置不同的参数,可以使用列表的格式分开,列表中的元素为不同层参数字典。
1 | |
输出结果:
1 | |
优化器
https://blog.shinebook.net/2025/03/02/人工智能/pytorch/优化器/