torch.optim.SGD(net.parameters(), lr=lr, momentum=0.9,weight_decay=wd)
第一个参数包括权重w,和偏置b等是神经网络中的参数,也是SGD优化的重点
第二个参数lr是学习率。sgd中的学习率lr的作用可以理解为: p ′ = p − l r ∗ d p p^{'} = p - lr*dp p′=p−lr∗dp 其中p就是模型中的参数比如:权重(w), 偏置(b)。 d p dp dp 就是对p的一阶求导, lr 即学习率, p ′ p^{'} p′ 为p的另一种形式,即用来替换上一次的p
第三个参数momentum是冲量
“冲量”这个概念源自于物理中的力学,表示力对时间的积累效应。
在普通的梯度下降法x+=v
中,每次x的更新量v为v=−dx∗lr,其中dx为目标函数func(x)对x的一阶导数,。
当使用冲量时,则把每次x的更新量v考虑为本次的梯度下降量−dx∗lr与上次x的更新量v乘上一个介于[0,1][0,1]的因子momentum的和,即
v
′
=
−
d
x
∗
l
r
+
v
∗
m
o
m
e
m
t
u
m
v^{'}=−dx∗lr+v∗momemtum
v′=−dx∗lr+v∗momemtum
当本次梯度下降- dx * lr的方向与上次更新量v的方向相同时,上次的更新量能够对本次的搜索起到一个正向加速的作用。
当本次梯度下降- dx * lr的方向与上次更新量v的方向相反时,上次的更新量能够对本次的搜索起到一个减速的作用。