BPTT(沿時反向傳播算法)基本原理與BP算法一樣,包含三個步驟:
- 前向計算每個神經元的輸出值
- 反向計算每個神經元的誤差項,它是誤差函數E對神經元j的加權輸入的偏導數
- 計算每個權重的梯度
- 最後再用隨機梯度下降算法更新權重
循環曾如圖所示:
1.1前向計算
循環層的前向計算:
隱層:
1.2誤差項的計算
BPTT算法將第l層t時刻的誤差項值沿兩個方向傳播,一個方向時傳遞到上一層網絡,得到,這部分只和權重矩陣U有關;另一方向是將其沿着時間線傳遞到初始時刻,得到,這部分只和權重矩陣W有關。
用向量表示神經元在t時刻的加權輸入:
因此:
第二項是一個jacobian矩陣
最後,將兩項合在一起,可得:
上式描述了將沿時間向前傳遞一個時刻的規律,可以求的任意時刻k的誤差項:
這就是將誤差項沿着時間反向傳播的算法。
循環層將誤差項反向傳遞到上一層網絡,與普通的全連接層是完全一樣的。
循環層的加權輸入與上一層的加權輸入關係如下:
上式中是第l層神經元的加權輸入;是l-1層神經元的加權輸入;是第l-1層神經元的輸出;是第l-1層的激活函數。
所以:
上式就是將誤差項傳遞到上一層算法。
1.3權重梯度的計算
接下來是BPTT算法的最後一步:計算每個權重的梯度
首先計算誤差函數E對權重矩陣W的梯度:
上圖爲我們前兩步計算得到的量,包括每個時刻t循環層的輸出值,以及誤差項
我們知道了任意一個時刻的誤差項,以及上一個時刻循環層的輸出值,就可以按照下面的公式求出權重矩陣在t時刻的梯度:
上式中,表示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),這是最流行的做法。