力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)

力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)

序列模型(Recurrent Neural Networks)是Andrw Ng深度學習專項課程中的第五門課,也是最後一門課。這門課主要介紹循環神經網絡(RNN)的基本概念、模型和具體應用。該門課共有3周課時,因此我將分紅3次筆記來總結,這是第一節筆記。
——前言網絡

1 Why Sequence Models


序列模型可以應用在許多領域,例如:app

  • 語音識別
  • 音樂發生器
  • 情感分類
  • DNA序列分析
  • 機器翻譯
  • 視頻動做識別
  • 命名實體識別

力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
這些序列模型基本都屬於監督式學習,輸入x和輸出y不必定都是序列模型。若是都是序列模型的話,模型長度不必定徹底一致。框架

2 Notation


下面以命名實體識別爲例,介紹序列模型的命名規則。示例語句爲:ide

Harry Potter and Hermione Granger invented a new spell.函數

該句話包含9個單詞,輸出y即爲1 x 9向量,每位表徵對應單詞是否爲人名的一部分,1表示是,0表示否。很明顯,該句話中「Harry」, 「Potter」, 「Hermione」, 「Granger」均是人名成分,因此,對應的輸出y可表示爲:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
對於輸入x,表示爲:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
該詞彙庫可當作是10000 x 1的向量。值得注意的是天然語言處理NLP實際應用中的詞彙庫可達百萬級別的詞彙量。
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)性能

3 Recurrent Neural Network Model


對於序列模型,若是使用標準的神經網絡,其模型結構以下:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
使用標準的神經網絡模型存在兩個問題:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
標準的神經網絡不適合解決序列模型問題,而循環神經網絡(RNN)是專門用來解決序列模型問題的。RNN模型結構以下:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
RNN模型包含三類權重係數,分別是Wax,WaaWaa,Wya。且不一樣元素之間同一位置共享同一權重係數。
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
RNN的正向傳播(Forward Propagation)過程爲:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
其中,g(⋅)表示激活函數,不一樣的問題須要使用不一樣的激活函數。學習

爲了簡化表達式,能夠對上式進行整合:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
則正向傳播可表示爲:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
He said, 「Teddy Roosevelt was a great President.」
He said, 「Teddy bears are on sale!」

力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)優化

4 Backpropagation through Time


針對上面識別人名的例子,通過RNN正向傳播,單個元素的Loss function爲:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
該樣本全部元素的Loss function爲:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
而後,反向傳播(Backpropagation)過程就是從右到左分別計算L(y^,y)對參數Wa,Wy,ba,by的偏導數。思路與作法與標準的神經網絡是同樣的。通常能夠經過成熟的深度學習框架自動求導,例如PyTorch、Tensorflow等。這種從右到左的求導過程被稱爲Backpropagation through time。編碼

5 Different Types of RNNs


以上介紹的例子中,Tx=Ty。可是在不少RNN模型中,Tx是不等於Ty的。例如第1節介紹的許多模型都是Tx≠Ty。根據Tx與Ty的關係,RNN模型包含如下幾個類型:翻譯

  • Many to many: Tx=TyTx=Ty
  • Many to many: Tx≠TyTx≠Ty
  • Many to one: Tx>1,Ty=1Tx>1,Ty=1
  • One to many: Tx=1,Ty>1Tx=1,Ty>1
  • One to one: Tx=1,Ty=1Tx=1,Ty=1

不一樣類型相應的示例結構以下:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)

6 Language Model and Sequence Generation


語言模型是天然語言處理(NLP)中最基本和最重要的任務之一。使用RNN可以很好地創建須要的不一樣語言風格的語言模型。

什麼是語言模型呢?舉個例子,在語音識別中,某句語音有兩種翻譯:

  • The apple and pair salad.
  • The apple and pear salad.

很明顯,第二句話更有多是正確的翻譯。語言模型實際上會計算出這兩句話各自的出現機率。好比第一句話機率爲10^−13,第二句話機率爲10^−10。也就是說,利用語言模型獲得各自語句的機率,選擇機率最大的語句做爲正確的翻譯。機率計算的表達式爲:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
如何使用RNN構建語言模型?首先,咱們須要一個足夠大的訓練集,訓練集由大量的單詞語句語料庫(corpus)構成。而後,對corpus的每句話進行切分詞(tokenize)。作法就跟第2節介紹的同樣,創建vocabulary,對每一個單詞進行one-hot編碼。例以下面這句話:

The Egyptian Mau is a bread of cat.

One-hot編碼已經介紹過了,再也不贅述。還需注意的是,每句話結束末尾,須要加上< EOS >做爲語句結束符。另外,若語句中有詞彙表中沒有的單詞,用< UNK >表示。假設單詞「Mau」不在詞彙表中,則上面這句話可表示爲:

The Egyptian < UNK > is a bread of cat. < EOS >

準備好訓練集並對語料庫進行切分詞等處理以後,接下來構建相應的RNN模型。
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
單個元素的softmax loss function爲:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
該樣本全部元素的Loss function爲:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
對語料庫的每條語句進行RNN模型訓練,最終獲得的模型能夠根據給出語句的前幾個單詞預測其他部分,將語句補充完整。例如給出「Cats average 15」,RNN模型可能預測完整的語句是「Cats average 15 hours of sleep a day.」。

7 Sampling Novel Sequences

利用訓練好的RNN語言模型,能夠進行新的序列採樣,從而隨機產生新的語句。與上一節介紹的同樣,相應的RNN模型以下所示:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
值得一提的是,若是不但願新的語句中包含< UNK >標誌符,能夠在每次產生< UNK >時從新採樣,直到生成非< UNK >標誌符爲止。

以上介紹的是word level RNN,即每次生成單個word,語句由多個words構成。另一種狀況是character level RNN,即詞彙表由單個英文字母或字符組成,以下所示:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
Character level RNN與word level RNN不一樣的是,y^<t>由單個字符組成而不是word。訓練集中的每句話都當成是由許多字符組成的。character level RNN的優勢是能有效避免遇到詞彙表中不存在的單詞< UNK >。可是,character level RNN的缺點也很突出。因爲是字符表徵,每句話的字符數量很大,這種大的跨度不利於尋找語句前部分和後部分之間的依賴性。另外,character level RNN的在訓練時的計算量也是龐大的。基於這些缺點,目前character level RNN的應用並不普遍,可是在特定應用下仍然有發展的趨勢。

8 Vanisging Gradients with RNNs


語句中可能存在跨度很大的依賴關係,即某個word可能與它距離較遠的某個word具備強依賴關係。例以下面這兩條語句:

The cat, which already ate fish, was full.
The cats, which already ate fish, were full.

第一句話中,was受cat影響;第二句話中,were受cats影響。它們之間都跨越了不少單詞。而通常的RNN模型每一個元素受其周圍附近的影響較大,難以創建跨度較大的依賴性。上面兩句話的這種依賴關係,因爲跨度很大,普通的RNN網絡容易出現梯度消失,捕捉不到它們之間的依賴,形成語法錯誤。關於梯度消失的原理,咱們在以前的吳恩達《優化深度神經網絡》筆記(1)– 深度學習的實用層面已經有過介紹,可參考。

另外一方面,RNN也可能出現梯度爆炸的問題,即gradient過大。經常使用的解決辦法是設定一個閾值,一旦梯度最大值達到這個閾值,就對整個梯度向量進行尺度縮小。這種作法被稱爲gradient clipping。

9 Gated Recurrent Unit(GRU)


RNN的隱藏層單元結構以下圖所示:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
爲了解決梯度消失問題,對上述單元進行修改,添加了記憶單元,構建GRU,以下圖所示:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
相應的表達式爲:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
上面介紹的是簡化的GRU模型,完整的GRU添加了另一個gate,即Γr,表達式以下:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
注意,以上表達式中的∗∗表示元素相乘,而非矩陣相乘。

10 Long Short Term Memory(LSTM)


LSTM是另外一種更強大的解決梯度消失問題的方法。它對應的RNN隱藏層單元結構以下圖所示:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
相應的表達式爲:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
LSTM包含三個gates:Γu,Γf,Γo,分別對應update gate,forget gate和output gate。

若是考慮c^<t−1>對Γu,Γf,Γo的影響,可加入peephole connection,對LSTM的表達式進行修改:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
GRU能夠當作是簡化的LSTM,兩種方法都具備各自的優點。

11 Bidirectional RNN


咱們在第3節中簡單提過Bidirectional RNN,它的結構以下圖所示:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
BRNN對應的輸出表達式爲:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
BRNN可以同時對序列進行雙向處理,性能大大提升。可是計算量較大,且在處理實時語音時,須要等到完整的一句話結束時才能進行分析。

12 Deep RNNs


Deep RNNs由多層RNN組成,其結構以下圖所示:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)
咱們知道DNN層數可達100多,而Deep RNNs通常沒有那麼多層,3層RNNs已經較複雜了。

另一種Deep RNNs結構是每一個輸出層上還有一些垂直單元,以下圖所示:
力薦 | 吳恩達《序列模型》精煉筆記(1)-- 循環神經網絡(RNN)至此,第一節筆記介紹完畢!

相關文章
相關標籤/搜索