1.11 双向循环神经网络-深度学习第五课《序列模型》-Stanford吴恩达教授
| 1.10 長短期機器 (LSTM) | 回到目錄 | 1.12 深層循環神經網絡 |
雙向循環神經網絡 (Bidirectional RNN)
現在,你已經了解了大部分RNN模型的關鍵的構件,還有兩個方法可以讓你構建更好的模型,其中之一就是雙向RNN模型,這個模型可以讓你在序列的某點處不僅可以獲取之前的信息,還可以獲取未來的信息,我們會在這個視頻里講解。第二個就是深層的RNN,我們會在下個視頻里見到,現在先從雙向RNN開始吧。
為了了解雙向RNN的動機,我們先看一下之前在命名實體識別中已經見過多次的神經網絡。這個網絡有一個問題,在判斷第三個詞Teddy(上圖編號1所示)是不是人名的一部分時,光看句子前面部分是不夠的,為了判斷 y^<3>\hat{y}^{<3>}y^?<3> (上圖編號2所示)是0還是1,除了前3個單詞,你還需要更多的信息,因為根據前3個單詞無法判斷他們說的是Teddy熊,還是前美國總統Teddy Roosevelt,所以這是一個非雙向的或者說只有前向的RNN。我剛才所說的總是成立的,不管這些單元(上圖編號3所示)是標準的RNN塊,還是GRU單元或者是LSTM單元,只要這些構件都是只有前向的。
那么一個雙向的RNN是如何解決這個問題的?下面解釋雙向RNN的工作原理。為了簡單,我們用四個輸入或者說一個只有4個單詞的句子,這樣輸入只有4個, x<1>x^{<1>}x<1> 到 x<4>x^{<4>}x<4> 。從這里開始的這個網絡會有一個前向的循環單元叫做 a→<1>,a→<2>,a→<3>\overrightarrow{a}^{<1>},\overrightarrow{a}^{<2>},\overrightarrow{a}^{<3>}a<1>,a<2>,a<3> 還有 a→<4>\overrightarrow{a}^{<4>}a<4> ,我在這上面加個向右的箭頭來表示前向的循環單元,并且他們這樣連接(下圖編號1所示)。這四個循環單元都有一個當前輸入 xxx 輸入進去,得到預測的 y^<1>,y^<2>,y^<3>\hat{y}^{<1>},\hat{y}^{<2>},\hat{y}^{<3>}y^?<1>,y^?<2>,y^?<3> 和 y^<4>\hat{y}^{<4>}y^?<4> 。
到目前為止,我還沒做什么,僅僅是把前面幻燈片里的RNN畫在了這里,只是在這些地方畫上了箭頭。我之所以在這些地方畫上了箭頭是因為我們想要增加一個反向循環層,這里有個 a←<1>\overleftarrow{a}^{<1>}a<1> ,左箭頭代表反向連接, a←<2>\overleftarrow{a}^{<2>}a<2> 反向連接, a←<3>\overleftarrow{a}^{<3>}a<3> 反向連接, a←<4>\overleftarrow{a}^{<4>}a<4> 反向連接,所以這里的左箭頭代表反向連接。
同樣,我們把網絡這樣向上連接,這個反向連接就依次反向向前連接(上圖編號2所示)。這樣,這個網絡就構成了一個無環圖。給定一個輸入序列 x<1>x^{<1>}x<1> 到 x<4>x^{<4>}x<4> ,這個序列首先計算前向的 a→<1>\overrightarrow{a}^{<1>}a<1> ,然后計算前向的 a→<2>\overrightarrow{a}^{<2>}a<2> ,接著 a→<3>,a→<4>\overrightarrow{a}^{<3>},\overrightarrow{a}^{<4>}a<3>,a<4> 。而反向序列從計算 a←<4>\overleftarrow{a}^{<4>}a<4> 開始,反向進行,計算反向的a←<3>\overleftarrow{a}^{<3>}a<3>。你計算的是網絡激活值,這不是反向而是前向的傳播,而圖中這個前向傳播一部分計算是從左到右,一部分計算是從右到左。計算完了反向的 a←<3>\overleftarrow{a}^{<3>}a<3> ,可以用這些激活值計算反向的 a←<2>\overleftarrow{a}^{<2>}a<2> ,然后是反向的 a←<1>\overleftarrow{a}^{<1>}a<1> ,把所有這些激活值都計算完了就可以計算預測結果了。
舉個例子,為了預測結果,你的網絡會有如 y^<t>\hat{y}^{<t>}y^?<t> , y^<t>=g(Wg[a→<1>,a←<1>]+by)\hat{y}^{<t>}=g(W_g[\overrightarrow{a}^{<1>},\overleftarrow{a}^{<1>}] +b_y)y^?<t>=g(Wg?[a<1>,a<1>]+by?) (上圖編號1所示)。比如你要觀察時間3這里的預測結果,信息從 x<1>x^{<1>}x<1> 過來,流經這里,前向的 a←<1>\overleftarrow{a}^{<1>}a<1> 到前向的 a→<2>\overrightarrow{a}^{<2>}a<2> ,這些函數里都有表達,到前向的 a→<3>\overrightarrow{a}^{<3>}a<3> 再到 y^<3>\hat{y}^{<3>}y^?<3> (上圖編號2所示的路徑),所以從 x<1>,x<2>,x<3>x^{<1>},x^{<2>},x^{<3>}x<1>,x<2>,x<3> 來的信息都會考慮在內,而從 x<4>x^{<4>}x<4> 來的信息會流過反向的 a←<4>\overleftarrow{a}^{<4>}a<4> ,到反向的 a←<3>\overleftarrow{a}^{<3>}a<3> 再到 y^<3>\hat{y}^{<3>}y^?<3> (上圖編號3所示的路徑)。這樣使得時間3的預測結果不僅輸入了過去的信息,還有現在的信息,這一步涉及了前向和反向的傳播信息以及未來的信息。給定一個句子"He said Teddy Roosevelt…"來預測Teddy是不是人名的一部分,你需要同時考慮過去和未來的信息。
這就是雙向循環神經網絡,并且這些基本單元不僅僅是標準RNN單元,也可以是GRU單元或者LSTM單元。事實上,很多的NLP問題,對于大量有自然語言處理問題的文本,有LSTM單元的雙向RNN模型是用的最多的。所以如果有NLP問題,并且文本句子都是完整的,首先需要標定這些句子,一個有LSTM單元的雙向RNN模型,有前向和反向過程是一個不錯的首選。
以上就是雙向RNN的內容,這個改進的方法不僅能用于基本的RNN結構,也能用于GRU和LSTM。通過這些改變,你就可以用一個用RNN或GRU或LSTM構建的模型,并且能夠預測任意位置,即使在句子的中間,因為模型能夠考慮整個句子的信息。這個雙向RNN網絡模型的缺點就是你需要完整的數據的序列,你才能預測任意位置。比如說你要構建一個語音識別系統,那么雙向RNN模型需要你考慮整個語音表達,但是如果直接用這個去實現的話,你需要等待這個人說完,然后獲取整個語音表達才能處理這段語音,并進一步做語音識別。對于實際的語音識別的應用通常會有更加復雜的模塊,而不是僅僅用我們見過的標準的雙向RNN模型。但是對于很多自然語言處理的應用,如果你總是可以獲取整個句子,這個標準的雙向RNN算法實際上很高效。
好的,這就是雙向RNN,下一個視頻,也是這周的最后一個,我們會討論如何用這些概念,標準的RNN,LSTM單元,GRU單元,還有雙向的版本,構建更深的網絡。
課程板書
| 1.10 長短期機器 (LSTM) | 回到目錄 | 1.12 深層循環神經網絡 |
總結
以上是生活随笔為你收集整理的1.11 双向循环神经网络-深度学习第五课《序列模型》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.9 GRU 单元-深度学习第五课《序
- 下一篇: 1.12 深层循环神经网络-深度学习第五