BAT1000題精選 | RNN是怎麼從單層網路一步步構造的

從單層網路談起

在學習RNN之前,首先要了解一下最基本的單層網路,它的結構如圖:

輸入是x,經過變換Wx+b和激活函數f得到輸出y。相信大家對這個已經非常熟悉了。

經典的RNN結構(N vs N)

在實際應用中,我們還會遇到很多序列形的數據:

如:

  • 自然語言處理問題。x1可以看做是第一個單詞,x2可以看做是第二個單詞,依次類推。
  • 語音處理。此時,x1、x2、x3……是每幀的聲音信號。
  • 時間序列問題。例如每天的股票價格等等。

序列形的數據就不太好用原始的神經網路處理了。為了建模序列問題,RNN引入了隱狀態h(hidden state)的概念,h可以對序列形的數據提取特徵,接著再轉換為輸出。先從h1的計算開始看:

圖示中記號的含義是:

  • 圓圈或方塊表示的是向量。
  • 一個箭頭就表示對該向量做一次變換。如上圖中h0和x1分別有一個箭頭連接,就表示對h0和x1各做了一次變換。

在很多論文中也會出現類似的記號,初學的時候很容易搞亂,但只要把握住以上兩點,就可以比較輕鬆地理解圖示背後的含義。

h2的計算和h1類似。要注意的是,在計算時,每一步使用的參數U、W、b都是一樣的,也就是說每個步驟的參數都是共享的,這是RNN的重要特點,一定要牢記。

依次計算剩下來的(使用相同的參數U、W、b):

我們這裡為了方便起見,只畫出序列長度為4的情況,實際上,這個計算過程可以無限地持續下去。

我們目前的RNN還沒有輸出,得到輸出值的方法就是直接通過h進行計算:

正如之前所說,一個箭頭就表示對對應的向量做一次類似於f(Wx+b)的變換,這裡的這個箭頭就表示對h1進行一次變換,得到輸出y1。

剩下的輸出類似進行(使用和y1同樣的參數V和c):

OK!大功告成!這就是最經典的RNN結構,我們像搭積木一樣把它搭好了。它的輸入是x1, x2, .....xn,輸出為y1, y2, ...yn,也就是說,輸入和輸出序列必須要是等長的。

由於這個限制的存在,經典RNN的適用範圍比較小,但也有一些問題適合用經典的RNN結構建模,如:

  • 計算視頻中每一幀的分類標籤。因為要對每一幀進行計算,因此輸入和輸出序列等長。
  • 輸入為字元,輸出為下一個字元的概率。這就是著名的Char RNN(詳細介紹請參考:The Unreasonable Effectiveness of Recurrent Neural Networks,Char RNN可以用來生成文章、詩歌,甚至是代碼。此篇博客里有自動生成歌詞的實驗教程《基於torch學汪峰寫歌詞、聊天機器人、圖像著色/生成、看圖說話、字幕生成》blog.csdn.net/v_july_v/)。

N VS 1

有的時候,我們要處理的問題輸入是一個序列,輸出是一個單獨的值而不是序列,應該怎樣建模呢?實際上,我們只在最後一個h上進行輸出變換就可以了:

這種結構通常用來處理序列分類問題。如輸入一段文字判別它所屬的類別,輸入一個句子判斷其情感傾向,輸入一段視頻並判斷它的類別等等。

1 VS N

輸入不是序列而輸出為序列的情況怎麼處理?我們可以只在序列開始進行輸入計算:

還有一種結構是把輸入信息X作為每個階段的輸入:

下圖省略了一些X的圓圈,是一個等價表示:

這種1 VS N的結構可以處理的問題有:

  • 從圖像生成文字(image caption),此時輸入的X就是圖像的特徵,而輸出的y序列就是一段句子
  • 從類別生成語音或音樂等

N vs M

下面我們來介紹RNN最重要的一個變種:N vs M。這種結構又叫Encoder-Decoder模型,也可以稱之為Seq2Seq模型。

原始的N vs N RNN要求序列等長,然而我們遇到的大部分問題序列都是不等長的,如機器翻譯中,源語言和目標語言的句子往往並沒有相同的長度。

為此,Encoder-Decoder結構先將輸入數據編碼成一個上下文向量c:

得到c有多種方式,最簡單的方法就是把Encoder的最後一個隱狀態賦值給c,還可以對最後的隱狀態做一個變換得到c,也可以對所有的隱狀態做變換。

拿到c之後,就用另一個RNN網路對其進行解碼,這部分RNN網路被稱為Decoder。具體做法就是將c當做之前的初始狀態h0輸入到Decoder中:

還有一種做法是將c當做每一步的輸入:

由於這種Encoder-Decoder結構不限制輸入和輸出的序列長度,因此應用的範圍非常廣泛,比如:

  • 機器翻譯。Encoder-Decoder的最經典應用,事實上這一結構就是在機器翻譯領域最先提出的
  • 文本摘要。輸入是一段文本序列,輸出是這段文本序列的摘要序列。
  • 閱讀理解。將輸入的文章和問題分別編碼,再對其進行解碼得到問題的答案。
  • 語音識別。輸入是語音信號序列,輸出是文字序列。

推薦閱讀:

導師讓做一個語音識別的系統,詳細步驟是什麼?
AI(I)語音(I):MFCC特徵參數提取
政府監控私人電話,記錄的主要是哪些信息?
準備學習研究一下語音識別 請問有哪些值得推薦的書籍 論文 及開源庫?

TAG:RNN | 机器翻译 | 语音识别 |