Seq2Seq – Attention – Transformer
文章目錄
-
- Seq2Seq -- Attention -- Transformer
-
- 1.前言
- 2.Seq2Seq模型
- 3.Attention模型
-
- 3.1簡介
- 3.2模型架構
- 3.3其他
- 4.Transformer
-
- 4.1為什麼使用Transformer?
- 4.2模型架構
-
- 4.2.1 Self-Attention
- 4.2.2 Multi-headed Attention
- 4.2.3 位置編碼
- 4.3訓練過程
-
- 4.3.1 輸入
- 4.3.2 Encoders
- 4.3.3 Decoders
- Reference
1.前言
Transformer是谷歌在2017年的論文 Attention Is All You Need 中提出的一種模型,可以很好地處理序列相關的問題,如機器翻譯。在此之前,對于機器翻譯問題一般使用CNN或RNN作為encoder-decoder的模型基礎,如使用RNN的Seq2Seq模型。
機器翻譯一些模型的提出過程如下[3]:

- RNN對于序列問題有很好的效果,最早是使用基于RNN的Seq2Seq模型處理機器翻譯問題,但其序列循環使得在訓練時非常緩慢
- Facebook将Seq2Seq的RNN替換成CNN,用多個CNN疊加放大上下文,重新整理了兩項翻譯任務記錄,并将訓練速度大大提高
- Transformer基于Attention機制實作,沒有使用CNN或RNN結構,可高度并行,訓練快,準确率高
本文将通過對Seq2Seq模型、Attention模型的簡單介紹,引入并重點介紹Transformer模型,加深自己對各個模型的了解。
2.Seq2Seq模型
Seq2Seq模型,Sequence-to-Sequence,即序列到序列的過程。
典型的Seq2Seq模型如下,包含編碼器Encoder和解碼器Decoder兩個部分。
Encoder是一個RNN/LSTM模型,将輸入的句子編碼得到context vector,即
(1) C = F ( x 1 , x 2 , . . . , x m ) C=F(x_1,x_2,...,x_m)\tag{1} C=F(x1,x2,...,xm)(1)
Decoder是Encoder的逆過程,每個狀态由之前的狀态和context vector決定,即
(2) y i = G ( C , y 1 , y 2 , . . . , y i − 1 ) y_i=G(C,y_1,y_2,...,y_{i-1})\tag{2} yi=G(C,y1,y2,...,yi−1)(2)
在這種模型下,所有輸入被壓縮在一個向量中,導緻——
- 無法表達序列資訊
- 當句子長度較大時,容易丢失資訊
3.Attention模型
3.1簡介
2015年提出的Attention模型,使用多個context vector,有效地解決了使用Seq2Seq模型難以處理長句子的問題。
注意力機制(Attention Mechanism)源于對人類視覺的研究。在認知科學中,由于資訊處理的瓶頸,人類會選擇性地關注所有資訊的一部分,同時忽略其他可見的資訊。上述機制通常被稱為注意力機制。
在機器翻譯中,注意力機制衡量輸出單詞與每個輸入單詞的關聯程度,關聯程度更大的輸入單詞具有更大的權重,使得輸出單詞可以更關注其對應的語義。比如,當翻譯
I eat an apple
時,輸出
吃
時應該重點關注
eat
這個單詞,即
eat
的權重應該比其他單詞更高。
3.2模型架構
最先的Attention模型[5]架構如下:
- 輸入:待翻譯的句子
- Encoder:雙向的RNN或LSTM,計算得到每個位置的隐狀态,下面隻用 h i h_i hi 表示
- Decoder:對目前輸出位置 t t t,使用上一個隐狀态 s t − 1 s_{t-1} st−1 與Encoder的結果計算,如下:
- 衡量輸出位置 i i i 與輸入位置 j j j 之間的比對程度, a a a 可以是點積或其他運算——
(3) e i j = a ( s i − 1 , h j ) e_{ij}=a(s_{i-1},h_j)\tag{3} eij=a(si−1,hj)(3)
(4) α i j = e x p ( e i j ) ∑ k e x p ( e i k ) \alpha_{ij}=\frac{exp(e_{ij})}{\sum_k exp(e_{ik})}\tag{4} αij=∑kexp(eik)exp(eij)(4)
- 權重求和得到context vector——
- 使用上一個隐狀态、上一個輸出、context vector更新目前狀态——
- 根據目前狀态、上一個輸出、context vector計算目前輸出——
通過為每個輸出位置計算一個context vector,使得每個位置的輸出可以關注到輸入中最相關的部分,效果比傳統模型更好。
3.3其他
Attention模型提出後,出現了許多Attention模型的變體,包括——
- Soft Attention、Global Attention、動态 Attention
- 三者是同一種Attention,即上述結構,對輸入的每個位置都計算對齊機率
- Hard Attention
- 同樣對每個位置計算對齊機率,但隻将最高的一個置為1,其餘置為0
- local Attention
- 隻計算一個視窗内的位置的對齊機率,減少計算量
另外,上述模型計算 c t c_t ct 時使用的是前一個狀态 s t − 1 s_{t-1} st−1,也有一些模型中直接使用目前狀态 s t s_{t} st,如下[4]:
計算過程為:
(8) s t = f ( s t − 1 , y t − 1 ) s_t=f(s_{t-1},y_{t-1})\tag{8} st=f(st−1,yt−1)(8)
(9) α t j = a ( s t , h j ) ∑ k a ( s t , h k ) \alpha_{tj}=\frac{a(s_t,h_j)}{\sum_k a(s_t,h_k)}\tag{9} αtj=∑ka(st,hk)a(st,hj)(9)
(10) c t = ∑ j = 1 T α t j h j c_t=\sum_{j=1}^T \alpha_{tj}h_j\tag{10} ct=j=1∑Tαtjhj(10)
(11) y t = g ( y t − 1 , s t , c t ) y_t=g(y_{t-1},s_t,c_t)\tag{11} yt=g(yt−1,st,ct)(11)
4.Transformer
4.1為什麼使用Transformer?
RNN:其結構使得其天然适合處理NLP領域的問題,但最大的瓶頸是難以并行化,盡管有一些并行化思路,但仍然隻能并行很小一部分。
CNN:卷積核抽取類似n-gram的特征,但難以處理長距離依賴問題,且pooling層會丢失位置資訊。通過将CNN層數加深可以提高其處理長距離依賴問題的能力,同時去除pooling層保留位置資訊,使得CNN可以更适合處理NLP問題。在并行能力上,CNN各個卷積核之間沒有依賴,非常适合并行,是以速度比RNN快得多。
摘錄來自[6]中的關于RNN、CNN、Transformer的對比。(此處的RNN和CNN指在RNN和CNN基礎上增加Attention機制等改進版)
- 語義特征提取能力:RNN與CNN能力相近,而Transformer要超過兩者4-8個百分點
- 長距離特征捕獲能力:RNN與Transformer能力相近,CNN則弱得多(盡管已經加深了層數)
- 任務綜合特征抽取能力:Transformer 顯著強于 RNN 和 CNN,CNN略強于RNN
- 并行計算能力及運作效率:Transformer 和 CNN 差不多,都遠遠遠遠強于 RNN
從上面的對比可以看出,Transformer在效果和速度上都具有很好的表現。
4.2模型架構
Transformer模型架構如下[1]:
Encoders由N個Encoder組成,Decoders由N個Decoder組成,圖示為 N = 6 N=6 N=6 。每個Encoder和Decoder内部簡化結構如下:
在了解其内部具體流程之前,先了解下論文中提出的一些概念。
4.2.1 Self-Attention
Attention的目的是要算出一個context vector,原始的Attention模型使用①輸出目前位置的隐狀态與②輸入所有位置的隐狀态計算比對程度,并根據比對程度對③輸入所有位置的隐狀态進行權重求和得到context vector。
在Self-Attention中,輸入輸出都是句子本身,對原始Attention做一個轉化——
- 把目前位置看成輸出,其映射後的隐狀态記為query(上面的①)
- 把目前位置看成輸入,其映射後的隐狀态記為key(上面的②)
- 把目前位置看成輸入,其用于權重求和的隐狀态記為value(上面的③)
在NLP的領域中,Key, Value通常就是指向同一個文字隐向量[7],即key=value。
有了上述了解,Self-Attention的過程也就跟原始的Attention模型基本相同,如下[2]:
- Self-Attention對每個輸入(句子)的embedding,計算得到3個向量,分别為query Q Q Q,key K K K,value V V V
-
對第 i i i 個單詞,使用query與所有單詞的key點乘計算比對得分,并除以上述向量次元的平方根 d k \sqrt{d_k} dk
(也就是論文中提出的
scaled dot-Product attention
),使得點積結果不會過大,訓練過程梯度更穩定
(12) s c o r e ( i , j ) = Q i K j d score(i,j)=\frac{Q_iK_j}{\sqrt{d}}\tag{12} score(i,j)=d
QiKj(12)
-
對分數進行softmax得到權重,并對value權重求和得到目前單詞的向量映射
(13) α i j = e x p ( s c o r e ( i , j ) ) ∑ k e x p ( s c o r e ( i , k ) ) \alpha_{ij}=\frac{exp(score(i,j))}{\sum_kexp(score(i,k))}\tag{13} αij=∑kexp(score(i,k))exp(score(i,j))(13)
(14) Z i = ∑ j α i j V j Z_i=\sum_j \alpha_{ij}V_j\tag{14} Zi=j∑αijVj(14)
實際應用時直接使用矩陣進行運算,即
(15) Z = s o f t m a x ( Q K T d ) V Z=softmax(\frac{QK^T}{\sqrt{d}})V\tag{15} Z=softmax(d
QKT)V(15)
4.2.2 Multi-headed Attention
論文中使用Multi-headed機制進一步完善了Self-Attention層,具體地,對輸入的 Q , K , V Q,K,V Q,K,V 進行多次不同的映射,相當于把句子投影到不同的子空間(representation subspaces) 中,提高其表達能力。其結構如下[2]:
其工作流程如下[1]:
- 對輸入的句子的embedding,映射為 { Q ( i ) , K ( i ) , V ( i ) } \{Q^{(i)},K^{(i)},V^{(i)}\} {Q(i),K(i),V(i)} 矩陣,即相當于對 Q , K , V Q,K,V Q,K,V 做多次不同映射
- 按照self-Attention分别計算得到 { Z ( i ) } \{Z^{(i)}\} {Z(i)},并使用concat連接配接結果得到 Z o Z_o Zo
- 為了使結果與self-Attention的shape一緻,再乘上 W o W_o Wo 将其映射為想要的shape
4.2.3 位置編碼
上述Attention過程沒有考慮到輸入序列中單詞的順序,transformer為每個輸入單詞的詞嵌入上添加了一個新向量——位置向量,即
embedding_with_time_signal = positional_encoding + embedding
。位置向量遵循一定規則生成,此處不涉及。
此外,上述結構的每一層後都要增加一個layer-normalization步驟,如下:
綜合上述的各個子產品,一個完整的Transformer結構大緻如下[1]:
4.3訓練過程
了解上述各概念後,梳理一下Transformer的整個訓練過程如下:
4.3.1 輸入
輸入是句子的embedding表示,加上位置向量後輸入到第一個Encoder裡
4.3.2 Encoders
Encoders包含N個結構相同的Encoder,每個Encoder包含一個Multi-headed Attention層和一個前饋層,包含以下幾個步驟:
- Multi-headed Attention,Layer normalization
- Feed forward,Layer normalization
每層的輸出和輸入具有相同的shape
4.3.3 Decoders
Decoders包含N個結構相同的Decoder,每個Decoder包含一個Multi-headed Attention層、一個Encoder-Decoder Attention層、一個前饋層,訓練時是逐個詞生成的,即一個句子Decoders要執行多次,包含以下幾個步驟:
- 輸入是上一個生成的詞,初始化為??(之後看代碼實作)
- 對輸入的單詞做Multi-headed Attention,Layer normalization
- 做Encoder-Decoder Attention,與上一步的差別在于query是輸入的詞,但key和value來自Encoders最後一層的輸出
- Feed forward,Layer normalization
- 對輸出做線性映射,用softmax生成最可能的詞,作為下一輪的輸入,直到輸出一個特殊的符号
<end of sentence>
Reference
- 圖解Transformer
- Attention Is All You Need(Transformer)算法原了解析
- 從Seq2seq到Attention模型到Self Attention(一)
- 自然語言進行中的Attention機制總結
- Neural Machine Translation by Jointly Learning to Align and Translate
- Transformer一統江湖:自然語言處理三大特征抽取器比較
- 從Seq2seq到Attention模型到Self Attention(二)