在训练模型的过程中,我们有可能发生梯度爆炸的情况,这样会导致我们模型训练的失败。
我们可以采取一个简单的策略来避免梯度的爆炸,那就是梯度截断Clip, 将梯度约束在某一个区间之内,在训练的过程中,在优化器更新之前进行梯度截断操作。
整个流程简单总结如下:
- 加载训练数据和标签
- 模型输入输出
- 计算loss函数值
- loss 反向传播
- 梯度截断
- 优化器更新梯度参数
pytorch 代码如下:
def clip_gradient(optimizer, grad_clip):
"""
Clips gradients computed during backpropagation to avoid explosion of gradients.
:param optimizer: optimizer with the gradients to be clipped
:param grad_clip: clip value
"""
for group in