本文最后更新于:2021年10月22日 下午
深度学习之梯度累加(Pytorch实现)
参考文献
What is Gradient Accumulation in Deep Learning? | by Raz Rotenberg | Towards Data Science
梯度累加(Gradient Accumulation) - stardsd - 博客园 (cnblogs.com)
梯度累加是什么
梯度累加就是把一个大Batch分成小mini-batch,每个mini-batch分别送模型算loss得到梯度,并进行累加,直到大Batch里所有数据计算完,再梯度下降。

梯度累加就是运行几个step但是不更新模型,在这几个step中,模型的参数不变,也就是假装我们在计算大Batch。
Pytorch代码示例
传统训练过程
1 2 3 4 5 6 7 8
| for i, (inputs, labels) in enumerate(trainloader): optimizer.zero_grad() outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() if (i+1) % evaluation_steps == 0: evaluate_model()
|
梯度累加
1 2 3 4 5 6 7 8 9 10
| for i, (inputs, labels) in enumerate(trainloader): outputs = net(inputs) loss = criterion(outputs, labels) loss = loss / accumulation_steps loss.backward() if (i+1) % accumulation_steps == 0: optimizer.step() optimizer.zero_grad() if (i+1) % evaluation_steps == 0: evaluate_model()
|
挖坑:Video Captioning通过梯度累加来加快速度
实验平台GPU被占了做不了实验填不了坑了哼唧