從seq2seq到attention再到Transformer

seq2seq

首先我們介紹下seq2seq,它首次應用在機器翻譯的seq2seq,也就是enoder-decoder架構。論文見《Sequence to Sequence Learning with Neural Networks》
在這裏插入圖片描述
我們以RNN舉例說明,seq2seq是將輸入單詞的embedding輸入逐步輸入encoder中,每個時刻encoder的輸出取決於當前時刻的輸入和上一時刻的隱狀態(即上一時刻的輸出),最後的隱狀態作爲decoder的輸入,decoder之後的輸出也是取決與上一時刻的隱狀態和上一時刻的輸出單詞的embedding,最終輸出的單詞是decoder輸出的隱狀態全聯接softmax之後得到最大概率的那個單詞,這樣最後一步步輸出單詞序列。這樣做的缺點是當輸入序列較長的時候,只靠encoder的最後狀態很難捕捉前後依賴關係,因此引入注意力機制即attention。

注意力機制(attention)

注意力機制最早出現在CV領域,表示人看一物體其實對不同部分的注意力不一樣,對關鍵吸引人的地方注意力會多些。論文見《Neural Machine Translation by Jointly Learning to Align and Translate》
attention的具體應用如下:對於seq2seq,爲了解決上述缺點,每一時刻預測輸出單詞的時候不止依賴decoder的隱狀態,還依賴encoder的輸入歷史信息,這裏我們定義context vector表示它,context vector爲輸入encoder每個時刻隱狀態的線性加權平均得到。
在這裏插入圖片描述
假設輸入序列長度爲TT,則jj時刻的context vector計算cj^=i=0Tαijh^j\hat{c_j}=\sum_{i=0}^{T}\alpha_{ij}\hat h_j其中係數αij\alpha_{ij}爲第j個輸出對i時刻encoder隱狀態的注意力(意思就是對當前時刻輸出的重要性), 並且i=0Tαij=1\sum_{i=0}^T{\alpha_{ij}} = 1。其中第j個輸出i時刻輸入的注意力αij\alpha_{ij}的計算公式爲αij=exp(eij)k=0Texp(eik)\alpha_{ij}=\frac{exp(e_{ij})}{\sum_{k=0}^Texp(e_{ik})}
其中eij=score(h^i,s^j)e_{ij}=score(\hat h_i, \hat s_j)(score可以是點乘dot), s^j\hat s_j爲decoder第jj個輸出的隱狀態,h^i\hat h_iii時刻encoder輸入的隱狀態. 計算完後的context vector涵蓋之前所有encoder的輸入信息,和上一時刻的輸出單詞embeding進行concat作爲新的decoder輸入,這裏注意初始context vector爲全0向量。所以說這樣相比不帶attention的seq2seq能對輸入序列的前後依賴關係更好的建模。

Transformer

可以發現seq2seq的enoder-decoder架構加入attention機制後,對長序列輸入的前後依賴關係能更好的建模。然而它也存在缺點,因爲enoder-decoder架構均採用RNN建模,RNN的天然本質註定很難並行(當前時刻輸入依賴上一時刻的輸出),並且存在梯度爆炸瀰漫等問題(LSTM, GRU等改進只能減少不能完全避免),CNN是通過疊加感受野的方式(需要非常深的網絡才能捕捉較長的依賴),而attention有着無視距離的優勢並且可以並行的優勢,因此提出了拋棄RNN而純依賴attention對輸入序列的前後依賴進行建模的transformer,論文見《Attention is all you need》

注意力的重新定義

回顧seq2seq中的attention,是對encoder的歷史隱狀態做線性加權平均,係數越高的隱狀態則表示當前時刻的輸出和其越相關。這個係數是從當前時刻decoder的隱狀態和encoder的隱狀態交互計算(比如dot product)後取softmax得到的,其實我們可以看成爲以下機制
在這裏插入圖片描述
如圖,給定query進行kv對查詢,分別計算query和不同key的相似度,經過softmax後得到注意力係數,後對value加權平均得到attention value.即如下公式
Attention(Q,K,V)=softmax(QKTdk)V Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V
論文用的就是這種scaled dot product的attention機制,圖片表示如下:
在這裏插入圖片描述
這裏Q爲n×dkn\times d_k的矩陣,K爲m×dkm\times d_k的矩陣,V爲m×dkm\times d_k的矩陣,因此,一個attention層可以看作把n×dkn\times d_k的輸入序列編碼成了n×dvn\times d_v的序列
注意,這裏scale by 1dk\frac{1}{\sqrt{d_k}}是爲了平滑softmax(當dkd_k過大導致dot product過大的值,softmax的梯度過小)

特別的,對於self-attention就是K,Q, V均相等的情況,自己對自己計算相互的依賴關係。

模型架構

在這裏插入圖片描述

Encoder

編碼器爲相同N=6個layer進行stack得到,每層有兩個子層,分別爲multi-head的self-attention和fully connect layer,這裏採用了ResNet的思想建立了一個short-cut, LayerNorm(x + Sublayer(x))。
Encoder的輸入,最底層爲sequence的embedding,之後每層的輸入爲上一層的輸出。

Decoder

解碼器同樣爲N=6個相同的layer進行stack得到。和encoder不同的是,這裏有兩個multi-head attention。最底下的masked multi-head self-attention是爲了保證輸出只能看到當前時刻之前的輸出結果。上一層的multi-head attention也叫encoder-decoder attention,它並不是self-attention,是用底層的multi-head self-attention attention的輸出作爲Q,encoder的輸入作爲K和V,這樣每次decoder的輸出都攜帶了各個位置的輸入信息,類似於傳統的seq2seq的attetnion機制。
Decoder當前時刻的輸入爲encoder的輸出和Decoder所看到的所有詞的embedding,初始時刻假設看到的詞一般爲特殊字符,比如<\s>,圖中即shifedt right

multi-head attention

在這裏插入圖片描述
論文裏的multi-head計算如下在這裏插入圖片描述
這裏head的個數爲h=8. 每個head和剛纔的注意力計算公式意義,第ii個頭用WiQW_i^Q,WiKW_i^KWiVW_i^V進行映射,最後映射到緯度爲dvd_v,這樣不同的head的Q,K,V就被映射到不同的子空間進行學習. WOW^O將最後緯度還原成dmodeld_{model}

position encoding

transformer並沒有用到CNN或者RNN類似的結構,輸入的embedding無法體現詞的位置信息,因此對於輸入的embedding,需要增加含位置信息的position encoding
在這裏插入圖片描述
position encoding公式如上圖所示,pos就是位置,i是embedding向量的所在位置,由公式可以知道奇數位置採用cos,偶數位置採用sin;最終得到的position encoding向量與初始的embedding相加最爲最終的輸入。

對於爲什麼要用這個函數,論文裏是這樣說的

We chose this function because we hypothesized it would allow the model to easily learn to attend by relative positions, since for any fixed offset kk, PEpos+kPE_{pos+k} can be represented as a linear function of PEposPE_{pos}

作者更多的是憑經驗得到的,因爲他想讓模型更好的學會相對位置關係,在這個公式中,對於embedding向量的某個固定位置kk的數值PEpos+kPE_{pos+k},都可以用初始位置PEposPE_{pos}線性表示。這點在數學利用三角函數的性質是可以證明的。

why self-attention

  1. 每層網絡的時間複雜度
  2. 並行計算量
  3. 捕捉長距離依賴關係的能力(maximum path length)
    在這裏插入圖片描述
    大多數情況d>>n,因此self-attention的時間複雜度最低

總結

優點 :計算量減少,可並行計算增加,遠程依賴關係之間的路徑長度小(通過矩陣dot poduct即可建立依賴關係)

缺點:有些rnn可以解決的問題transformer做的不好,比如copy string,或者inference時碰到的sequence長度比training更長的處理很差;圖靈不完備

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