02.19 機器學習筆記04:機器翻譯;注意力機制與Seq2seq;Transformer

注意力機制

在“編碼器—解碼器(seq2seq)”⼀節⾥,解碼器在各個時間步依賴相同的背景變量(context vector)來獲取輸⼊序列信息。當編碼器為循環神經⽹絡時,背景變量來⾃它最終時間步的隱藏狀態。將源序列輸入信息以循環單位狀態編碼,然後將其傳遞給解碼器以生成目標序列。然而這種結構存在著問題,尤其是RNN機制實際中存在長程梯度消失的問題,對於較長的句子,我們很難寄希望於將輸入的序列轉化為定長的向量而保存所有的有效信息,所以隨著所需翻譯句子的長度的增加,這種結構的效果會顯著下降。


與此同時,解碼的目標詞語可能只與原輸入的部分詞語有關,而並不是與所有的輸入有關。例如,當把“Hello world”翻譯成“Bonjour le monde”時,“Hello”映射成“Bonjour”,“world”映射成“monde”。在seq2seq模型中,解碼器只能隱式地從編碼器的最終狀態中選擇相應的信息。然而,注意力機制可以將這種選擇過程顯式地建模。


機器學習筆記04:機器翻譯;注意力機制與Seq2seq;Transformer


注意力機制框架

Attention 是一種通用的帶權池化方法,輸入由兩部分構成:詢問(query)和鍵值對(key-value pairs)。對於一個query來說,attention layer 會與每一個key計算注意力分數並進行權重的歸一化,輸出的向量則是value的加權求和,而每個key計算的權重與value一一對應。


機器學習筆記04:機器翻譯;注意力機制與Seq2seq;Transformer


引入注意力機制的Seq2seq模型

本節中將注意機制添加到sequence to sequence 模型中,以顯式地使用權重聚合states。下圖展示encoding 和decoding的模型結構,在時間步為t的時候。此刻attention layer保存著encodering看到的所有信息——即encoding的每一步輸出。在decoding階段,解碼器時刻的隱藏狀態被當作query,encoder的每個時間步的hidden states作為key和value進行attention聚合. Attetion model的輸出當作成上下文信息context vector,並與解碼器輸入拼接起來一起送到解碼器:


機器學習筆記04:機器翻譯;注意力機制與Seq2seq;Transformer


下圖展示了seq2seq機制的所以層的關係,下面展示了encoder和decoder的layer結構


機器學習筆記04:機器翻譯;注意力機制與Seq2seq;Transformer


解碼器

由於帶有注意機制的seq2seq的編碼器與之前章節中的Seq2SeqEncoder相同,所以在此處我們只關注解碼器。我們添加了一個MLP注意層(MLPAttention),它的隱藏大小與解碼器中的LSTM層相同。然後我們通過從編碼器傳遞三個參數來初始化解碼器的狀態:

  • the encoder outputs of all timesteps:encoder輸出的各個狀態,被用於attetion layer的memory部分,有相同的key和values
  • the hidden state of the encoder’s final timestep:編碼器最後一個時間步的隱藏狀態,被用於初始化decoder 的hidden state
  • the encoder valid length: 編碼器的有效長度,藉此,注意層不會考慮編碼器輸出中的填充標記(Paddings)


在解碼的每個時間步,我們使用解碼器的最後一個RNN層的輸出作為注意層的query。然後,將注意力模型的輸出與輸入嵌入向量連接起來,輸入到RNN層。雖然RNN層隱藏狀態也包含來自解碼器的歷史信息,但是attention model的輸出顯式地選擇了enc_valid_len以內的編碼器輸出,這樣attention機制就會盡可能排除其他不相關的信息。


Transformer

在之前的章節中,我們已經介紹了主流的神經網絡架構如卷積神經網絡(CNNs)和循環神經網絡(RNNs)。讓我們進行一些回顧:


  • CNN:易於並行化,卻不適合捕捉變長序列內的依賴關係。
  • RNN:適合捕捉長距離變長序列的依賴,但是卻難以實現並行化處理序列。


為了整合CNN和RNN的優勢,[Vaswani et al., 2017] 創新性地使用注意力機制設計了Transformer模型。該模型利用attention機制實現了並行化捕捉序列依賴,並且同時處理序列的每個位置的tokens,上述優勢使得Transformer模型在性能優異的同時大大減少了訓練時間。


下圖展示了Transformer模型的架構,與9.7節的seq2seq模型相似,Transformer同樣基於編碼器-解碼器架構,其區別主要在於以下三點:

  • Transformer blocks:將seq2seq模型重的循環網絡替換為了Transformer Blocks,該模塊包含一個多頭注意力層(Multi-head Attention Layers)以及兩個position-wise feed-forward networks(FFN)。對於解碼器來說,另一個多頭注意力層被用於接受編碼器的隱藏狀態。
  • Add and norm:多頭注意力層和前饋網絡的輸出被送到兩個“add and norm”層進行處理,該層包含殘差結構以及層歸一化。
  • Position encoding:由於自注意力層並沒有區分元素的順序,所以一個位置編碼層被用於向序列元素裡添加位置信息。


機器學習筆記04:機器翻譯;注意力機制與Seq2seq;Transformer


多頭注意力層

在我們討論多頭注意力層之前,先來迅速理解以下自注意力(self-attention)的結構。自注意力模型是一個正規的注意力模型,序列的每一個元素對應的key,value,query是完全一致的。如圖10.3.2 自注意力輸出了一個與輸入長度相同的表徵序列,與循環神經網絡相比,自注意力對每個元素輸出的計算是並行的,所以我們可以高效的實現這個模塊。


機器學習筆記04:機器翻譯;注意力機制與Seq2seq;Transformer


多頭注意力層包含 h 個並行的自注意力層,每一個這種層被稱為一個head。對每個頭來說,在進行注意力計算之前,我們會將query、key和value用三個現行層進行映射,這 h 個注意力頭的輸出將會被拼接之後輸入最後一個線性層進行整合。


機器學習筆記04:機器翻譯;注意力機制與Seq2seq;Transformer


基於位置的前饋網絡

Transformer 模塊另一個非常重要的部分就是基於位置的前饋網絡(FFN),它接受一個形狀為(batch_size,seq_length, feature_size)的三維張量。Position-wise FFN由兩個全連接層組成,他們作用在最後一維上。因為序列的每個位置的狀態都會被單獨地更新,所以我們稱他為position-wise,這等效於一個1x1的卷積。


Add and Norm

除了上面兩個模塊之外,Transformer還有一個重要的相加歸一化層,它可以平滑地整合輸入和其他層的輸出,因此我們在每個多頭注意力層和FFN層後面都添加一個含殘差連接的Layer Norm層。這裡 Layer Norm 與7.5小節的Batch Norm很相似,唯一的區別在於Batch Norm是對於batch size這個維度進行計算均值和方差的,而Layer Norm則是對最後一維進行計算。層歸一化可以防止層內的數值變化過大,從而有利於加快訓練速度並且提高泛化性能。


機器學習筆記04:機器翻譯;注意力機制與Seq2seq;Transformer


分享到:


相關文章: