百面機器學習(10)——循環神經網絡

目錄

循環神經網絡與卷積神經網絡

循環神經網絡的梯度消失問題

循環神經網絡中的激活函數

長短期記憶網絡

Seq2Seq模型

注意力機制


循環神經網絡與卷積神經網絡

1. 處理文本數據時,循環神經網絡與前饋神經網絡相比有什麼特點?(1)

在神經網絡的建模過程中,一般的前饋神經網絡,如卷積神經網絡,通常接受一個定長的向量作爲輸入。卷積神經網絡對文本數據建模時,輸入變長的字符串或者單詞串,然後通過滑動窗口加池化的方式將原先的輸入轉換成-個固定長度的向量表示,這樣做可以捕捉到原

文本中的一些局部特徵,但是兩個單詞之間的長距離依賴關係還是很難被學習到。循環神經網絡卻能很好地處理文本數據變長並且有序的輸入序列。

相比於卷積神經網絡等前饋神經網絡,循環神經網絡由於具備對序列順序信息的刻畫能力,往往能得到更準確的結果。

 

循環神經網絡的梯度消失問題

1. 循環神經網絡爲什麼會出現梯度消失或梯度爆炸?有哪些改進方案?(2)

循環神經網絡的求解可以採用BPTT(Back Propagation Through Time, 基於時間的反向傳播)算法實現,BPTT實際上是反向傳播算法的簡單變種,如果將循環神經網絡展開成T層的前饋神經網絡來理解,就和普通的反向傳播算法沒有區別了。循環神經網絡的設計初衷之一就是能夠捕獲長距離輸入之間的依賴。從結構上來看,循環神經網絡也理應能夠做到這 點。然而實踐發現,使用 BPTT算法學習的循環神經網絡並不能成功捕捉到長距離的依賴關係,這一現象主要源於深度神經網絡中的梯度消失。

循環神經網絡的梯度可以寫成連乘形式如下,等號左邊對應的nxn維矩陣,又被稱爲雅可比矩陣。

由於預測的誤差是沿着神經網絡的每一層反向傳播的,因此當雅可比矩陣的最大特徵值大於1時,隨着離輸出越來越遠,每層的梯度大小會呈指數增長,導致梯度爆炸;反之,若雅可比矩陣的最大特徵值小於1,梯度的大小會呈指數縮小,產生梯度消失。

梯度爆炸的問題可以通過梯度裁剪來緩解,當梯度的範式大於某個給定值時,對梯度進行等比收縮。 而梯度消失問題相對比較棘手,需要對模型本身進行改進。 深度殘差網絡是對前饋神經網絡的改進,通過殘差學習的方式緩解了梯度消失的現象,從而使得我們能夠學習到更深層的網絡表示;而對於循環神經網絡來說,短時記憶模型[23]及其變種門控循環單元( Gated recurrent unit, GRU)等模型通過加入門控機制,很大程度上彌補了梯度消失所帶來的損失。

 

 

循環神經網絡中的激活函數

1. 在循環神經網絡中能否使用ReLU作爲激活函數?(3)

可以,但是需要對矩陣的初值做一定的限制,否則在反向傳播中權重矩陣如果不是單位矩陣,最終會趨於0或者無窮,從而十分容易引發數值問題。

 

 

長短期記憶網絡

1. LSTM是如何實現長短期記憶功能的?(2)

與傳統的循環神經網絡相比 , LSTM 仍然是基於當前輸入層和前一個隱藏層來計算當前隱藏層,只不過對內部結構進行了更加精心的設計,加入了輸入門,遺忘門,以及輸出門三個門和一個內部記憶單元。輸入門控制當前計算的新狀態以多大程度更新到記憶單元中,遺忘門控制前一步記憶單元中的信息有多大程度被遺忘埠,輸出門控制當前的輸出有多大程度上取決於當前的記憶單元。

 

2. LSTM裏各模塊分別使用什麼激活函數,可以使用別的激活函數嗎?(3)

關於激活函數的選取,在 LSTM 中,遺忘門、輸入門和輸出門使用 Sigmoid 函數作爲激活函數;在生成候選記憶肘,使用雙曲正切函數 Tanh 作爲激活函數。值得注意的是,這兩個激活函數都是飽和的,也就是說在輸入達到一定值的情況下,輸出就不會發生明顯變化了 。 如果是用非飽和的激活函數,例如 ReLU ,那麼將難以實現門控的效果。

Sigmoid 函數的輸出在 0 ~ 1之間,符合門控的物理定義。 且當輸入較大或較小時,其輸出會非常接近1或 0,從而保證該門開或關。在生成候選記憶時,使用 Tanh 函數,是因爲其輸出在-1~1 之間 ,這與大多數場景下特徵分佈是 0 中心的吻合。 此外, Tanh 函數在輸入爲 0附近相比 Sigmoid 函數有更大的梯度,通常使模型收斂更快。

激活函數的選擇也不是一成不變的,也有一些使用sigmoid和Tanh的變種。

 

Seq2Seq模型

1. 什麼是Seq2Seq模型?它有哪些優點(2)

Seq2Seq 模型的核心思想是,通過深度神經網絡將一個作爲輸入的序列映射爲一個作爲輸出的序列,這一過程由編碼輸入與解碼輸出兩個環節構成。

在經典的實現中,編碼器和解碼器各由一個循環神經網絡構成,既可以選擇傳統循環神經網絡結構,也可以使用長短期記憶模型、門控循環單元等。在 Seq2Seq 模型中,兩個循環神經網絡是共同訓練的。

 

 

2. Seq2Seq模型在解碼時有哪些常用的辦法?(3)

Seq2Seq 模型最核心的部分是其解碼部分,大量的改進也是在解碼環節衍生的。 Seq2Seq 模型最基礎的解碼萬法是貪心法,即選取一種度量標準後,每次都在當前狀態下選擇最佳的一個結果,直到結束。 貪心法的計算代價低,適合作爲基準結果其他方法相比較。很顯然, 貪心法獲得的是一個局部最優解,由於實際問題的複雜性,該方法往往並不能取得最好的效果。

集束搜索是常見的改進算法,它是一種啓發式算法。 該方法會保存 beam size (後面簡寫爲 b ) 個當前的較佳選擇,然後解碼時每一步根據保存的選擇進行下一步擴展和排序,接着選擇前 b 個進行保存,循環迭代,直到結束時選擇最佳的一個作爲解碼的結果。圖10.5 是 b 爲 2時的集束搜索示例 。

由圖可見,當前已經有解碼得到的第一個詞的兩個候選: I 和My。 然後,將 I 和 My 輸入到解碼器,得到一系列候選的序列 ,諸如 I decided 、 My decision 、 I thought 等。最後,從後續序列中選擇最優的兩個,作爲前兩個詞的兩個候選序列。很顯然,如果 b 取 1,那麼會退化爲前述的貪心法。隨着 b 的增大,其搜索的空間增大,最終效果會有所提升,但需要的計算量也相應增大。在實際的應用(如機器翻譯、文本摘要)中,b往往會選擇一個適中的範圍,以 8 ~ 12 爲佳。

解碼時使用堆疊的 RNN 、增加 Dropout 機制、與編碼器之間建立殘差連接等,均是常見的改進措施。在實際研究工作中,可以依據不同使用場景,有針對地進行選擇和實踐。

另外,解碼環節中一個重要的改進是注意力機制,我們會在下一節深入介紹。注意力機制的引入,使得在解碼時每步可以有針對性地關注與當前有關的編碼結果,從而減小編碼器輸出表示的學習難度,也更容易學到長期的依賴關係。此外,解碼時還可以採用記憶網絡從外界獲取知識。

 

注意力機制

1. Seq2Seq模型引入注意力機制是爲了解決什麼問題?爲什麼選用了雙向的循環神經網絡模型?(4)

在實際任務(例如機器翻譯)中,使用 Seq2Seq 模型,通常會先使用一個循環神經網絡作爲編碼器,將輸入序列(源語言句子的詞向量序列)編碼成爲一個向量表示;然後再使用一個循環神經網絡模型作爲解碼器,從編碼器得到的向量表示裏解碼得到輸出序列(目標語言句子的詞序列)

在實際使用中,會發現隨着輸入序列的增長,模型的性能發生了顯著下降。這是因爲編碼時輸入序列的全部信息壓縮到了一個向量表示中。隨着序列增長,句子越前面的詞的信息丟失就越嚴重。試想翻譯一個有100 個詞的句子,需要將整個句子全部詞的語義信息編碼在一個向量中。而在解碼時,目標語言的第一個詞大概率是和源語言的第一個詞相對應的,這就意味着第一步的解碼就需要考慮 1 00 步之前的信息。建模時的一個小技巧是將源語言句子逆序輸入,或者重複輸入兩遍來訓練模型,以得到一定的性能提升。使用長短期記憶模型能夠在一定程度上緩解這個問題,但在實踐中對於過長的序列仍然難以有很好的表現。

Seq2Seq 模型中引入注意力機制就是爲了解決上述的問題。 在注意力機制中,仍然可以用普通的循環神經網絡對輸入序列進行編碼,得到隱狀態 h1,h2·· ·hi 但是在解碼時,每一個輸出詞都依賴於前一個隱狀態以及輸入序列每一個對應的隱狀態。

注意力機制是一種思想,可以有多種不同的實現萬式,在 Seq2Seq 模型以外的場景也有不少應用。

 

後記

從開始接觸《百面機器學習》,當把全部章節看完,覺得這本書寫的特別深入淺出,把很多機器學習的基礎知識給串聯起來了,雖然用電子書閱讀完畢,仍然忍不住入手紙質版書本,好書就需要多看!

百面系列鏈接:

百面機器學習(2)——模型評估

百面機器學習(3)——經典算法

百面機器學習(4)——降維

百面機器學習(5)——非監督學習

百面機器學習(6)——概率圖模型

百面機器學習(7)——優化算法

百面機器學習(8)——採樣

百面機器學習(9)——前向神經網絡

百面機器學習(10)——循環神經網絡

百面機器學習(11)——強化學習

百面機器學習(12)——集成學習

百面機器學習(13)——生成式對抗網絡

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章