1 SGD
1.1 原理
1.2 构造
1.3 参数详解——momentum
损失函数是用来度量模型输出和真实值的偏差,损失函数越小,说明我们的模型效果越好,所以我们需要不停的最小化这个函数。如果损失函数是一个凸函数,求得最小值还是比较简单的,直接求导就可以。但是复杂的深度学习网络一般是一个非凸函数,很难直接求导,所以优化算法就是在这种情况下用来最小化损失函数。SGD是随机梯度下降,优化算法的一种。
SGD为随机梯度下降,原理可看刘建平老师博客。
构造:
class torch.optim.SGD(
params,
lr,
momentum=0,
dampening=0,
weight_decay=0,
nesterov=False
)
参数:
params
:需要优化的参数lr
:float, 学习率momentum
:float,动量因子dampening
:float,动量的抑制因子weight_decay
:float,权重衰减nesterov
:bool,是否使用Nesterov动量momentum
一般随机梯度下降时,每次更新公式都是: 以一个例子说明,假设现梯度为5,经历两次梯度变化分别是-2和+3,momuntu=0.9。
而增加动量后,公式是:
即在原值乘一个动量因子momentum(0
传统下经历两次梯度变化,最终梯度应该是5=》3=》6。
使用momentum后本次梯度应该是5=》3=》0.9*3+3=5.7
。局部上第二次梯度变化虽然仍是+3,但是由于使用了momuntu,整体上看是+2.7,起到一个减速作用。