本文是吳恩達老師的深度學習課程[1]筆記部分。 做者:黃海廣[2] 主要編寫人員:黃海廣、林興木(第四全部底稿,第五課第一二週,第三週前三節)、祝彥森:(第三課全部底稿)、賀志堯(第五課第三週底稿)、王翔、胡瀚文、 餘笑、 鄭浩、李懷鬆、 朱越鵬、陳偉賀、 曹越、 路皓翔、邱牧宸、 唐天澤、 張浩、 陳志豪、 遊忍、 澤霖、沈偉臣、 賈紅順、 時超、 陳哲、趙一帆、 胡瀟楊、段希、於衝、張鑫倩 參與編輯人員:黃海廣、陳康凱、石晴路、鍾博彥、向偉、嚴鳳龍、劉成 、賀志堯、段希、陳瑤、林家泳、王翔、 謝士晨、蔣鵬 備註:筆記和做業(含數據、原始做業文件)、視頻都在 github[3]中下載。 我將陸續將課程筆記發佈在公衆號「機器學習初學者」,敬請關注。
在本課程中你將學會序列模型,它是深度學習中最使人激動的內容之一。循環神經網絡(RNN)之類的模型在語音識別、天然語言處理和其餘領域中引發變革。在本節課中,你將學會如何自行建立這些模型。咱們先看一些例子,這些例子都有效使用了序列模型。git
在進行語音識別時,給定了一個輸入音頻片斷 X
,並要求輸出對應的文字記錄Y 。這個例子裏輸入和輸出數據都是序列模型,由於X 是一個按時播放的音頻片斷,輸出 Ygithub
是一系列單詞。因此以後將要學到的一些序列模型,如循環神經網絡等等在語音識別方面是很是有用的。算法
音樂生成問題是使用序列數據的另外一個例子,在這個例子中,只有輸出數據 Y
是序列,而輸入數據能夠是空集,也能夠是個單一的整數,這個數可能指代你想要生成的音樂風格,也多是你想要生成的那首曲子的頭幾個音符。輸入的 X能夠是空的,或者就是個數字,而後輸出序列 Y。
在處理情感分類時,輸入數據 X是序列,你會獲得相似這樣的輸入:「There is nothing to like in this movie.」,你認爲這句評論對應幾星?編程
系列模型在DNA序列分析中也十分有用,你的DNA能夠用A、C、G、T四個字母來表示。因此給定一段DNA序列,你可以標記出哪部分是匹配某種蛋白質的嗎?網絡
在機器翻譯過程當中,你會獲得這樣的輸入句:「Voulez-vou chante avecmoi?」(法語:要和我一塊兒唱麼?),而後要求你輸出另外一種語言的翻譯結果。架構
在進行視頻行爲識別時,你可能會獲得一系列視頻幀,而後要求你識別其中的行爲。app
在進行命名實體識別時,可能會給定一個句子要你識別出句中的人名。框架
因此這些問題均可以被稱做使用標籤數據 (X,Y)做爲訓練集的監督學習。但從這一系列例子中你能夠看出序列問題有不少不一樣類型。有些問題裏,輸入數據 X和輸出數據Y都是序列,但就算在那種狀況下,X和Y有時也會不同長。或者像上圖編號1所示和上圖編號2的XY和有相同的數據長度。在另外一些問題裏,只有X 或者只有Yeclipse
是序列。機器學習
因此在本節咱們學到適用於不一樣狀況的序列模型。
下節中咱們會定義一些定義序列問題要用到的符號。
本節先從定義符號開始一步步構建序列模型。
好比說你想要創建一個序列模型,它的輸入語句是這樣的:「Harry Potter and Herminoe Granger invented a new spell.」,(這些人名都是出自於J.K.Rowling筆下的系列小說Harry Potter)。假如你想要創建一個可以自動識別句中人名位置的序列模型,那麼這就是一個命名實體識別問題,這經常使用於搜索引擎,好比說索引過去24小時內全部新聞報道說起的人名,用這種方式就可以恰當地進行索引。命名實體識別系統能夠用來查找不一樣類型的文本中的人名、公司名、時間、地點、國家名和貨幣名等等。
如今給定這樣的輸入數據
,假如你想要一個序列模型輸出,使得輸入的每一個單詞都對應一個輸出值,同時這個
可以代表輸入的單詞是不是人名的一部分。技術上來講這也許不是最好的輸出形式,還有更加複雜的輸出形式,它不只可以代表輸入詞是不是人名的一部分,它還可以告訴你這我的名在這個句子裏從哪裏開始到哪裏結束。好比Harry Potter(上圖編號1所示)、Hermione Granger(上圖標號2所示)。
更簡單的那種輸出形式:
接下來咱們討論一下怎樣表示一個句子裏單個的詞。想要表示一個句子裏的單詞,第一件事是作一張詞表,有時也稱爲詞典,意思是列一列你的表示方法中用到的單詞。這個詞表(下圖所示)中的第一個詞是a,也就是說詞典中的第一個單詞是a,第二個單詞是Aaron,而後更下面一些是單詞and,再後面你會找到Harry,而後找到Potter,這樣一直到最後,詞典裏最後一個單詞多是Zulu。
所以a是第一個單詞,Aaron是第二個單詞,在這個詞典裏,and出如今367這個位置上,Harry是在4075這個位置,Potter在6830,詞典裏的最後一個單詞Zulu多是第10,000個單詞。因此在這個例子中我用了10,000個單詞大小的詞典,這對現代天然語言處理應用來講過小了。對於商業應用來講,或者對於通常規模的商業應用來講30,000到50,000詞大小的詞典比較常見,可是100,000詞的也不是沒有,並且有些大型互聯網公司會用百萬詞,甚至更大的詞典。許多商業應用用的詞典多是30,000詞,也多是50,000詞。不過我將用10,000詞大小的詞典作說明,由於這是一個很好用的整數。
若是你選定了10,000詞的詞典,構建這個詞典的一個方法是遍歷你的訓練集,而且找到前10,000個經常使用詞,你也能夠去瀏覽一些網絡詞典,它能告訴你英語裏最經常使用的10,000個單詞,接下來你能夠用one-hot表示法來表示詞典裏的每一個單詞。
上節視頻中,你瞭解了咱們用來定義序列學習問題的符號。如今咱們討論一下怎樣才能創建一個模型,創建一個神經網絡來學習X
到Y
的映射。
能夠嘗試的方法之一是使用標準神經網絡,在咱們以前的例子中,咱們有9個輸入單詞。想象一下,把這9個輸入單詞,多是9個one-hot向量,而後將它們輸入到一個標準神經網絡中,通過一些隱藏層,最終會輸出9個值爲0或1的項,它代表每一個輸入單詞是不是人名的一部分。
但結果代表這個方法並很差,主要有兩個問題,
時間步中用於計算。
如今爲了幫咱們創建更復雜的神經網絡,我實際要將這個符號簡化一下,我在下一張幻燈片裏複製了這兩個等式(上圖編號1所示的兩個等式)。
好就這麼多,你如今知道了基本的循環神經網絡,下節課咱們會一塊兒來討論反向傳播,以及你如何可以用RNN進行學習。
以前咱們已經學過了循環神經網絡的基礎結構,在本節視頻中咱們未來了解反向傳播是怎樣在循環神經網絡中運行的。和以前同樣,當你在編程框架中實現循環神經網絡時,編程框架一般會自動處理反向傳播。但我認爲,在循環神經網絡中,對反向傳播的運行有一個粗略的認識仍是很是有用的,讓咱們來一探究竟。
在以前你已經見過對於前向傳播(上圖藍色箭頭所指方向)怎樣在神經網絡中從左到右地計算這些激活項,直到輸出全部地預測結果。而對於反向傳播,我想你已經猜到了,反向傳播地計算方向(上圖紅色箭頭所指方向)與前向傳播基本上是相反的。
但願你大體瞭解了前向和反向傳播是如何在RNN中工做的,到目前爲止,你只見到了RNN中一個主要的例子,其中輸入序列的長度和輸出序列的長度是同樣的。在下節課將展現更多的RNN架構,這將讓你可以處理一些更普遍的應用。
還有一些狀況,輸入長度和輸出長度不一樣,他們都是序列但長度不一樣,好比機器翻譯,一個法語句子和一個英語句子不一樣數量的單詞卻能表達同一個意思。
因此咱們應該修改基本的RNN結構來處理這些問題,這個視頻的內容參考了Andrej Karpathy的博客,一篇叫作《循環神經網絡的非理性效果》(「The Unreasonable Effectiveness of Recurrent Neural Networks」)的文章,咱們看一些例子。
爲了完整性,還要補充一個「一對一」(one-to-one)的結構(上圖編號3所示),這個可能沒有那麼重要,這就是一個小型的標準的神經網絡,輸入x而後獲得輸出y,咱們這個系列課程的前兩個課程已經討論過這種類型的神經網絡了。
除了「多對一」的結構,也能夠有「一對多」(one-to-many)的結構。對於一個「一對多」神經網絡結構的例子就是音樂生成(上圖編號1所示),事實上,你會在這個課後編程練習中去實現這樣的模型,你的目標是使用一個神經網絡輸出一些音符。對應於一段音樂,輸入x能夠是一個整數,表示你想要的音樂類型或者是你想要的音樂的第一個音符,而且若是你什麼都不想輸入,x能夠是空的輸入,可設爲0向量。
這樣這個神經網絡的結構,首先是你的輸入x,而後獲得RNN的輸出,第一個值,而後就沒有輸入了,再獲得第二個輸出,接着輸出第三個值等等,一直到合成這個音樂做品的最後一個音符,這裏也能夠寫上輸入
(上圖編號3所示)。有一個後面纔會講到的技術細節,當你生成序列時一般會把第一個合成的輸出也餵給下一層(上圖編號4所示),因此實際的網絡結構最終就像這個樣子。
咱們已經討論了「多對多」、「多對一」、「一對一」和「一對多」的結構,對於「多對多」的結構還有一個有趣的例子值得詳細說一下,就是輸入和輸出長度不一樣的狀況。你剛纔看過的多對多的例子,它的輸入長度和輸出長度是徹底同樣的。而對於像機器翻譯這樣的應用,輸入句子的單詞的數量,好比說一個法語的句子,和輸出句子的單詞數量,好比翻譯成英語,這兩個句子的長度可能不一樣,因此還須要一個新的網絡結構,一個不一樣的神經網絡(上圖編號2所示)。首先讀入這個句子,讀入這個輸入,好比你要將法語翻譯成英語,讀完之
這就是一個「多對多」結構的例子,到這周結束的時候,你就能對這些各類各樣結構的基本構件有一個很好的理解。嚴格來講,還有一種結構,咱們會在第四周涉及到,就是「注意力」(attention based)結構,可是根據咱們如今畫的這些圖很差理解這個模型。
如今,你已經瞭解了大部分基本的模塊,這些就是差很少全部的神經網絡了,除了序列生成,有些細節的問題咱們會在下節課講解。
我但願你從本視頻中瞭解到用這些RNN的基本模塊,把它們組合在一塊兒就能夠構建各類各樣的模型。可是正如我前面提到的,序列生成還有一些不同的地方,在這周的練習裏,你也會實現它,你須要構建一個語言模型,結果好的話會獲得一些有趣的序列或者有意思的文本。下節課深刻探討序列生成。
在天然語言處理中,構建語言模型是最基礎的也是最重要的工做之一,而且能用RNN很好地實現。在本視頻中,你將學習用RNN構建一個語言模型,在本週結束的時候,還會有一個頗有趣的編程練習,你能在練習中構建一個語言模型,並用它來生成莎士比亞文風的文本或其餘類型文本。
因此什麼是語言模型呢?好比你在作一個語音識別系統,你聽到一個句子,「the apple and pear(pair) salad was delicious.」,因此我究竟說了什麼?我說的是 「the apple and pair salad」,仍是「the apple and pear salad」?(pear和pair是近音詞)。你可能以爲我說的應該更像第二種,事實上,這就是一個好的語音識別系統要幫助輸出的東西,即便這兩句話聽起來是如此類似。而讓語音識別系統去選擇第二個句子的方法就是使用一個語言模型,他能計算出這兩句話各自的可能性。
舉個例子,一個語音識別模型可能算出第一句話的機率是,
如今還有一個問題若是你的訓練集中有一些詞並不在你的字典裏,好比說你的字典有10,000個詞,10,000個最經常使用的英語單詞。如今這個句,「The Egyptian Mau is a bread of cat.」其中有一個詞Mau,它可能並非預先的那10,000個最經常使用的單詞,在這種狀況下,你能夠把Mau替換成一個叫作UNK的表明未知詞的標誌,咱們只針對UNK創建機率模型,而不是針對這個具體的詞Mau。
而後再到下一個時間步,不管你獲得什麼樣的用one-hot碼錶示的選擇結果,都把它傳遞到下一個時間步,而後對第三個詞進行採樣。無論獲得什麼都把它傳遞下去,一直這樣直到最後一個時間步。
那麼你要怎樣知道一個句子結束了呢?方法之一就是,若是表明句子結尾的標識在你的字典中,你能夠一直進行採樣直到獲得EOS標識(上圖編號6所示),這表明着已經抵達結尾,能夠中止採樣了。另外一種狀況是,若是你的字典中沒有這個詞,你能夠決定從20個或100個或其餘個單詞進行採樣,而後一直將採樣進行下去直到達到所設定的時間步。不過這種過程有時候會產生一些未知標識(上圖編號7所示),若是你要確保你的算法不會輸出這種標識,你能作的一件事就是拒絕採樣過程當中產生任何未知的標識,一旦出現就繼續在剩下的詞中進行重採樣,直到獲得一個不是未知標識的詞。若是你不介意有未知標識產生的話,你也能夠徹底無論它們。
這就是你如何從你的RNN語言模型中生成一個隨機選擇的句子。直到如今咱們所創建的是基於詞彙的RNN模型,意思就是字典中的詞都是英語單詞(下圖編號1所示)。
根據你實際的應用,你還能夠構建一個基於字符的RNN結構,在這種狀況下,你的字典僅包含從a到z的字母,可能還會有空格符,若是你須要的話,還能夠有數字0到9,若是你想區分字母大小寫,你能夠再加上大寫的字母,你還能夠實際地看一看訓練集中可能會出現的字符,而後用這些字符組成你的字典(上圖編號2所示)。
使用基於字符的語言模型有有點也有缺點,優勢就是你沒必要擔憂會出現未知的標識,例如基於字符的語言模型會將Mau這樣的序列也視爲可能性非零的序列。而對於基於詞彙的語言模型,若是Mau不在字典中,你只能把它看成未知標識UNK。不過基於字符的語言模型一個主要缺點就是你最後會獲得太多太長的序列,大多數英語句子只有10到20個的單詞,但卻可能包含不少不少字符。因此基於字符的語言模型在捕捉句子中的依賴關係也就是句子較前部分如何影響較後部分不如基於詞彙的語言模型那樣能夠捕捉長範圍的關係,而且基於字符的語言模型訓練起來計算成本比較高昂。因此我見到的天然語言處理的趨勢就是,絕大多數都是使用基於詞彙的語言模型,但隨着計算機性能愈來愈高,會有更多的應用。在一些特殊狀況下,會開始使用基於字符的模型。可是這確實須要更昂貴的計算力來訓練,因此如今並無獲得普遍地使用,除了一些比較專門須要處理大量未知的文本或者未知詞彙的應用,還有一些要面對不少專有詞彙的應用。
在現有的方法下,如今你能夠構建一個RNN結構,看一看英文文本的語料庫,而後創建一個基於詞彙的或者基於字符的語言模型,而後從訓練的語言模型中進行採樣。
這裏有一些樣本,它們是從一個語言模型中採樣獲得的,準確來講是基於字符的語言模型,你能夠在編程練習中本身實現這樣的模型。若是模型是用新聞文章訓練的,它就會生成左邊這樣的文本,這有點像一篇不太合乎語法的新聞文本,不過聽起來,這句「Concussion epidemic」,to be examined,確實有點像新聞報道。用莎士比亞的文章訓練後生成了右邊這篇東西,聽起來很像是莎士比亞寫的東西:
「The mortal moon hath her eclipse in love.
And subject of this thou art another this fold.
When besser be my love to me see sabl's.
For whose are ruse of mine eyes heaves.」
這些就是基礎的RNN結構和如何去創建一個語言模型並使用它,對於訓練出的語言模型進行採樣。在以後的視頻中,我想探討在訓練RNN時一些更加深刻的挑戰以及如何適應這些挑戰,特別是梯度消失問題來創建更增強大的RNN模型。下節課,咱們將談到梯度消失而且會開始談到GRU,也就是門控循環單元和LSTM長期記憶網絡模型。
你已經瞭解了RNN時如何工做的了,而且知道如何應用到具體問題上,好比命名實體識別,好比語言模型,你也看到了怎麼把反向傳播用於RNN。其實,基本的RNN算法還有一個很大的問題,就是梯度消失的問題。這節課咱們會討論,在下幾節課咱們會討論一些方法用來解決這個問題。
你已經知道了RNN的樣子,如今咱們舉個語言模型的例子,假如看到這個句子(上圖編號1所示),「The cat, which already ate ……, was full.」,先後應該保持一致,由於cat是單數,因此應該用was。「The cats, which ate ……, were full.」(上圖編號2所示),cats是複數,因此用were。這個例子中的句子有長期的依賴,最前面的單詞對句子後面的單詞有影響。可是咱們目前見到的基本的RNN模型(上圖編號3所示的網絡模型),不擅長捕獲這種長期依賴效應,解釋一下爲何。
你應該還記得以前討論的訓練很深的網絡,咱們討論了梯度消失的問題。好比說一個很深很深的網絡(上圖編號4所示),100層,甚至更深,對這個網絡從左到右作前向傳播而後再反向傳播。咱們知道若是這是個很深的神經網絡,從輸出
獲得的梯度很難傳播回去,很難影響靠前層的權重,很難影響前面層(編號5所示的層)的計算。
對於有一樣問題的RNN,首先從左到右前向傳播,而後反向傳播。可是反向傳播會很困難,由於一樣的梯度消失的問題,後面層的輸出偏差(上圖編號6所示)很難影響前面層(上圖編號7所示的層)的計算。這就意味着,實際上很難讓一個神經網絡可以意識到它要記住看到的是單數名詞仍是複數名詞,而後在序列後面生成依賴單複數形式的was或者were。並且在英語裏面,這中間的內容(上圖編號8所示)能夠任意長,對吧?因此你須要長時間記住單詞是單數仍是複數,這樣後面的句子才能用到這些信息。也正是這個緣由,因此基本的RNN模型會有不少局部影響,意味着這個輸出
(上圖編號9所示)主要受
附近的值(上圖編號10所示)的影響,上圖編號11所示的一個數值主要與附近的輸入(上圖編號12所示)有關,上圖編號6所示的輸出,基本上很難受到序列靠前的輸入(上圖編號10所示)的影響,這是由於無論輸出是什麼,無論是對的,仍是錯的,這個區域都很難反向傳播到序列的前面部分,也所以網絡很難調整序列前面的計算。這是基本的RNN算法的一個缺點,咱們會在下幾節視頻裏處理這個問題。若是無論的話,RNN會不擅長處理長期依賴的問題。
儘管咱們一直在討論梯度消失問題,可是,你應該記得咱們在講很深的神經網絡時,咱們也提到了梯度爆炸,咱們在反向傳播的時候,隨着層數的增多,梯度不只可能指數型的降低,也可能指數型的上升。事實上梯度消失在訓練RNN時是首要的問題,儘管梯度爆炸也是會出現,可是梯度爆炸很明顯,由於指數級大的梯度會讓你的參數變得極其大,以致於你的網絡參數崩潰。因此梯度爆炸很容易發現,由於參數會大到崩潰,你會看到不少NaN,或者不是數字的狀況,這意味着你的網絡計算出現了數值溢出。若是你發現了梯度爆炸的問題,一個解決方法就是用梯度修剪。梯度修剪的意思就是觀察你的梯度向量,若是它大於某個閾值,縮放梯度向量,保證它不會太大,這就是經過一些最大值來修剪的方法。因此若是你遇到了梯度爆炸,若是導數值很大,或者出現了NaN,就用梯度修剪,這是相對比較魯棒的,這是梯度爆炸的解決方法。然而梯度消失更難解決,這也是咱們下幾節視頻的主題。
總結一下,在前面的課程,咱們瞭解了訓練很深的神經網絡時,隨着層數的增長,導數有可能指數型的降低或者指數型的增長,咱們可能會遇到梯度消失或者梯度爆炸的問題。加入一個RNN處理1,000個時間序列的數據集或者10,000個時間序列的數據集,這就是一個1,000層或者10,000層的神經網絡,這樣的網絡就會遇到上述類型的問題。梯度爆炸基本上用梯度修剪就能夠應對,但梯度消失比較棘手。咱們下節會介紹GRU,門控循環單元網絡,這個網絡能夠有效地解決梯度消失的問題,而且可以使你的神經網絡捕獲更長的長期依賴,咱們去下個視頻一探究竟吧。
你已經瞭解了基礎的RNN模型的運行機制,在本節視頻中你將會學習門控循環單元,它改變了RNN的隱藏層,使其能夠更好地捕捉深層鏈接,並改善了梯度消失問題,讓咱們看一看。
讓我再畫個圖來(下圖所示)解釋一下GRU單元,順便說一下,當你在看網絡上的博客或者教科書或者教程之類的,這些圖對於解釋GRU和咱們稍後會講的LSTM是至關流行的,我我的感受式子在圖片中比較容易理解,那麼即便看不懂圖片也不要緊,我就畫畫,萬一能幫得上忙就最好了。
(Chung J, Gulcehre C, Cho K H, et al. Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling[J]. Eprint Arxiv, 2014.
Cho K, Merrienboer B V, Bahdanau D, et al. On the Properties of Neural Machine Translation: Encoder-Decoder Approaches[J]. Computer Science, 2014.)
在上一個視頻中你已經學了GRU(門控循環單元)。它可以讓你能夠在序列中學習很是深的鏈接。其餘類型的單元也可讓你作到這個,好比LSTM即長短時記憶網絡,甚至比GRU更加有效,讓咱們看看。
LSTM反向傳播計算:
門求偏導:
這就是LSTM,咱們何時應該用GRU?何時用LSTM?這裏沒有統一的準則。並且即便我先講解了GRU,在深度學習的歷史上,LSTM也是更早出現的,而GRU是最近才發明出來的,它可能源於Pavia在更加複雜的LSTM模型中作出的簡化。研究者們在不少不一樣問題上嘗試了這兩種模型,看看在不一樣的問題不一樣的算法中哪一個模型更好,因此這不是個學術和高深的算法,我纔想要把這兩個模型展現給你。
GRU的優勢是這是個更加簡單的模型,因此更容易建立一個更大的網絡,並且它只有兩個門,在計算性上也運行得更快,而後它能夠擴大模型的規模。
可是LSTM更增強大和靈活,由於它有三個門而不是兩個。若是你想選一個使用,我認爲LSTM在歷史進程上是個更優先的選擇,因此若是你必須選一個,我感受今天大部分的人仍是會把LSTM做爲默認的選擇來嘗試。雖然我認爲最近幾年GRU得到了不少支持,並且我感受愈來愈多的團隊也正在使用GRU,由於它更加簡單,並且還效果還不錯,它更容易適應規模更加大的問題。LSTM更增強大和靈活,由於它有三個門而不是兩個。若是你想選一個使用,我認爲LSTM在歷史進程上是個更優先的選擇,因此若是你必須選一個,我感受今天大部分的人仍是會把LSTM做爲默認的選擇來嘗試。雖然我認爲最近幾年GRU得到了不少支持,並且我感受愈來愈多的團隊也正在使用GRU,由於它更加簡單,並且還效果還不錯,它更容易適應規模更加大的問題。
因此這就是LSTM,不管是GRU仍是LSTM,你均可以用它們來構建捕獲更加深層鏈接的神經網絡。
(Hochreiter S, Schmidhuber J. Long Short-Term Memory[J]. Neural Computation, 1997, 9(8):1735-1780.)
如今,你已經瞭解了大部分RNN模型的關鍵的構件,還有兩個方法可讓你構建更好的模型,其中之一就是雙向RNN模型,這個模型可讓你在序列的某點處不只能夠獲取以前的信息,還能夠獲取將來的信息,咱們會在這個視頻裏講解。第二個就是深層的RNN,咱們會在下個視頻裏見到,如今先從雙向RNN開始吧。
這就是雙向循環神經網絡,而且這些基本單元不只僅是標準RNN單元,也能夠是GRU單元或者LSTM單元。事實上,不少的NLP問題,對於大量有天然語言處理問題的文本,有LSTM單元的雙向RNN模型是用的最多的。因此若是有NLP問題,而且文本句子都是完整的,首先須要標定這些句子,一個有LSTM單元的雙向RNN模型,有前向和反向過程是一個不錯的首選。
以上就是雙向RNN的內容,這個改進的方法不只能用於基本的RNN結構,也能用於GRU和LSTM。經過這些改變,你就能夠用一個用RNN或GRU或LSTM構建的模型,而且可以預測任意位置,即便在句子的中間,由於模型可以考慮整個句子的信息。這個雙向RNN網絡模型的缺點就是你須要完整的數據的序列,你才能預測任意位置。好比說你要構建一個語音識別系統,那麼雙向RNN模型須要你考慮整個語音表達,可是若是直接用這個去實現的話,你須要等待這我的說完,而後獲取整個語音表達才能處理這段語音,並進一步作語音識別。對於實際的語音識別的應用一般會有更加複雜的模塊,而不是僅僅用咱們見過的標準的雙向RNN模型。可是對於不少天然語言處理的應用,若是你老是能夠獲取整個句子,這個標準的雙向RNN算法實際上很高效。
好的,這就是雙向RNN,下一個視頻,也是這周的最後一個,咱們會討論如何用這些概念,標準的RNN,LSTM單元,GRU單元,還有雙向的版本,構建更深的網絡。
目前你學到的不一樣RNN的版本,每個均可以獨當一面。可是要學習很是複雜的函數,一般咱們會把RNN的多個層堆疊在一塊兒構建更深的模型。這節視頻裏咱們會學到如何構建這些更深的RNN。