pytorch学习笔记-weight decay 和 learning rate decay
1. Weight decay
Weight decay 是一种正则化方法,大概意思就是在做梯度下降之前,当前模型的 weight 做一定程度的 decay。
上面这个就相当于是 weights 减去下面公式对权重的梯度:
整理一下就是L2正则化:
所以当 的时候,L2正则化和 weight decay 是一样的,因此也会有人说L2正则就是权重衰减。在SGD中的确是这样,但是在 Adam中就不一定了。
使用 weight decay 可以:
在 pytorch 里可以设置 weight decay。
torch.optim.Optimizer
里, SGD、ASGD 、Adam、RMSprop 等都有weight_decay参数设置:
optimizer = torch.optim.SGD(model.parameters(), lr=lr, weight_decay=1e-4)
Deep learning basic-weight decay
关于量化训练的一个小tip: weight-decay
2. Learning rate decay
知道梯度下降的,应该都知道学习率的影响,过大过小都会影响到学习的效果。Learning rate decay 的目的是在训练过程中逐渐降低学习率,pytorch 在torch.optim.lr_scheduler
里提供了很多花样。
Scheduler 的定义在 optimizer之后, 而参数更新应该在一个 epoch 结束之后。
optimizer = torch.optim.SGD(model.parameters(), lr=lr, weight_decay=1e-4)
scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(self.optimizer, mode='min', verbose=True)
for epoch in range(10):
for input,label in dataloader:
optimizer.zero_grad()
output = model(input)
loss = loss_fn(output, target)
loss.backward()
optimizer.step()
scheduler.step()