torch.optim.SGD参数学习率lr、动量momentum、权重衰减weight_decay的解析

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=plrdp 其中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=dxlr+vmomemtum
当本次梯度下降- dx * lr的方向与上次更新量v的方向相同时,上次的更新量能够对本次的搜索起到一个正向加速的作用。
当本次梯度下降- dx * lr的方向与上次更新量v的方向相反时,上次的更新量能够对本次的搜索起到一个减速的作用。

第四个参数weight_decay是权重衰减 即L2正则化前面的那个 λ \lambda λ参数, 权重衰减的使用既不是为了提高你所说的收敛精确度也不是为了提高收敛速度,其最终目的是防止过拟合。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大。

另外可点击参考此链接

你可能感兴趣的:(pytorch,pytorch,深度学习,神经网络)