1.5 不同类型的循环网络-深度学习第五课《序列模型》-Stanford吴恩达教授
| 1.4 通過時間的方向傳播 | 回到目錄 | 1.6 語言模型和序列生成 |
不同類型的循環網絡 (Different types of RNNs)
現在你已經了解了一種RNN結構,它的輸入量 TxT_xTx? 等于輸出數量 TyT_yTy? 。事實上,對于其他一些應用, TxT_xTx? 和 TyT_yTy? 并不一定相等。在這個視頻里,你會看到更多的RNN的結構。
你應該還記得這周第一個視頻中的那個幻燈片,那里有很多例子輸入 xxx 和輸出 yyy ,有各種類型,并不是所有的情況都滿足 Tx=TyT_x=T_yTx?=Ty? 。
比如音樂生成這個例子, TxT_xTx? 可以是長度為1甚至為空集。再比如電影情感分類,輸出 yyy 可以是1到5的整數,而輸入是一個序列。在命名實體識別中,這個例子中輸入長度和輸出長度是一樣的。
還有一些情況,輸入長度和輸出長度不同,他們都是序列但長度不同,比如機器翻譯,一個法語句子和一個英語句子不同數量的單詞卻能表達同一個意思。
所以我們應該修改基本的RNN結構來處理這些問題,這個視頻的內容參考了Andrej Karpathy的博客,一篇叫做《循環神經網絡的非理性效果》(“The Unreasonable Effectiveness of Recurrent Neural Networks”)的文章,我們看一些例子。
你已經見過 Tx=TyT_x=T_yTx?=Ty? 的例子了(下圖編號1所示),也就是我們輸入序列 x<1>,x<2>x^{<1>},x^{<2>}x<1>,x<2> ,一直到 x<Tx>x^{<T_x>}x<Tx?> ,我們的循環神經網絡這樣工作,輸入 x<1>x^{<1>}x<1> 來計算 y^<1>,y^<2>\hat{y}^{<1>},\hat{y}^{<2>}y^?<1>,y^?<2> 等等一直到 y^<Tx>\hat{y}^{<T_x>}y^?<Tx?> 。在原先的圖里,我會畫一串圓圈表示神經元,大部分時候為了讓符號更加簡單,此處就以簡單的小圈表示。這個就叫做“多對多”(many-to-many)的結構,因為輸入序列有很多的輸入,而輸出序列也有很多輸出。
現在我們看另外一個例子,假如說,你想處理情感分類問題(下圖編號2所示),這里 xxx 可能是一段文本,比如一個電影的評論,“These is nothing to like in this movie.”(“這部電影沒什么還看的。”),所以 xxx 就是一個序列,而 yyy 可能是從1到5的一個數字,或者是0或1,這代表正面評價和負面評價,而數字1到5代表電影是1星,2星,3星,4星還是5星。所以在這個例子中,我們可以簡化神經網絡的結構,輸入 x<1>,x<2>x^{<1>},x^{<2>}x<1>,x<2> ,一次輸入一個單詞,如果輸入文本是“These is nothing to like in this movie”,那么單詞的對應如下圖編號2所示。我們不再在每個時間上都有輸出了,而是讓這個RNN網絡讀入整個句子,然后在最后一個時間上得到輸出,這樣輸入的就是整個句子,所以這個神經網絡叫做“多對一”(many-to-one)結構,因為它有很多輸入,很多的單詞,然后輸出一個數字。
為了完整性,還要補充一個“一對一”(one-to-one)的結構(上圖編號3所示),這個可能沒有那么重要,這就是一個小型的標準的神經網絡,輸入 xxx 然后得到輸出 yyy ,我們這個系列課程的前兩個課程已經討論過這種類型的神經網絡了。
除了“多對一”的結構,也可以有“一對多”(one-to-many)的結構。對于一個“一對多”神經網絡結構的例子就是音樂生成(上圖編號1所示),事實上,你會在這個課后編程練習中去實現這樣的模型,你的目標是使用一個神經網絡輸出一些音符。對應于一段音樂,輸入 xxx 可以是一個整數,表示你想要的音樂類型或者是你想要的音樂的第一個音符,并且如果你什么都不想輸入, xxx 可以是空的輸入,可設為0向量。
這樣這個神經網絡的結構,首先是你的輸入 xxx ,然后得到RNN的輸出,第一個值,然后就沒有輸入了,再得到第二個輸出,接著輸出第三個值等等,一直到合成這個音樂作品的最后一個音符,這里也可以寫上輸入 a<0>a^{<0>}a<0> (上圖編號3所示)。有一個后面才會講到的技術細節,當你生成序列時通常會把第一個合成的輸出也喂給下一層(上圖編號4所示),所以實際的網絡結構最終就像這個樣子。
我們已經討論了“多對多”、“多對一”、“一對一”和“一對多”的結構,對于“多對多”的結構還有一個有趣的例子值得詳細說一下,就是輸入和輸出長度不同的情況。你剛才看過的多對多的例子,它的輸入長度和輸出長度是完全一樣的。而對于像機器翻譯這樣的應用,輸入句子的單詞的數量,比如說一個法語的句子,和輸出句子的單詞數量,比如翻譯成英語,這兩個句子的長度可能不同,所以還需要一個新的網絡結構,一個不同的神經網絡(上圖編號2所示)。首先讀入這個句子,讀入這個輸入,比如你要將法語翻譯成英語,讀完之后,這個網絡就會輸出翻譯結果。有了這種結構 TxT_xTx? 和 TyT_yTy? 就可以是不同的長度了。同樣,你也可以畫上這個 a<0>a^{<0>}a<0> 。這個網絡的結構有兩個不同的部分,這(上圖編號5所示)是一個編碼器,獲取輸入,比如法語句子,這(上圖編號6所示)是解碼器,它會讀取整個句子,然后輸出翻譯成其他語言的結果。
這就是一個“多對多”結構的例子,到這周結束的時候,你就能對這些各種各樣結構的基本構件有一個很好的理解。嚴格來說,還有一種結構,我們會在第四周涉及到,就是“注意力”(attention based)結構,但是根據我們現在畫的這些圖不好理解這個模型。
總結一下這些各種各樣的RNN結構,這(上圖編號1所示)是“一對一”的結構,當去掉 a<0>a^{<0>}a<0> 時它就是一種標準類型的神經網絡。還有一種“一對多”的結構(上圖編號2所示),比如音樂生成或者序列生成。還有“多對一”,這(上圖編號3所示)是情感分類的例子,首先讀取輸入,一個電影評論的文本,然后判斷他們是否喜歡電影還是不喜歡。還有“多對多”的結構(上圖編號4所示),命名實體識別就是“多對多”的例子,其中 Tx=TyT_x=T_yTx?=Ty? 。最后還有一種“多對多”結構的其他版本(上圖編號5所示),對于像機器翻譯這樣的應用, TxT_xTx? 和 TyT_yTy? 就可以不同了。
現在,你已經了解了大部分基本的模塊,這些就是差不多所有的神經網絡了,除了序列生成,有些細節的問題我們會在下節課講解。
我希望你從本視頻中了解到用這些RNN的基本模塊,把它們組合在一起就可以構建各種各樣的模型。但是正如我前面提到的,序列生成還有一些不一樣的地方,在這周的練習里,你也會實現它,你需要構建一個語言模型,結果好的話會得到一些有趣的序列或者有意思的文本。下節課深入探討序列生成。
課程板書
| 1.4 通過時間的方向傳播 | 回到目錄 | 1.6 語言模型和序列生成 |
總結
以上是生活随笔為你收集整理的1.5 不同类型的循环网络-深度学习第五课《序列模型》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.4 通过时间的反向传播-深度学习第五
- 下一篇: 1.6 语言模型和序列生成-深度学习第五