1. 程式人生 > >斯坦福大學-自然語言處理與深度學習(CS224n)筆記 第八課 迴圈神經網路

斯坦福大學-自然語言處理與深度學習(CS224n)筆記 第八課 迴圈神經網路

課程概要

1、傳統語言模型
2、迴圈神經網路
3、例項(python)
4、RNN處理的一些技巧
5、針對其他任務的序列模型
6、總結

一、傳統語言模型

語言模型可以計算一些系列的單詞的概率P(w1,…,wT)

  • 可以用來進行機器翻譯

    • 單詞順序:p(the cat is small) > p(small the is cat)
    • 單詞選擇:p(walking home after school) > p(walking house after school)
  • 對於單詞的概率估計一般是依據馬爾可夫假設,我們認為只有單詞前面的幾個單詞會和單詞的概率相關,因此我們只計算條件於前面N個單詞的單詞概率。

  • 對於這些的條件概率的計算,是通過語料庫中先驗的條件概率來進行估計的。下面展示的是一元和二元的估計。一般而言,隨著n元中n的增加,準確率也會增加,但是n的增加會增加許多對記憶體(RAM)的需求。

二、迴圈神經網路

對於一組單詞向量x1,x2,x3,x4…而言,每一個時間步的公式可以寫成:

  • x t是t時刻輸入的詞向量,長度為d
  • h t-1是t-1時刻得到非線性啟用函式的輸出值
  • W(hx)是輸入詞向量的權值矩陣,維度:Dh×d
  • W(hh)是h t-1的權值矩陣,維度:Dh×Dh
  • W(S)是在softmax中的對ht的權值矩陣
  • 要注意的是對於所有時刻的神經元都共用同一個W(hx),W(hh)和W(S)

迴圈神經網路的影象表示:
在這裡插入圖片描述上圖的多神經元展開:
在這裡插入圖片描述
這裡使用的損失函式,和我們之前提到的交叉熵損失函式是一樣的。但是,考慮到我們現在的任務不是對中心詞進行分類, 而是預測每個時刻的單詞,因此我們需要把之前的基於類的加和換成詞彙加和。

3、迴圈神經網路(RNN)的訓練問題:梯度爆炸/消失

對於迴圈神經網路而言,在進行前饋計算的時候,每一個時刻都會乘以一個相同的矩陣;而在進行後饋計算的時候,每一個時刻也都會乘以一個相同的矩陣。
在這裡插入圖片描述
具體從公式展開,將RNN公式寫成相似但是更簡單的公式。

就對總體誤差E求導W而言,就是求所有時刻的誤差的導數之和。

利用鏈式法則可以把每個時刻的導數寫成

其中

上面的連乘公式的每一個乘子都是一個Jacobain雅克比矩陣,雅克比矩陣的基本形狀如下:


對雅克比矩陣而言,我們可以得到它的範數的上界,其中β是對應的範數上界:

因為梯度是一系列雅克比矩陣的連乘,所以我們可以得到對應的範數上界:

只要我們一開始設定的初始是大於1的,那麼我們最終得到的梯度將會無窮大;而當初始一開始是小於1的,最終梯度將會變得無窮小。
梯度無窮小還會帶來的一個問題是當我們在判斷t時刻的單詞的時候,t-n時刻的單詞的影響會變得很小。比如句子,Jane walked into the room.John walked in too. It was late in the day. Jane said hi to ____可能就沒有辦法填入正確的單詞John。

三、例項(python)

演示程式碼見此處

如上面的圖所示,這是兩個RNN模型,一個使用ReLu,一個使用sigmoid為啟用函式以後得到的梯度曲線。我們可以看到的共同點是,第一層的梯度是小於第二層的梯度的,因此很有可能會發生梯度消失的問題。

四、RNN處理的一些技巧

1、處理梯度爆炸的方法:clipping trick

這是一個由Mikolov引入的方法,具體是當梯度超過某個最大的值的時候,將梯度截斷。

直觀的思想展示:這裡構建了一個十分簡單的神經網路,只包含一個隱層,下圖繪製出的是目標函式的三維圖。可以看到,實線是沒有進行clipping 處理的優化情況,當梯度遇上凸出部分的時候可能會優化到一個非常遠的地方;虛線是進行clipping 處理之後,可以一定程度上控制優化的距離。

2、處理梯度消失的方法:初始化+ReLus

所謂的初始化指的是對W矩陣進行初始化定義為單位舉證(也就是預設為初始是:單位矩陣f+單位舉證x,也就是詞向量的加和),並且進行f(z)=rect(z)=max(z,0)的啟用函式計算。
參考文獻:
Parsing with Compositional Vector Grammars, Socher et al. 2013
A Simple Way to Initialize Recurrent Networks of Rectified Linear Units, Le et al. 2015

3、複雜度(Perplexity)結果

我們將RNN的結果,與傳統的語言模型的結果(五元+Kneser-Ney平滑)進行復雜度的比較,結果發現RNN的表現更加優秀,複雜度(Perplexity)更低。

4、技巧:基於分類的單詞預測

softmax的計算實際上是十分巨大和緩慢的,為了提升它的計算,我們可以應用一個技巧:基於分類的單詞預測。 簡單來說就是先預測單詞的分類(分類可以依據單詞出現的頻率),再預測具體類中的具體單詞。分的單詞類越多,複雜度(Perplexity)降低也越多,但是分類越多也可能會導致速度變慢,所以這中間需要進行一定的權衡。
p(wt|history)=p(ct|history)p(wt|ct)=p(ct|ht)p(wt|ct)

5、後饋技巧

在進行後饋計算的時候,只需要遍歷一遍整個序列,然後從每個Et中累積δ。

五、針對其他任務的序列模型

對每個單詞進行命名實體的識別(NER),實體層面的情感分析,意見表達(opinionated expressions)

以意見表達舉例,一個任務是識別直接主觀表達(DSEs)和表現主觀表達(ESEs)。前者是明確指出個人的觀點,後者是暗含的情感與情緒。
具體的標註方法BIO標註,B表示一個實體的開始,I表示實體的繼續,O表示什麼都不是

我們可以利用RNN來完成這個任務。結構和公式如下,其中x表示一個詞向量,y表示一個標記(B、I、O),g表示softmax

在進行分類的時候,我們一般希望不僅使用這個單詞之前的單詞,我們也希望使用這個單詞之後的單詞,因此我們可以使用雙向RNN來解決這個問題。

當然也可以構建深度的雙向RNN模型。

資料情況:MPQA 1.2 corpus(Wiebe et al., 2005) 包含535篇新聞,11111個句子。在片語層面人工進行標註DSEs與ESEs。
評價標準:F1

在不同的語料規模上,得到的不同層數的F1情況。

六、總結

  • 迴圈神經網路(RNN)是最好的NLP的深度學習模型之一。
  • 訓練它存在的一個困難時梯度爆炸和梯度消失。
  • 它可以進行很多方面的拓展,可以使用很多技巧使得訓練得以提升。
  • 下一節課將會介紹它的拓展LSTMs與GRUs