iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 27
0

繼 Attention model 之後,由於 recurrent 架構的特性一直無法善用 GPU 的資源做加速。

這時 Google Brain 團隊就看到別人在用 self-attention 機制,也是基於 recurrent 架構,解決了不少問題,用在閱讀理解、摘要、文字蘊涵(textual entailment)及語句表示的問題上。

Google Brain 團隊就提出了史上第一個不需要依賴任何 recurrent 架構的 self-attention 機制模型,Transformer。

(跟變形金剛一樣的名字耶!帥吧!)

Transformer

這個架構上延續了 encoder-decoder 的架構,encoder 會將輸入的序列 https://chart.googleapis.com/chart?cht=tx&chl=(x_1%2C%20x_2%2C%20...%2C%20x_n) 轉換成 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmathbf%7Bz%7D%20%3D%20(z_1%2C%20z_2%2C%20...%2C%20z_n),而 decoder 會將 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmathbf%7Bz%7D 轉換成 https://chart.googleapis.com/chart?cht=tx&chl=(y_1%2C%20y_2%2C%20...%2C%20y_m),一次轉換一個。在每一步當中,模型都是 auto-regressive 的,也就是說,前一次產生的結果會被當成下一次的輸入進行運算。

整個 Transformer 的架構就是在 encoder 及 decoder 上使用了 stacked self-attention 以及全連接的網路。我們來看圖,在圖的左半邊就是 encoder,右半邊就是 decoder:

Encoder

Encoder 由 N 個完全一樣的層堆疊(stack)起來(https://chart.googleapis.com/chart?cht=tx&chl=N%20%3D%206)。每層包含兩個子層,第一個是一個 multi-head self-attention 的機制,第二個是簡單的全連接層網路。每個子層外都包了 residual connection 以及 layer normalization,看起來就像 https://chart.googleapis.com/chart?cht=tx&chl=LayerNorm(x%20%2B%20Sublayer(x))

Residual connection 主要可以將前層的資訊繞過一層,直接與下一層做運算。Layer normalization 有穩定學習效果的作用。

Decoder

Decoder 大致上與 encoder 相同,差別是在用了兩個 multi-head self-attention 的機制,所以總共有3個子層。

Attention

在 attention 的機制上,我們在上一篇講過了。這邊我們要進一步探討這個模型用到的 scaled dot product attention。在這邊就是分成 query、key 跟 value 三者,首先要先將 query 跟所有 key 做過一次的內積,並且除以 https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bd_k%7D,然後過一次 softmax 函數。計算到這邊就是權重的部份,最後權重再跟 value 去計算結果。其中 https://chart.googleapis.com/chart?cht=tx&chl=d_k 是 key 向量的維度。公式在這邊:

https://chart.googleapis.com/chart?cht=tx&chl=Attention(Q%2C%20K%2C%20V)%20%3D%20softmax(%5Cfrac%7BQK%5ET%7D%7B%5Csqrt%7Bd_k%7D%7D)V

圖的左邊是 scaled dot product attention。為什麼要除以 https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bd_k%7D 呢?文章中有提到,內積會讓整個結果變很大,會讓梯度變得極小,這會不利於訓練,所以需要除以 https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bd_k%7D

在圖的右邊,是 multi-head self-attention,核心就是平行計算多個 scaled dot product attention 的結果,並把這些結果都串接起來。有了這樣的機制就可以不只注意一個地方,可以有多個關注點。

在 self-attention 的機制,意味著所有的 query、key 跟 value 都來自於自己。不像之前的 attention 橫跨 encoder 跟 decoder,所以資訊會從雙方而來。

在 Transformer 模型當中,有一個是 encoder-decoder attention layer,然後 encoder 跟 decoder 各有一個 self-attention layer,就是各自的第一個子層。

如此構成了整個 Transformer 模型,如果各位想知道這個模型的應用跟效能的話,請移駕去看論文,論文寫的還蠻簡單易懂的。

當然這麼模型當中有不少巧思在裡頭,有需要說明的話就提問囉!


上一篇
27 Attention model
下一篇
29 Autoregressive generative model
系列文
機器學習模型圖書館:從傳統模型到深度學習31

尚未有邦友留言

立即登入留言