梯度裁剪(Clipping Gradient):torch.nn.utils.clip_grad_norm

torch.nn.utils.clip_grad_norm_(parameters, max_norm, norm_type=2)

1.(引用:【深度學習】RNN中梯度消失的解決方案(LSTM) )html

梯度裁剪原理:既然在BP過程當中會產生梯度消失(就是偏導無限接近0,致使長時記憶沒法更新),那麼最簡單粗暴的方法,設定閾值,當梯度小於閾值時,更新的梯度爲閾值,以下圖所示:python

P.S.在原博中,評論中有提到,經常使用的梯度裁剪的方法是限制上限,針對梯度爆炸不收斂的狀況,和做者寫的相反。我理解的大概是「梯度裁剪解決的是梯度消失或爆炸的問題,即設定閾值」。函數

 

2. 函數定義:裁剪可迭代參數的漸變範數。範數是在全部梯度一塊兒計算的,就好像它們被鏈接成單個矢量同樣。漸變是就地修改的。學習

Parameters:spa

    • parameters (Iterable[Variable]) – 一個基於變量的迭代器,會進行歸一化(原文:an iterable of Variables that will have gradients normalized)
    • max_norm (float or int) – 梯度的最大範數(原文:max norm of the gradients)
    • norm_type(float or int) – 規定範數的類型,默認爲L2(原文:type of the used p-norm. Can be'inf'for infinity norm)

Returns:參數的整體範數(做爲單個向量來看)(原文:Total norm of the parameters (viewed as a single vector).).net

相關文章
相關標籤/搜索