本文参考自Deep Learning 之 最优化方法和Pytorch官方文档1.4.0版本,另有官方文档中文翻译可供参考。
SGD
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| torch.optim.SGD(params, lr=<required parameter>, momentum=0, dampening=0, weight_decay=0, nesterov=False) """ params (iterable) – 待优化参数的iterable或者是定义了参数组的dict lr (float) – 学习率 momentum (float, 可选) – 动量因子(默认:0) weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认:0) dampening (float, 可选) – 动量的抑制因子(默认:0) nesterov (bool, 可选) – 使用Nesterov动量(默认:False) """
optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9) optimizer.zero_grad() loss_fn(model(input), target).backward() optimizer.step()
|
Momentum
- 动量方法主要是为了解决Hessian矩阵病态条件问题(直观上讲就是梯度高度敏感于参数空间的某些方向)的。
- 加速学习
- 一般将参数设为0.5,0.9,或者0.99,分别表示最大速度2倍,10倍,100倍于SGD的算法。
- 通过速度v,来积累了之间梯度指数级衰减的平均,并且继续延该方向移动: