【深度学习】梯度截断(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日
下一篇 2022年5月23日

相关推荐