您的位置:首頁>正文

來自谷歌大腦工程師的RNN系列教程|RNN的基本介紹

上周, 我們分享了一篇來自矽谷工程師的TensorFlow教程, 有讀者回饋希望瞭解更多關於RNN的相關內容。 因此, 在接下來的幾周中, 科技行者為大家準備了一套RNN系列的入門教程, 供大家參考。

該教程細分為以下部分:

1.迴圈神經網路(RNN)的基本介紹(本部分)

2.利用Python和Theano實現RNN

3.理解時間進化反傳演算法(BPTT)的演算法和梯度消失問題

4.建立基於門控迴圈單元(GRU)或者長短時記憶(LSTM)的RNN模型

那麼今天, 我們將先對RNN做一個基本介紹。

在這一教程裡, 我們將會建立一個基於RNN的語言模型。 語言模型的應用有雙重目的:第一, 可以根據句子在現實中出現的可能性和概率對任意句子進行評分。

這給了我們語法和語義上的度量, 在機器翻譯系統中, 這類模型非常常見。 第二, 一個語言模型可以生成新文本。 例如, Andrej Karpathy的這篇博文(//karpathy.github.io/2015/05/21/rnn-effectiveness/)就展示了RNN模型的作用和有效性, 它可以訓練莎士比亞的詩集, 從而生成類似莎士比亞詩集的文本。

在開始本次教程前, 需要您對神經網路(NNs)的基本概念有了一定的瞭解。 神經網路是是一種應用類似於大腦神經突觸聯接的結構進行資訊處理的數學模型。

-1-何為RNN?

RNN的本質概念是利用時序資訊, 在傳統神經網路中, 假設所有的輸入(以及輸出)都各自獨立。 但是, 對於很多工而言, 這非常局限。 舉個例子, 假如你想根據一句沒說完的話, 預測下一個單詞,

最好的辦法就是聯繫上下文的資訊。 而RNN(迴圈神經網路)之所以是“迴圈”, 是因為它們對序列的每個元素執行相同的任務, 而每次的結果都獨立於之前的計算。

另一種思考RNN的方式是, 它擁有“記憶”模組, 可以獲取已經計算過的資訊。 理論上講, RNN可以利用任意長度的序列資訊, 但只可以利用有限的前幾步的資訊。

下面便是一個典型的RNN模型:

上圖顯示的是RNN模型全部展開時的情況。 “展開”指的是用網路描述出所有序列。

例如, 如果序列中的句子有5個單詞, 那麼, 橫向展開網路後將有五層神經網路, 一層對應一個單詞。

下面解釋一下其中的計算公式:

Xt是時刻t時的輸入。 例如, X1對應於一個句子的第二個詞的實數向量

St是在時刻t時的隱藏狀態, 類似於網路的“大腦”, 也就是“記憶模組”的值

St的運算是基於以前隱藏狀態St-1和當前的輸入Xt決定的, 公式為:St=f(Uxt+Wst-1).其中, f通常是非線性的, 例如, tanh or ReLU函數。 在計算第一個隱藏狀態時, 初始值通常設為0.

Ot是時刻t時的輸出結果。 如, 預推測句子中的下一個詞, 那麼在這裡的輸出就可以表示為一個詞典序列,

值為每一個詞的概率。 公式為:Ot=softmax(Vst)

需要注意的有幾點:

你可以將隱藏狀態St作為神經網路的記憶單元。 St記錄了前面步驟的資訊。 在時刻t時的輸出結果僅僅計算了時間t時的記憶資訊。 但如前面說的, 實際操作中會有些複雜, 因為St不能從以前的時段中捕捉到太多資訊。

傳統DNN(深度神經網路)模型一般在不同層採用不同參數權重, 與之不同, RNN在各層的參數是一樣的(如上述的U、V、W等)。 這意味著這個模型對於每一步的作用是一致的, 只是輸入不同。 這樣的方式大幅降低了需要學習的參數總數, 減少了很多計算量。

在上面的圖片中顯示, 不同的時間節點會產生不同的結構輸出。 但是, 不同任務中,

有一些輸出則是多餘的。 例如, 在情感分析裡, 我們只關心這個句子最終表達的情緒, 而不是每一個單詞表達的情緒。 同樣的, 也不是必須得在每一個時間點都有輸入。

-2-RNN有何用處?

在眾多自然語言處理的任務中, RNN已經取得了巨大成功。 這裡, 需要指出的是RNN中最常用的類型是長短時記憶(LSTMs)模型, 相比較於原始的RNN, LSTM可以存儲更長的時序資訊。 並且, 本教程中LSTM在本質上和我們所要開發的RNN是一致的, 只不過LSTM計算隱藏狀態的方式有所不同。 在下一個教程中, 我們將會更詳細地講解LSTM。

接下來, 我們主要介紹一下在自然語言處理中應用RNN的例子:

2.1 語言建模和文本生成

通過訓練RNN模型, 我們可以基於給出的一個單詞序列, 預測下一個單詞。 這對於語言建模和文本生成而言是非常有價值的。

同時,語言模型可以用於評估一個句子出現的可能性,這對機器翻譯而言也是非常重要的(因為高概率的句子通常是正確的)。

能夠預測下一個單詞出現的概率,那是因為我們所得到的衍生模型能夠根據輸出的可能性來生成新文本。而根據我們的訓練資料,模型還可以得到所有類型的文本。在語言建模中,我們的輸入屬於典型的單詞序列(例如利用one-hot載體進行編碼),而在訓練該神經網路時,我們希望t時刻的輸出是精確的,因此,我們會設定Ot=Xt+1。

下面是關於語言建模和文本生成的研究論文:

Recurrent neural network based language model

《基於迴圈神經網路的語言模型》

Extensions of Recurrent neural network based language model

《基於迴圈神經網路拓展的語言模型》

Generating Text with Recurrent Neural Networks

《利用迴圈神經網路生成文本》

2.2 機器翻譯

機器翻譯類似於語言建模,我們首先輸入源語(例如德語),需要輸出是目標語(例如英語)。關鍵區別是,在機器翻譯中,翻譯的第一個字可能會需要所有已輸入句子的資訊,所以只有看到全部輸入之後才能輸出。

▲ 上圖是用於機器翻譯的RNN模型

下面是關於機器翻譯的研究論文:

A Recursive Recurrent Neural Network for Statistical Machine Translation

《用於統計類機器翻譯的遞迴型迴圈神經網路》

Sequence to Sequence Learning with Neural Networks

《利用神經網路進行序列至序列的學習》

Joint Language and Translation Modeling with Recurrent Neural Networks

《利用迴圈神經網路進行語言和翻譯的建模》

2.3 語音辨識

根據從聲音中得到的一系列聲波信號,並以此作為輸入,可以預測出一系列語音片段及其可能性。

下面是關於語音辨識的研究論文:

Towards End-to-End Speech Recognition with Recurrent Neural Networks

《利用迴圈神經網路進行端對端的語音辨識》

2.4 生成圖片的文字描述

和CNN(卷積神經網路)一樣,RNN也被應用于生成描述未被標籤的圖片模型。並且,兩者結合的模型組合甚至可以依據圖片特徵排列生成文字,以及圖片中特徵的對應位置。如下圖:

▲用於生成圖像描述的深度視覺 - 語義示例

2.5 訓練RNN模型

訓練RNN模型與訓練傳統的神經網路類似。我們同樣採用反向傳播演算法,但也有不同。因為在RNN中,橫向展開的每一層都是共用權重的,每一個輸出的梯度(gradient)不僅僅依賴於當下這個時間點,還依賴於過去的時間點。舉個例子,想要計算時間點t=4的梯度,我們需要反向傳播3個時間點,並把梯度相加。這個演算法就叫做BPTT(Backpropagation Through Time)。現在只需要知道,BPTT演算法本身是有局限性的,它不能長期記憶,還會引起梯度消失和梯度爆炸問題,LSTM就是用來解決這個問題的。

2.6 RNN模型的拓展

多年以來,為了克服傳統迴圈神經網路(vanilla RNN)的弱點,研究人員已經開發出更多統計型的迴圈神經網路。之後的部分,我們將更細緻地對此進行講解,但是,我希望這部分概要有助於大致瞭解一下模型分類。下面是一些典型的模型:

雙向迴圈神經網路(Bidirectional RNN)的理念是,時間t時的輸出不僅僅取決於過去的記憶,也同樣取決於後面發生的事情。例如,某一序列中,想要預測一個單詞,會聯繫前文和後文。雙向迴圈神經網路便是如此簡單。僅僅是兩套迴圈神經網路前後交疊在一起而已。輸出的計算結果便基於這兩套迴圈神經網路的隱藏狀態。如下圖:

深度(雙向)(Deep (Bidirectional) RNN)迴圈神經網路類似於雙向迴圈神經網路,只不過是每個時長內都有多層。實際上,這一點意味著它有更強的學習能力(但是相應地,也需要大量訓練資料)。

LSTM網路:近來,LSTM非常流行。本質上,LSTM與RNN的基礎架構並無不同,但是,LSTM在計算隱藏狀態時會採用不同的函數。LSTM中的記憶被稱為“細胞”,而可以把這些“細胞”視作黑匣子,記憶之前狀態為h_t-1的輸入和當前為Xt的輸入。本質上,這些“細胞”將決定將保留或剔除相關記憶,“細胞”可以整合之前的狀態、當前的記憶和輸入。而結果證明,對於長期的記憶來說,這些單元的類型非常高效。

-3-總結

希望通過第一篇教程,你已經對RNN的定義和作用有了一個基本的瞭解。下周,我們將介紹如何利用Python和Theano建立起第一個基於RNN的語言模型。

相關研究論文獲取方式:關注科技行者公眾號(itechwalker),並打開對話介面,回復關鍵字“RNN論文”,即可獲得下載地址。

這對於語言建模和文本生成而言是非常有價值的。

同時,語言模型可以用於評估一個句子出現的可能性,這對機器翻譯而言也是非常重要的(因為高概率的句子通常是正確的)。

能夠預測下一個單詞出現的概率,那是因為我們所得到的衍生模型能夠根據輸出的可能性來生成新文本。而根據我們的訓練資料,模型還可以得到所有類型的文本。在語言建模中,我們的輸入屬於典型的單詞序列(例如利用one-hot載體進行編碼),而在訓練該神經網路時,我們希望t時刻的輸出是精確的,因此,我們會設定Ot=Xt+1。

下面是關於語言建模和文本生成的研究論文:

Recurrent neural network based language model

《基於迴圈神經網路的語言模型》

Extensions of Recurrent neural network based language model

《基於迴圈神經網路拓展的語言模型》

Generating Text with Recurrent Neural Networks

《利用迴圈神經網路生成文本》

2.2 機器翻譯

機器翻譯類似於語言建模,我們首先輸入源語(例如德語),需要輸出是目標語(例如英語)。關鍵區別是,在機器翻譯中,翻譯的第一個字可能會需要所有已輸入句子的資訊,所以只有看到全部輸入之後才能輸出。

▲ 上圖是用於機器翻譯的RNN模型

下面是關於機器翻譯的研究論文:

A Recursive Recurrent Neural Network for Statistical Machine Translation

《用於統計類機器翻譯的遞迴型迴圈神經網路》

Sequence to Sequence Learning with Neural Networks

《利用神經網路進行序列至序列的學習》

Joint Language and Translation Modeling with Recurrent Neural Networks

《利用迴圈神經網路進行語言和翻譯的建模》

2.3 語音辨識

根據從聲音中得到的一系列聲波信號,並以此作為輸入,可以預測出一系列語音片段及其可能性。

下面是關於語音辨識的研究論文:

Towards End-to-End Speech Recognition with Recurrent Neural Networks

《利用迴圈神經網路進行端對端的語音辨識》

2.4 生成圖片的文字描述

和CNN(卷積神經網路)一樣,RNN也被應用于生成描述未被標籤的圖片模型。並且,兩者結合的模型組合甚至可以依據圖片特徵排列生成文字,以及圖片中特徵的對應位置。如下圖:

▲用於生成圖像描述的深度視覺 - 語義示例

2.5 訓練RNN模型

訓練RNN模型與訓練傳統的神經網路類似。我們同樣採用反向傳播演算法,但也有不同。因為在RNN中,橫向展開的每一層都是共用權重的,每一個輸出的梯度(gradient)不僅僅依賴於當下這個時間點,還依賴於過去的時間點。舉個例子,想要計算時間點t=4的梯度,我們需要反向傳播3個時間點,並把梯度相加。這個演算法就叫做BPTT(Backpropagation Through Time)。現在只需要知道,BPTT演算法本身是有局限性的,它不能長期記憶,還會引起梯度消失和梯度爆炸問題,LSTM就是用來解決這個問題的。

2.6 RNN模型的拓展

多年以來,為了克服傳統迴圈神經網路(vanilla RNN)的弱點,研究人員已經開發出更多統計型的迴圈神經網路。之後的部分,我們將更細緻地對此進行講解,但是,我希望這部分概要有助於大致瞭解一下模型分類。下面是一些典型的模型:

雙向迴圈神經網路(Bidirectional RNN)的理念是,時間t時的輸出不僅僅取決於過去的記憶,也同樣取決於後面發生的事情。例如,某一序列中,想要預測一個單詞,會聯繫前文和後文。雙向迴圈神經網路便是如此簡單。僅僅是兩套迴圈神經網路前後交疊在一起而已。輸出的計算結果便基於這兩套迴圈神經網路的隱藏狀態。如下圖:

深度(雙向)(Deep (Bidirectional) RNN)迴圈神經網路類似於雙向迴圈神經網路,只不過是每個時長內都有多層。實際上,這一點意味著它有更強的學習能力(但是相應地,也需要大量訓練資料)。

LSTM網路:近來,LSTM非常流行。本質上,LSTM與RNN的基礎架構並無不同,但是,LSTM在計算隱藏狀態時會採用不同的函數。LSTM中的記憶被稱為“細胞”,而可以把這些“細胞”視作黑匣子,記憶之前狀態為h_t-1的輸入和當前為Xt的輸入。本質上,這些“細胞”將決定將保留或剔除相關記憶,“細胞”可以整合之前的狀態、當前的記憶和輸入。而結果證明,對於長期的記憶來說,這些單元的類型非常高效。

-3-總結

希望通過第一篇教程,你已經對RNN的定義和作用有了一個基本的瞭解。下周,我們將介紹如何利用Python和Theano建立起第一個基於RNN的語言模型。

相關研究論文獲取方式:關注科技行者公眾號(itechwalker),並打開對話介面,回復關鍵字“RNN論文”,即可獲得下載地址。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示