RNN训练算法BPTT介绍
本篇文章第一部分翻譯自:http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/,英文好的朋友可以直接看原文。
最近看到RNN,先是困惑于怎樣實現隱藏層的互聯,搞明白之后又不太明白如何使用BPTT進行訓練,在網上找資源發現本篇博客介紹較為詳細易懂,自己翻譯了一遍,以下:
RNN教程,第3部分,通過時間反向傳播(BPTT)和梯度消失
這是RNN教程的第三部分。
在本教程的前面部分我們從頭開始實現了一個RNN網絡,但是沒有探究實現BPTT計算梯度的細節。在這部分我們將給出BPTT的簡要概述并且解釋它和傳統反向傳播算法的區別。隨后我們將致力于理解梯度消失問題(vanishing gradient problem),這個問題促成了LSTMs和GRUs的發展,在NLP(和其他領域),它們是當前最受歡迎和最為強大的模型中的兩種。梯度消失問題最早于1991年有Sepp Hochreiter發現,最近由于深度結構的應用增多而重新受到關注。
如果想完全理解這部分內容,我建議你對偏導數和基本的反向傳播工作很熟悉。如果你還不熟悉,你可以從【文中提供了三個地址】找到好的教程,它們隨著難度的上升而排序。
Backpropagation Through TIme(BPTT)
我們先快速回顧一下RNN的等式。注意到這里有一個小變化,符號o變成了。這是為了和我參考的一些文獻保持一致。
我們同時定義我們的損失函數(或者稱為誤差)為交叉熵損失,由以下公式給出:
這里是t時刻的正確單詞,是網絡的預測。典型的,我們將完整的序列(句子)是為一個訓練實例,所以總的誤差是各個時間點(單詞)誤差的和。
我們的目的是計算誤差關于參數U,V和W的梯度并通過隨機梯度下降(SGD)來學習好的參數。正如我們計算了誤差的和,我們也將一個訓練實例各個時間地啊你的梯度做一個求和:。
我們使用鏈式求導來計算這些導數。這是從誤差開始后應用反向傳播算法。在這篇文章的剩余部分我們將使用作為例子,這只是為了用一個實際的數來做推導。
在上面的式子中,,同時表示兩個向量的外積運算。如果上面講的你跟不上也不用擔心,我跳過了一些步驟,你可以自己嘗試計算這些導數(這是一個很好的鍛煉!)。我想從上面式子中得到的是的計算僅僅依賴于當前時間點的數值。如果你掌握著這些,計算誤差關于V的導數就僅僅是一個簡單的矩陣乘法。
但是對于(和U)的情況卻是不同的。我們列出鏈式法則來一探究竟,與上面類似:
現在應該注意到的是依賴于,而又依賴于W和,以此類推。如果我們計算關于W的導數我們不能簡單地將視為常量!我們需要再次使用鏈式法則,我們最終獲得的表達式為:
我們將每個時間點對梯度的貢獻求和。話句話說,由于在到達我們所關心的輸出的過程中的每一步計算中都用了W,我們需要從t=3開始在網絡中的每一個路徑反向傳播梯度直到t=0。
注意到這和我們在深度前向神經網絡中使用的標準反向傳播算法是一樣的。最主要的區別在于我們計算了關于W每個時間點上的梯度并將它們求和。傳統神經網絡中我們不會在層間分享參數,所以也不用做任何求和。但是在我看來BPTT不過是標準反向傳播在沒展開的RNN的一個有趣的名字。類似反向傳播你可以定義一個向后傳播的δ矢量,例如:,這里。然后應用相同的方程式。
一個簡單的BPTT實現類似于下面的代碼:
翻譯結束,原文后續部分探討梯度消失。
推到一下上面的公式:
部分參考;
http://blog.sina.cn/dpool/blog/s/blog_6e32babb0102y3u7.html
總結
以上是生活随笔為你收集整理的RNN训练算法BPTT介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑白屏了怎么办?
- 下一篇: 换点新意,iPhone拨号盘改方形