【深度学习】梯度截断(grad_clip)

神经网络在反向传播的过程中会产生梯度消失/梯度爆炸的问题,梯度消失/爆炸会导致网络中的参数长时间无法更新,模型进而无法得到很好的训练效果

梯度截断,就是要解决 梯度消失/梯度爆炸 的问题,也就是设定阈值,当预更新的梯度小于阈值时,那么将预更新的梯度设置为阈值

梯度截断通常发送在,损失函数反向传播计算完之后,优化器梯度更新之前。

pytorch 中通过 clip_grad_norm 方法来实现

# measure accuracy and record loss
self.optimizer.zero_grad()
loss = self.forward_loss(img_emb, cap_emb) 

# compute gradient and do SGD step 
loss.backward() 

# 梯度截断,设置阈值,当要更新的梯度小于阈值时,更新的梯度为阈值
if self.grad_clip > 0:     
    clip_grad_norm(self.params,self.grad_clip) 

# 根据梯度更新参数 
self.optimizer.step()

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
上一篇 2022年5月23日 上午11:26
下一篇 2022年5月23日 上午11:30

相关推荐

本站注重文章个人版权,不会主动收集付费或者带有商业版权的文章,如果出现侵权情况只可能是作者后期更改了版权声明,如果出现这种情况请主动联系我们,我们看到会在第一时间删除!本站专注于人工智能高质量优质文章收集,方便各位学者快速找到学习资源,本站收集的文章都会附上文章出处,如果不愿意分享到本平台,我们会第一时间删除!