优化器与学习率

优化器与学习率(optim和lr_scheduler)解释

pytorch中,优化器是torch.optim,学习率调整策略是torch.optim.lr_scheduler,一般说的学习率衰减策略指的就是lr_scheduler。

构建网络时一般先定义优化器,如SGD优化器,是对网络参数进行优化:

optimizer_ExpLR = torch.optim.SGD(net.parameters(), lr=0.1)

然后定义学习率调整策略,如指数衰减策略(ExponentialLR),是给优化器一个学习率衰减的策略:

ExpLR = torch.optim.lr_scheduler.ExponentialLR(optimizer_ExpLR, gamma=0.98)

学习率调整策略没什么说的,就是在网络训练的时候动态调整学习率,详见:https://blog.csdn.net/qyhaill/article/details/103043637

优化器比较复杂,它实际上是一个对梯度下降参数更新的工具。比如SGD优化器

torch.optim.SGD(params,
                lr=,
                momentum=0,
                dampening=0,
                weight_decay=0,
                nesterov=False)

参数通俗解释:
1.params
params表示要优化的网络参数,即网络权重。
2.lr
lr表示学习率,这个就是控制梯度下降的速度。我们知道神经网络是通过计算损失函数对于网络参数(也就是权重)的梯度,然后沿着梯度下降的方向更新网络权重,使得网络能够最小化损失。那么学习率其实就是控制权重在更新时沿着梯度下降方向前进的幅度(或者叫速率),如下式:
在这里插入图片描述

3.momentum:参考自[https://blog.csdn.net/apsvvfb/article/details/72536495]
在普通的梯度下降法w+=v中,每次w的更新量v为v=−dw∗lr,其中dw为目标函数func(w)对w的一阶导数。当使用momentum时,则把每次w的更新量v考虑为本次的梯度下降量−dw∗lr与上次w的更新量v乘上一个介于[0, 1]的因子momentum的和,即:

v=−dw∗lr+v∗momemtum

可以看出:

  • 当本次梯度下降- dw * lr的方向与上次更新量v的方向相同时,上次的更新量能够对本次的搜索起到一个正向加速的作用。
  • 当本次梯度下降- dw * lr的方向与上次更新量v的方向相反时,上次的更新量能够对本次的搜索起到一个减速的作用。

4.weight_decay
weight_decay实际上就是正则化项,类似最优化里面的罚函数方法。他是在损失函数上加一个惩罚项:
在这里插入图片描述

加这一项的作用是为了有效地限制模型中自由参数的数量,以避免过拟合。实际上,这会惩罚较大的权重,并有效地限制模型中的自由度。正则化参数λ决定了原始损失函数和较大权重对权重更新的比重,把这个惩罚项加入到损失函数中,得到的新的权重更新公式为:
在这里插入图片描述

对比原始的权重更新公式,多的这一项−ηλwi 会导致权重按照λ成比例衰减。所以这种惩罚项也叫做权重衰减(weight_decay)。

你可能感兴趣的:(pytorch,深度学习,机器学习)