RNN BPTT算法推導

BPTT(沿時反向傳播算法)基本原理與BP算法一樣,包含三個步驟:

  • 前向計算每個神經元的輸出值
  • 反向計算每個神經元的誤差項δjδ_j,它是誤差函數E對神經元j的加權輸入netjnet_j的偏導數
  • 計算每個權重的梯度
  • 最後再用隨機梯度下降算法更新權重
    循環曾如圖所示:
    在這裏插入圖片描述
    1.1前向計算
    循環層的前向計算:
    隱層:st=f(Uxt+Wst1)s_t=f(Ux_t+Ws_{t-1})
    1.2誤差項的計算
    BPTT算法將第l層t時刻的誤差項δtlδ_t^l值沿兩個方向傳播,一個方向時傳遞到上一層網絡,得到δtl1δ_t^{l-1},這部分只和權重矩陣U有關;另一方向是將其沿着時間線傳遞到初始t1t_1時刻,得到δ1lδ_1^l,這部分只和權重矩陣W有關。
    用向量netjnet_j表示神經元在t時刻的加權輸入:
    netj=Uxt+Wst1net_j=Ux_t+Ws_{t-1}
    st1=f(nett1)s_{t-1}=f(net_{t-1})
    因此:
    nettnett1=nettst1st1nett1\frac{\partial net_t}{\partial net_{t-1}}=\frac{\partial net_t}{\partial s_{t-1}}\frac{\partial s_{t-1}}{\partial net_{t-1}}
    nettst1=W\frac{\partial net_t}{\partial s_{t-1}}=W
    第二項是一個jacobian矩陣
    在這裏插入圖片描述
    在這裏插入圖片描述
    最後,將兩項合在一起,可得:
    nettnett1=nettst1st1nett1=Wdiag[f(nett1)]\frac{\partial net_t}{\partial net_{t-1}}=\frac{\partial net_t}{\partial s_{t-1}}\frac{\partial s_{t-1}}{\partial net_{t-1}}=W*diag[f^{'} (net_{t-1})]
    上式描述了將δ\delta沿時間向前傳遞一個時刻的規律,可以求的任意時刻k的誤差項δk\delta_k:
    在這裏插入圖片描述
    這就是將誤差項沿着時間反向傳播的算法。

循環層將誤差項反向傳遞到上一層網絡,與普通的全連接層是完全一樣的。
循環層的加權輸入netlnet^l與上一層的加權輸入netl1net^{l-1}關係如下:
nettl=Uatl1+Wst1net^l_t=Ua^{l-1}_t+Ws_{t-1}
atl1=fl1(nettl1)a^{l-1}_t=f^{l-1}(net^{l-1}_t)
上式中nettlnet^l_t是第l層神經元的加權輸入;nettl1net^{l-1}_t是l-1層神經元的加權輸入;atl1a^{l-1}_t是第l-1層神經元的輸出;fl1f^{l-1}是第l-1層的激活函數。
nettlnettl1=nettlatl1atl1nettl1=Udiag[fl1(nettl1)]\frac{\partial net^l_t}{\partial net^{l-1}_t}=\frac{\partial net^l_t}{\partial a^{l-1}_t}\frac{\partial a^{l-1}_t}{\partial net^{l-1}_t}=U*diag[f^{'l-1}(net^{l-1}_t)]
所以:
δtl1=Enettl1=Enettlnettlnettl1=δtlUdiag[fl1(nettl1)]\delta^{l-1}_t=\frac{\partial E}{\partial net^{l-1}_t}=\frac{\partial E}{\partial net^l_t}\frac{\partial net^l_t}{\partial net^{l-1}_t}=\delta^l_t*U*diag[f^{'l-1}(net^{l-1}_t)]
上式就是將誤差項傳遞到上一層算法。
1.3權重梯度的計算
接下來是BPTT算法的最後一步:計算每個權重的梯度
首先計算誤差函數E對權重矩陣W的梯度:EW\frac{\partial E}{\partial W}
在這裏插入圖片描述
上圖爲我們前兩步計算得到的量,包括每個時刻t循環層的輸出值sts_t,以及誤差項δt\delta_t
我們知道了任意一個時刻的誤差項δt\delta_t,以及上一個時刻循環層的輸出值st1s_{t-1},就可以按照下面的公式求出權重矩陣在t時刻的梯度:
在這裏插入圖片描述
上式中,δit\delta^t_i表示t時刻誤差項向量的第i各分量,即第i層的誤差項;KaTeX parse error: Double subscript at position 8: s_{t-1}_̲i表示t-1時刻循環層第i各神經元的輸出值。
權重梯度推導:
在這裏插入圖片描述
1.4梯度爆炸與梯度消失

RNNs並不能很好地處理較長的序列。主要原因是RNN在訓練中很容易發生梯度爆炸和梯度消失,導致訓練時梯度不能在較長序列中一直傳遞下去,從而使RNN無法捕捉到長距離的影響。
三種方法應對梯度消失問題:
1)合理的初始化權重值。初始化權重,使每個神經元儘可能不要取極大或極小值,以躲開梯度消失的區域。
2)使用Relu代替sigmod和tanh作爲激活函數。
3)使用其它結構的RNNs,比如長短時記憶網絡(LSTM)和Gated Recurrent Unit(GRU),這是最流行的做法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章