谷明科技,用AI赋能未来
神经网络是当前机器学习中炙手可热的一个模型门类,其中的调参技巧也是层出不穷,从刚开始的BP,到SGD等。
在使用 Pytorch 的过程中,我们会发现在配置 SGD optimizer 的时候需要配置一个参数 momentum,那么这个参数是做什么的呢?
optimizer = optim.SGD(model.fc.parameters(), lr=1e-2, momentum=0.9)
这个必须要从SGD 的原理开始说起:
图的最上方为每个iteration(每个batch为一个iteration)中,权重的变化量的表达式,即学习因子 * 误差对当前参数 的偏微分。
但是SGD 的一大诟病点就是其对于异常点的波动太大,即如果出现了一个噪音点或者错误的数据,那么其对参数的调整可能十分剧烈,造成了参数的波动变化,不利于模型的稳定学习。
所以在上图的下方,增加了 一个对上一个 iteration 的权重偏差的引入,可以理解为汽车在驾驶过程中无论是打方向盘还是减速时候的惯性。
这样的话,当模型遇到一个比较大的误差的时候,不会完全按照当前误差进行调整参数,还要考虑之前的误差因素!