迴圈神經網路 梯度裁剪 困惑度

2021-10-24 11:24:37 字數 1121 閱讀 3679

迴圈神經網路中很容易出現梯度衰減或**。由於是迴圈計算,在進行反向傳播的時候,梯度會傳播很多次。

當傳播過程中有大多數導數 > 1時,最終的梯度會出現∞

\infty

∞,即所謂梯度**;當大多數導數 < 1時,最終的梯度會 →

0\rightarrow0

→0,即所謂梯度消失。

對此,有一種可行的做法,稱為梯度裁剪。假設將所有模型引數梯度的元素拼接成乙個向量g

\boldsymbol g

g,並設裁剪的閾值是θ

\theta

θ。則定義裁剪後的梯度為

m in

(θ∥g

∥,1)

gmin(\frac , 1)\boldsymbol g

min(∥g

∥θ​,

1)g

即:當所求出的梯度範數∥g∥

\parallel \boldsymbol g \parallel

∥g∥ > 我們所能接受的閾值θ

\theta

θ時,就將其縮小θ∥g

∥\frac

∥g∥θ

​倍;否則,就不變。

**實現如下:

'''

params: 模型的所有引數

theta: 閾值

ctx: cpu or gpu

'''def

grad_clipping

(params, theta, ctx)

:# 求範數

norm = nd.array([0

], ctx)

for param in params:

norm +=

(param.grad **2)

.sum()

norm = norm.sqrt(

).asscalar(

)if norm > theta:

for param in params:

param.grad[:]

*= theta / norm # 梯度縮小

對於語言模型的評價,通常採用困惑度(perplexity)。困惑度定義為:交叉熵損失函式做指數運算後的值。特別地,

神經網路 梯度下降

優化問題newton s method 牛頓法 least squares method最小二乘法 gradient descent梯度下降法 當 cost對w的梯度最小 斜率最小 時,誤差最小。我們從圖中可以看出,cost 誤差最小的時候正是這條 cost 曲線最低的地方,不過在藍點的 w 卻不知...

迴圈神經網路

原文 迴圈神經網路也可以畫成下面這個樣子 對於語言模型來說,很多時候光看前面的詞是不夠的,比如下面這句話 我的手機壞了,我打算 一部新手機。可以想象,如果我們只看橫線前面的詞,手機壞了,那麼我是打算修一修?換一部新的?還是大哭一場?這些都是無法確定的。但如果我們也看到了橫線後面的詞是 一部新手機 那...

迴圈神經網路

原文 迴圈神經網路也可以畫成下面這個樣子 對於語言模型來說,很多時候光看前面的詞是不夠的,比如下面這句話 我的手機壞了,我打算 一部新手機。可以想象,如果我們只看橫線前面的詞,手機壞了,那麼我是打算修一修?換一部新的?還是大哭一場?這些都是無法確定的。但如果我們也看到了橫線後面的詞是 一部新手機 那...