NLP學習筆記15---Dropout、attention機制


1.Dropout

 

m(k)是dropout的過程。

2.attention機制

(1)seq2seq

Seq2Seq 是一個 Encoder-Decoder 結構的神經網絡,它的輸入是一個序列(Sequence),輸出也是一個序列(Sequence),因此而得名 “Seq2Seq”。在 Encoder 中,將可變長度的序列轉變為固定長度的向量表達,Decoder 將這個固定長度的向量轉換為可變長度的目標的信號序列。
最基礎的 Seq2Seq模型 包含了三個部分(上圖有一部分沒有顯示的標明),即 Encoder、Decoder 以及連接兩者的中間狀態向量 C,Encoder通過學習輸入,將其編碼成一個固定大小的狀態向量 C(也稱為語義編碼),繼而將 C 傳給Decoder,Decoder再通過對狀態向量 C 的學習來進行輸出對應的序列。
 
                        圖4
  文本處理領域的Encoder-Decoder框架可以這么直觀地去理解:可以把它看作適合處理 由一個句子(或篇章)生成另外一個句子(或篇章)的通用處理模型。對於句子對<Source,Target>,我們的目標是給定輸入句子Source,期待通過Encoder-Decoder框架來生成目標句子Target。Source和Target可以是同一種語言,也可以是兩種不同的語言。而Source和Target分別由各自的單詞序列構成:
Encoder顧名思義就是對輸入句子Source進行編碼,將輸入句子通過非線性變換轉化為中間語義表示C:
 
對於解碼器Decoder來說,其任務是根據句子Source的中間語義表示C和之前已經生成的歷史信息y1,y2.....yi-1來生成i時刻要生成的單詞yi
 
圖4中展示的Encoder-Decoder框架是沒有體現出“注意力模型”的,所以可以把它看作是注意力不集中的分心模型。
如果拿機器翻譯來解釋這個分心模型的Encoder-Decoder框架更好理解,比如輸入的是英文句子:Tom chase Jerry,Encoder-Decoder框架逐步生成中文單詞:“湯姆”,“追逐”,“傑瑞”。

在翻譯“傑瑞”這個中文單詞的時候,分心模型里面的每個英文單詞對於翻譯目標單詞“傑瑞”貢獻是相同的,很明顯這里不太合理,顯然“Jerry”對於翻譯成“傑瑞”更重要,但是分心模型是無法體現這一點的,這就是為何說它沒有引入注意力的原因。

沒有引入注意力的模型在輸入句子比較短的時候問題不大,但是如果輸入句子比較長,此時所有語義完全通過一個中間語義向量來表示,單詞自身的信息已經消失,可想而知會丟失很多細節信息,這也是為何要引入注意力模型的重要原因。

上面的例子中,如果引入Attention模型的話,應該在翻譯“傑瑞”的時候,體現出英文單詞對於翻譯當前中文單詞不同的影響程度,比如給出類似下面一個概率分布值

(Tom,0.3)(Chase,0.2) (Jerry,0.5)

  每個英文單詞的概率代表了翻譯當前單詞“傑瑞”時,注意力分配模型分配給不同英文單詞的注意力大小。這對於正確翻譯目標語單詞肯定是有幫助的,因為引入了新的信息。

  同理,目標句子中的每個單詞都應該學會其對應的源語句子中單詞的注意力分配概率信息。這意味着在生成每個單詞yi的時候,原先都是相同的中間語義表示C會被替換成根據當前生成單詞而不斷變化的Ci。理解Attention模型的關鍵就是這里,即由固定的中間語義表示C換成了根據當前輸出單詞來調整成加入注意力模型的變化的Ci。增加了注意力模型的Encoder-Decoder框架理解起來如圖5所示。

每個Ci可能對應着不同的源語句子單詞的注意力分配概率分布,比如對於上面的英漢翻譯來說,其對應的信息可能如下:

其中,f2函數代表Encoder對輸入英文單詞的某種變換函數,比如如果Encoder是用的RNN模型的話,這個f2函數的結果往往是某個時刻輸入xi后隱層節點的狀態值;g代表Encoder根據單詞的中間表示合成整個句子中間語義表示的變換函數,一般的做法中,g函數就是對構成元素加權求和
當然,在模型的訓練階段,工作方式如下所示:
這里的每一個 Box 代表了一個 RNN 單元,通常是 LSTM 或者 GRU 。其實,Basic Seq2Seq 是有很多弊端的,首先 Encoder 將輸入編碼為固定大小狀態向量(hidden state)的過程實際上是一個“信息有損壓縮”的過程。如果信息量越大,那么這個轉化向量的過程對信息造成的損失就越大。同時,隨着 sequence length的增加,意味着時間維度上的序列很長,RNN 模型也會出現梯度彌散。最后,基礎的模型連接 Encoder 和 Decoder 模塊的組件僅僅是一個固定大小的狀態向量,這使得Decoder無法直接去關注到輸入信息的更多細節。由於 Basic Seq2Seq 的種種缺陷,隨后引入了 Attention 的概念以及 Bi-directional encoder layer 等,能夠取得更好的表現。
參考文獻: https://www.jianshu.com/p/004869fce12c

(2)attention

  seq2seq 模型雖然強大,但如果僅僅是單一使用的話,效果會大打折扣。注意力模型就是基於 Encoder-Decoder 框架下的一種模擬 Human 注意力直覺的一種模型。

  人腦的注意力機制本質上是一種注意力分配的模型,比如說我們在閱讀一篇論文的時候,在某個特定時刻注意力肯定只會在某一行文字描述,在看到一張圖片時,我們的注意力肯定會聚焦於某一局部。隨着我們的目光移動,我們的注意力肯定又聚焦到另外一行文字,另外一個圖像局部。所以,對於一篇論文、一張圖片,在任意一時刻我們的注意力分布是不一樣的。這便是著名的注意力機制模型的由來。
  注意力模型的使用更多是在自然語言處理領域,在機器翻譯等序列模型應用上有着更為廣泛的應用。在自然語言處理中,注意力模型通常是應用在經典的 Encoder-Decoder 框架下的,也就是 RNN 中著名的 N vs M 模型,seq2seq 模型正是一種典型的 Encoder-Decoder 框架
  Encoder-Decoder 作為一種通用框架,在具體的自然語言處理任務上還不夠精細化。換句話說,單純的Encoder-Decoder 框架並不能有效的聚焦到輸入目標上,這使得像 seq2seq 的模型在獨自使用時並不能發揮最大功效。比如說在上圖中,編碼器將輸入編碼成上下文變量 C,在解碼時每一個輸出 Y 都會不加區分的使用這個 C 進行解碼。而注意力模型要做的事就是根據序列的每個時間步將編碼器編碼為不同 C,在解碼時,結合每個不同的 C 進行解碼輸出,這樣得到的結果會更加准確,如下所示:
簡單的注意力模型通常有以上三個公式來描述:
1)計算注意力得分
2)進行標准化處理
3)結合注意力得分和隱狀態值計算上下文狀態 C 。
Attention模型的出現是上述的seq2seq模型存在缺陷,即無論之前的encoder的context有多長,包含多少信息量,最終都要被壓縮成一個幾百維的vector。這意味着context越大,decoder的輸入之一的last state 會丟失越多的信息。對於機器翻譯問題,意味着輸入sentence長度增加后,最終decoder翻譯的結果會顯著變差。

Attention 注意力機制提供了一個可以和遠距離單詞保持聯系的方式, 解決了一個 vector 保存信息不足的問題。

Attention實質上是一種 content-based addressing 的機制,即從網絡中某些狀態集合中選取與給定狀態較為相似的狀態,進而做后續的信息抽取;

說人話就是: 首先根據 Encoder 和 Decoder 的特征計算權值,然后對Encoder的特征進行加權求和,作為Decoder的輸入,其作用是將Encoder的特征以更好的方式呈獻給Decoder,即:並不是所有 context 都對下一個狀態的生成產生影響,Attention 就是選擇恰當的context用它生成下一個狀態。

 
Attention機制的本質思想:
  我們可以這樣來看待Attention機制(參考圖9):將Source中的構成元素想象成是由一系列的<Key,Value>數據對構成,此時給定Target中的某個元素Query,通過計算Query和各個Key的相似性或者相關性,得到每個Key對應Value的權重系數,然后對Value進行加權求和,即得到了最終的Attention數值。所以本質上Attention機制是對Source中元素的Value值進行加權求和,而Query和Key用來計算對應Value的權重系數。
  至於Attention機制的具體計算過程,如果對目前大多數方法進行抽象的話,可以將其歸納為兩個過程:第一個過程是根據Query和Key計算權重系數,第二個過程根據權重系數對Value進行加權求和。而第一個過程又可以細分為兩個階段:第一個階段根據Query和Key計算兩者的相似性或者相關性;第二個階段對第一階段的原始分值進行歸一化處理;這樣,可以將Attention的計算過程抽象為如圖10展示的三個階段。
 
(2)self-attention機制

  通過上述對Attention本質思想的梳理,我們可以更容易理解本節介紹的Self Attention模型。Self Attention也經常被稱為intra Attention(內部Attention),最近一年也獲得了比較廣泛的使用,比如Google最新的機器翻譯模型內部大量采用了Self Attention模型

  在一般任務的Encoder-Decoder框架中,輸入Source和輸出Target內容是不一樣的,比如對於英-中機器翻譯來說,Source是英文句子,Target是對應的翻譯出的中文句子,Attention機制發生在Target的元素Query和Source中的所有元素之間。而Self Attention顧名思義,指的不是Target和Source之間的Attention機制,而是Source內部元素之間或者Target內部元素之間發生的Attention機制,也可以理解為Target=Source這種特殊情況下的注意力計算機制。其具體計算過程是一樣的,只是計算對象發生了變化而已,所以此處不再贅述其計算過程細節。

 
 





 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM