iT邦幫忙

2021 iThome 鐵人賽

DAY 27
0
自我挑戰組

新手也想開始認識機器學習系列 第 27

Dat 27 Transformer

我們先來回顧一下,我們之前介紹了 RNN ,而它的架構就是輸入一個序列,得到另一個序列。但是它有些致命的缺陷,例如梯度消失、梯度爆炸和過度依賴等。因此後來人們提出了 LSTM 來進行改善,然而 RNN 本身的設計結構在處理序列資料時必須一個一個處理,無法進行平行運算,大幅度拉長了運算時間。

由於 RNN 的結構難以進行平行運算,因此 Google 在2017年發表了一篇論文 Attention Is All You Need,在該篇論文中 Google 提出了一種不使用 RNN、CNN,而是使用自注意力機制 (self-attention mechanism) 的網路架構 — Transformer。不是變形金剛

接下來我們介紹的內容有不少都是參考自台大李宏毅教授的網路教學,因為真的講的很好,所以如果你有興趣的話建議還是聽完全程喔!

介紹

Transformer 是一個 Seq2Seq(Sequence to Sequence) 模型,並採用 Encoder - Decoder 的框架,以下是一張簡單的示意圖:


圖片來源:https://ai.googleblog.com/2016/09/a-neural-network-for-machine.html

Encoder 跟 Decoder 之間的線條代表注意力(Attention),線條越粗代表下面的 Decoder 在生成某英文字時越關注上方的某些中文字。

結構

以下是 Transformer 的模型結構:

圖中左方的部份為 Encoder,右方的部份為 Decoder。可以注意到左右兩方的架構其實頗為相似,詳細的差異我們之後再做介紹。
在 Encoder 及 Decoder 內通常都包含了許多層結構相同的 blocks,裡頭每層都會有 multi-head attention 以及 Feed Forward Network。

首先我們來看 Encoder 的部份:

我們剛才提到 Encoder 裡面會分成很多的 block ,我們會先將一整排輸入的序列資料轉換成一整排向量(vector),接著每一個 block 的處理步驟如下:

  1. 首先將輸入的 vector 透過 self-attention 考慮所有的輸入資訊後,輸出一排 vector。(關於 self-attention 是怎麼考慮所有輸入資訊的之後再介紹)
  2. 將這一排 vector 丟到 Fully Connected(FC) 的 feed forward network 裡面。
  3. 最後輸出的 vector 就是 block 的輸出。

然而在原來的 Transformer 裡面 block 做的事情是更複雜的,詳情如下:

假設我們將按照剛才的方法,將輸入的 vector 經過 self-attention 後輸出的結果稱為 a ;我們還要將原本的輸入(我們先稱呼它為 b )拉過來與 a 相加得到 a+b 。這樣子的網路架構叫做 residual connection。

之後我們會將 a+b 的結果去做 layer normalization。它會把輸入的這個向量計算它的平均值$m$(mean)跟標準差$\sigma$(standard deviation),算出來後再根據公式:將輸入減去平均值$m$除以標準差$\sigma$。到這裡我們才真正得到了FC network 的輸入。

而 FC network 這邊也有 residual 的架構,所以我們會把 FC network 的 input 跟它的 output 加起來得到新的輸出,然後再做一次 layer normalization。這個才是 Transformer Encoder 裡面一個 block 真正的輸出。

現在,讓我們看回 Encoder 的結構圖:

首先在 input 的地方,透過 Embedding 將輸入轉化為向量,然後加上 positional encoding (因為如果只用 self-attention 會缺乏未知資訊 )

接下來我們看到 Multi-Head Attention,這個就是 self-attention 的 block ;而 Add&Norm 就是 residual 加上layer normalization 的意思。

最後,經過 FC 的 feed forward network 後再做一次 Add&Norm 才是整塊 block 的輸出,而這個 block 會重複 n 次。

接著再讓我們看向 Decoder:

輸入前一個時間得到的序列,然後同樣進行 Embedding 與 Positional Encoding 後進入進入重複 N 次的 block。
不一樣的是我們剛進去時的 Multi-Head Attention 多了一個 "Masked" (注意紅框部份),什麼意思呢?

Masked 的意思就是,模型只會關注他已經產生出來的部分,不會不小心關注未來產生的詞。由於 Decoder 的輸出是一個一個產生的,所以它沒有辦法考慮它未來的輸入。這樣講似乎好像有點模糊,之後講到 self-attention 時會再講清楚一點。

重複 N 次 block 後,經過 Linear Layer 與 Softmax ,就可以得到我們要的輸出機率分佈,我們就可以依據這個分佈抽樣或是取機率最大的值,來得到輸出的序列了。

今天說了不少,但是還有一個最關鍵的 self-attention 機制沒有詳細說明,明天再來好好介紹一下它是怎麼關注到所有輸入的 Sequence 並進行平行處理吧!

reference

https://medium.com/ching-i/transformer-attention-is-all-you-need-c7967f38af14
https://leemeng.tw/neural-machine-translation-with-transformer-and-tensorflow2.html
https://easyai.tech/ai-definition/encoder-decoder-seq2seq/
台大李宏毅教授的網路教程


上一篇
Day 26 長短期記憶網路 LSTM
下一篇
Day 28 自注意力(Self-Attention) 機制
系列文
新手也想開始認識機器學習30

尚未有邦友留言

立即登入留言