未完待續,寫作中可能會有大改版,依然和之前一樣看完就懂。

Attention Is All You Need?

arxiv.org

Scaled Dot-Product Attention

文章中對於Scaled Dot-Product Attention定義如下:

假設有:Qin R^{n	imes d_k}Kin R^{m	imes d_k}Vin R^{m	imes d_v},則: 	ext{Attention}(Q,K,V)=	ext{softmax}(frac{QK^T}{sqrt{d_k}})V

如何理解Scaled Dot-Product Attention?其中的Q,K,V是什麼?

不妨回憶一下之前文章中提到的LuongAttention的實現方式, ar{h}_s代表Encoder狀態,h_t代表Decoder狀態。

LuongAttention
  • 首先,計算Decoder的 t 時刻隱藏層狀態 h_t 對Encoder每一個隱藏層狀態  ar{h}_s 權重 a_t(s) 數值:

a_t(s)=frac{exp(	ext{score}(h_t,ar{h}_s))}{sum_{s}^{}{}exp(	ext{score}(h_t,ar{h}_{s}))}

  • 其次,利用權重 a_t(s) 計算所有隱藏層狀態  ar{h}_s 加權之和 c_t ,即生成新的大小為 [n_h,1] 的Context狀態向量,即與 h_t 對應的注意力向量:

c_t=sum_{s}^{}{a_t(s)cdotar{h}_{s}}

接下來對上面的公式稍作變換,對LuongAttention定義Query,Keys,Values:

Decoder狀態 Query(Q): Q=(h_1, h_2, ..., h_t,...)

Encoder狀態 Keys(K):K=(ar{h}_{1},ar{h}_{2},...,ar{h}_{T_x})Values(V): V=(ar{h}_{1},ar{h}_{2},...,ar{h}_{T_x})

由於 V=f(K)=K ,顯然 (K,V) 是一一對應的。對於LuongAttention中的注意力向量 c_t 可以寫成:

c_t=sum_{s}^{}{a_t(s)cdotar{h}_{s}}=	ext{softmax}(	ext{socre}(h_t,K))cdot V

如果這裡的 	ext{score} 採用Dot方式計算:

	ext{score}(h_t,ar{h}_s) =  h_t^T ar{h}_s

則寫成矩陣形式(非嚴格數學推理):

	ext{Attention}(Q,K,V)=	ext{softmax}(Qcdot K^T)cdot V

看到這裡就很清楚了,所謂的「Scaled Dot-Product Attention」並不是什麼新東西,其本質就是一個注意力機制,將序列 Q_{ n×d_k} 編碼成了一個新的 	ext{Attention}(Q,K,V)_{n×d_v} 序列。這種注意力的定義並不新鮮,但由於 Google 的影響力,可以認為是正式地提出了這個定義,並將其視為一個層看待。

Multi-Head Attention

Multi-Head Attention

egin{align} 	ext{MultiHead}(Q, K, V ) &= 	ext{concat}(	ext{head}_1, ..., 	ext{head}_h)W^O \ 	ext{where} 	ext{head}_i &= 	ext{Attention}(QW^Q_i,KW^K_i,VW^V_i)end{align}

其中 W_i^Qin R^{d_{	ext{model}}	imes d_k}W_i^Kin R^{d_{	ext{model}}	imes d_k}W_i^Vin R^{d_{	ext{model}}	imes d_v}W^Oin R^{hd_v 	imes d_{	ext{model}}}

一起看一個例子

參考文獻

The Illustrated Transformer?

jalammar.github.io
圖標
The Annotated Transformer?

nlp.seas.harvard.edu
圖標

推薦閱讀:
相關文章