RNN Part1-RNN介紹
本篇翻譯自WILDML
RNN介紹
RNN的基本想法是如何採用序列信息。在傳統神經網路中我們假設所有的輸入和輸出都是相互獨立的,但對於很多任務這樣的假設並不合適。如果你想預測一個句子的下一個單詞,的則需要知道之前的words包括哪些。
RNN被稱為循環因為它們對句子的每個元素都執行相同的任務,輸出依賴於之前的計算;另一個理解RNN的方法是假設他們用記憶能夠獲取之前計算過的信息。理論上RNN能夠利用任意長的句子,但是實踐中通常會回溯固定長度。
上圖顯示了一個RNN被展開(或展開)成一個完整的網路。 通過展開,我們指的是我們寫出完整序列的網路。 例如,如果我們關心的序列是5個單詞的句子,網路將被展開成5層神經網路,每個單詞一層。 管理在RNN中發生的計算的公式如下:
- 是在時刻t的輸入,例如 是一個one-hot vector對應整個句子的第二個word
- 是在時刻t的隱藏狀態,是網路的memory, 計算如下所示: 函數f通常是非線性的例如tanh或者ReLU
- 是時刻的輸出,例如我們希望預測一個句子的下一個單詞,則輸出希望是我們字典中所有詞的概率組成的向量
需要說明的是
- 可以將隱藏狀態 看作網路的memory,獲取到了之前時刻中發生的信息,輸出僅僅採用時刻t的memory來進行計算。正如之前所說,由於在實踐中只能獲取到一段時間內的信息,因此情況略複雜
- 傳統的神經網路在每一層採用不同的參數,而RNN在所有步中採用共同的參數(U,V,W),這表示我們在每一步執行相同的任務,僅僅是輸入不同而已。這樣會縮減需要學習的參數數量
- 上圖在每一步都輸出,這並不是絕對必要的,需要針對不同任務進行設計。例如,在預測一個句子的情緒的時候,我們只關心最後的輸出,而不是每個word之後的情緒值。相似的,我們並不需要在每個時刻都有輸入。RNN的主要feature是隱藏狀態,能夠獲取一個句子的信息
Different types of RNNs
我們來舉例一些RNN的應用以及對應的sequence data。
上圖包括:
- Speech recognition
- Music generation
- Sentiment Classification
- DNA Sequence analysis
- Machine Translation
- Video activity recognition
- Named Entity Recognition
顯然輸入和輸出可能是類似的序列,也可能是完全不同的內容,我們可以將其分為以下幾種:
- One to One 傳統NN
- One to Many 例如Music/Text Generation
- Many to One 例如Sentiment Classification 情感分析
- Many to Many 輸入與輸出序列大小相同 例如Named Entity Recognition
- Many to Many 輸入與輸出序列大小不同 例如Machine Translation
Training RNNs
訓練RNN與訓練傳統神經網路類似,採用反向傳播演算法,但是有一些不同。因為RNN的參數是由所有時間步共同使用的,因此每次輸入的梯度不僅僅依賴於當前步的計算,並且依賴於之前的時間步的數據,例如需要計算 時刻的梯度,我們需要反向傳播3步然後將所有的梯度累加。這稱為Backpropation Through Time(BPTT),在RNN Part 3-Back Propagation Through Time and Vanishing Gradients(BPTT演算法和梯度消失) 中我們對BPTT進行了詳細介紹。這裡需要知道的是由於vanishing/exploding gradient problem導致普通RNN採用BPTT很難學習到long-term dependencies。
例如下面的這句話:
The cat, which already ate ..., was full.The cats, which already ate ..., were full.
這裡的was/were的選擇實際上是由之前的cat/cats來決定的,但是普通RNN中,cat這裡距離後面句子太遠,因此難以學到這個內容。
為了解決這個問題,存在其他類型的採用Gated機制的神經網路,例如GRU、LSTM等被提出來解決這個問題。
推薦閱讀:
※譯文:如何使用TensorFlow實現神經網路(上)
※《麻省理工科技評論》全球十大突破性技術,阿里巴巴正研究其中4項
※Michael Nielsen對交叉熵的解釋(三)
※谷歌大腦發布神經架構搜索新方法:提速1000倍
※ML + System = ?