**Transformer**係喺2017年推出嘅深度學習模型，攞關注機制（多頭、自關注）嚟求權重畀啲成批輸入數據入便嘅每個部份嘅，並藉此唔受順序限制噉去學識各部份對彼此啲影響嘅大細、啲可能會跨好幾重遠嘅，最終去生成返啱啲嘅數據。初初Transformer主要使喺自然語言處理（NLP）領域 ，之後個應用領域亦都擴展到電腦視覺。

似遞迴神經網絡（RNN）一樣，Transformers設計出嚟係攞嚟處理啲順序數據（譬如自然語言）嘅，嚟去執行翻譯同文本摘要生成之類啲任務。之戥RNN唔同，Transformer訓練嗰陣唔使照序處理啲順序數據，而可以憑關注機制幫輸入序迾嘅任意一位捇返啲上下文，啲可能離個位爭好遠嘅。譬如，若果輸入數據係自然語言語句，Transformer可以學識唔使先去處理個開頭、再處理個結尾，而係對於每個詞都識別出邊啲內容係賦予佢意涵嘅。鑑於呢個特點，Transformer允許嘅平行運算多過RNN，可以藉此減少訓練時間。

Transformer經已速度成為唨NLP問題嘅首選模型，同時取代唨啲先前嘅RNN模型似長短期記憶（LSTM）模型。由於喺訓練過程中對平行運算嘅便利性，引入唨Transformer之後愈發大嘅數據集可以得到訓練。呢個都催生唨啲預訓練系統似BERT（從Transformer嚟嘅雙向編碼器表示）同GPT（生成式預訓練Transformer）之類，啲系統經已利用到啲好龐大嘅通用語言數據集（似Wikipedia Corpus同埋Common Crawl）嚟進行訓練，而且仲可以根據特定嘅語言任務微調得。

背景
--

喺引入Transformer之前，大多數最先進嘅NLP系統都依靠啲閘控RNN，譬如LSTM同閘控遞迴單位（GRU），再加埋關注機制。Transformer嘅構建唔使到RNN結構、純粹基於呢啲關注技術，講明僅衹使關注機制而毋需順序處理就足夠喺性能上比肩啲有埋關注機制嘅RNN。

### 順序處理啲弊端

閘控RNN按順序處理啲標識（token，詞、標點等），同時維護住一枚狀態向量（state vector），向量入便表示同埋記錄返啲獲親標識之後睇到嘅數據。要處理第{\textstyle n}隻標識，個模型會捉表示到之前第{\textstyle n-1}隻標識嘅狀態（state）鬭埋個新標識嘅資訊嚟到創建一個新狀態，表示直到新標識{\textstyle n}嘅句。理論上講，嚟自一隻標識嘅資訊可以跟住個序迾任意傳播落去，若果個狀態喺每粒點都繼續對個相關標識嘅語義資訊（contextual information）進行編碼嘅話。之不過喺實踐當中，呢種機制其實唔完善：部分由於梯度消失問題，長句結尾度嘅模型狀態就通常唔包含啲精確又提取得嘅資訊關於好早之前啲標識。

### 關注機制嘅引入

簡單示意圖畀個編-解碼器架構、帶關注機制嘅。橙色路從編-解碼路欶取隱向量畀關注單元求出權重，再匯返佮埋去訓練
透過引入關注機制（Attention），呢個問題得到解決。關注機制令到個模型可以直接睇返並抽返句入便任意早先處理點嘅狀態。關注層訪問得到所有啲先前狀態，仲識根據一啲學到嘅相關性度量標準，考慮當前標識嘅相關程度幫啲先前狀態加權，係噉即使隔好遠都畀得返啲更加清晰嘅資訊關於個標識。

關注機制嘅一個明顯例係翻譯。喺英語到法語嘅翻譯系統入便，法語輸出嘅第一個單詞好可能好大程度上取決於英語輸入嘅開頭。之但係，喺經典嘅LSTM模型入便，照序產生法語輸出嘅第一個單詞嗰陣，係畀到個模型最孻一個英語單詞嘅狀態向量。理論上講，個向量可以幫啲關於成個英語句子嘅資訊編嗮碼，噉樣畀嗮個模型所有必要嘅知識，但實際上，呢啲資訊好多時冇好好噉保存到。引入唨關注機制嘅話，呢個模型可以學識喺產生法語輸出嘅開頭嗰陣留意返早期英語標識嘅狀態，令佢對佢翻譯緊嘅嘢有一個更好嘅概念。

關注機制着添加到RNN之後就促進到性能嘅大幅提高。Transformer嘅引入揭示唨噉樣一個事實，即關注機製本身就有好強大嘅功能，而且照序循環處理啲數據查實對於達到嗰種性能提升嚟講冇乜必要，之RNN加埋關注機制先得到嘅。另外Transformer使關注機制而唔係RNN，同時處理得嗮所有標識，計出佢哋之間嘅關注權重。

架構
--

似早先發明有嘅嗰啲模型一樣，Transformer用嘅亦都係編碼器-解碼器架構（encoder-decoder architecture）。編碼器由一組編碼層組成，呢啲編碼層逐層噉疊代處理個輸入；解碼器同理，亦都係一組編碼層對個輸出執行相同操作。

每𤗲編碼層嘅功能都係處理佢攞到嘅輸入嚟生成編碼，其中包含有啲資訊關於啲輸入嘅邊啲部分係互相之間相關嘅。之後𤗲編碼層會捉佢個編碼集傳遞到後尾一𤗲編碼層作爲輸入。每𤗲解碼層就做逆向嘅操作，攞嗮啲編碼並結合埋啲編碼嘅上下文資訊對編碼進行處理，嚟最終去到生成一條輸出序迾。每𤗲編碼層同解碼層都使開一種關注機制，呢種機製針對每個輸入都衡量返其他每個輸入嘅相關度，同埋從啲輸入當中相應噉提取返資訊嚟產生個輸出。每𤗲解碼層仲有埋一個附加關注機制，呢個機制幫解碼層從先前啲解碼器嘅輸出當中獲取資訊，然之後先輪到𤗲解碼層從嗰啲編碼當中提取資訊。編碼器層同解碼器層都有埋前饋神經網絡嚟額外處理啲輸出，仲有殘差連接（residual connections）同埋層歸一化步驟（layer normalization steps）。

### 縮放點積關注

Transformer啲基本構建塊係啲縮放點積關注單元。一條句子傳到Transformer模型之後，會得出每隻標識之間嘅關注權重。一粒關注單元識幫上下文當中嘅每隻標識都生成埋啲詞嵌入（embeddings），入便啲資訊唔單之涉及隻標識本身、仲涉及埋一個嚟自其他啲相關標識嘅加權組合、其中個加權係由關注權重決定。

具體嚟講，對於每粒關注單元，Transformer模型學習有三個權重矩陣；查詢（query）權重矩陣{\displaystyle \mathbf {W} \_{Q}}，關鍵（key）權重矩陣{\displaystyle \mathbf {W} \_{K}}，與及價值（value）權重矩陣{\displaystyle \mathbf {W} \_{V}}。對於每隻標識 {\displaystyle i}，個輸入詞嵌入{\displaystyle \mathbf {x} \_{i}}同三個權重矩陣嘅每一個乘埋，嚟生成查詢向量{\displaystyle \mathbf {q} \_{i}=\mathbf {x} \_{i}\mathbf {W} \_{Q}}、關鍵向量{\displaystyle \mathbf {k} \_{i}=\mathbf {x} \_{i}\mathbf {W} \_{K}}同埋值向量{\displaystyle \mathbf {v} \_{i}=\mathbf {x} \_{i}\mathbf {W} \_{V}}。關注權重使查詢向量同關鍵向量計返：個關注權重{\displaystyle a\_{ij}}係標識 {\displaystyle i} 嘅查詢向量{\displaystyle \mathbf {q} \_{i}}、戥標識 {\displaystyle j} 嘅關鍵向量{\displaystyle \mathbf {k} \_{j}}之間嘅點積：

{\displaystyle a\_{ij}=\mathbf {q} \_{i}\cdot \mathbf {k} \_{j}}
啲關注權重除以關鍵向量維數嘅平方根{\displaystyle {\sqrt {d\_{k}}}}（可以喺訓練過程嗰陣穩定返梯度）之後着透過softmax歸一化。由於{\displaystyle \mathbf {W} \_{Q}}同{\displaystyle \mathbf {W} \_{K}}係唔同嘅矩陣，可以令到個關注唔對稱：若果標識 {\displaystyle i}會捉個關注導向標識 {\displaystyle j}（即{\displaystyle a\_{ij}}好大），亦都唔一定代表反過嚟標識 {\displaystyle j} 就會將關注導向標識 {\displaystyle i} （即反之{\displaystyle a\_{ji}}大）。關注單元幫標識 {\displaystyle i} 整嘅輸出即係所有標識啲值向量嘅帶{\displaystyle a\_{ij}}加權和，即累加 {\displaystyle i} 啲導向每隻標識嘅關注度。

所有啲標識嘅關注度計算可以表示成一個大型矩陣計算。由於計算矩陣運算嘅改善令到矩陣運算可以速度噉計算，噉樣就會對於訓練好有用。定義上，矩陣{\displaystyle \mathbf {Q} }、{\displaystyle \mathbf {K} }、{\displaystyle \mathbf {V} }係三個矩陣攞嚟裝啲前述向量嘅；佢哋個第 {\displaystyle i}行分別係向量{\displaystyle \mathbf {q} \_{i}}、{\displaystyle \mathbf {k} \_{i}}、{\displaystyle \mathbf {v} \_{i}}。

{\displaystyle {\begin{aligned}{\text{Attention}}(\mathbf {Q} ,\mathbf {K} ,\mathbf {V} )={\text{softmax}}\left({\frac {\mathbf {Q} \mathbf {K} ^{\mathrm {T} }}{\sqrt {d\_{k}}}}\right)\mathbf {V} \end{aligned}}}
#### 多頭關注

一套{\displaystyle \left(\mathbf {W} \_{Q},\mathbf {W} \_{K},\mathbf {W} \_{V}\right)}矩陣喊做「關注頭」，而Transformer模型入便嘅每一層都有好幾隻關注頭。由於一隻關注頭識關注同每隻標識相關嘅標識，設好多隻關注頭之後個模型可以學識根據唔同嘅「相關性」定義嚟唔同噉追返啲標識。研究表明，Transformer入便嘅好多關注頭對啲關連拏褦嘅編碼方式，從人類角度嚟睇係理解得嘅。譬如，有一啲關注頭主要係𥄫定下一個單詞畀每隻標識，有一啲係主要從動詞導向到直接賓語。由於Transformer模型有多個關注頭，所以佢哋有可能捕獲到好多拏褦嘅層次同埋類型，從表層到語義。多頭關注層嘅多個輸出着級聯（concatenated）傳遞到前饋神經網絡層。

### 編碼器

每隻編碼器都係由兩隻主要組件組成：自關注機制（self-attention）同埋前饋神經網絡。自關注機制從先前嘅編碼器度獲取一組輸入編碼、權衡埋啲編碼之間嘅相關性，去生成一組輸出編碼。然之後，個前饋神經網絡進一步分別處理每隻輸出編碼。呢啲輸出編碼最終會遞畀解碼器與及下一個編碼器，作為輸入。

第一編碼器唔係捉編碼、而係捉輸入序迾啲詞嵌入同位置資訊（以位置向量嘅形式）作為輸入。要令Transformer可以利用返序迾嘅順序，個位置資訊係必須嘅，因為Transformer嘅其他部分都冇使到個資訊。

### 解碼器

每隻解碼器由三隻主要組件組成：自關注機制、編碼關注機制同埋前饋神經網絡。解碼器嘅功能類似編碼器，之不過有一個附加嘅編碼關注機制、識由編碼器生成好嘅編碼捇返相關資訊。

似第一編碼器一樣，第一解碼器捉輸出序迾啲詞嵌入同位置資訊作為輸入。由於Transformer唔應使用當前抑或未來嘅輸出嚟預測輸出，所以必須部分屏蔽走個輸出序迾，嚟避免呢種反向資訊流。最後一個解碼器之後係最終嘅線性變換同埋softmax層，嚟生成出一個輸出概率對於啲詞彙。

### 偽代碼

下低係實現其中一隻Transformer變體、「原版」Transformer嘅偽代碼：

```
def vanilla\_transformer(enc\_inp, dec\_inp):
 """Transformer variant known as the "vanilla" transformer."""
    x = embedding(enc\_inp) \* sqrt(d\_m)
    x = x + pos\_encoding(x)
    x = dropout(x)
    for \_ in range(n\_enc\_layers):
        attn = multi\_head\_attention(x, x, x, None)
        attn = dropout(attn)
        attn = layer\_normalization(x + attn)

        x = pointwise\_ff(attn) # GELU activation(affine map(attn))
        x = layer\_normalization(x + attn)

    # x is at this point the output of the encoder
    enc\_out = x

    x = embedding(dec\_inp) \* sqrt(d\_m)
    x = x + pos\_encoding(x)
    x = dropout(x)
    mask = causal\_mask(x)
    for \_ in range(n\_dec\_layers):
        attn1 = multi\_head\_attention(x, x, x, mask)
        attn1 = layer\_normalization(attn1 + x)

        attn2 = multi\_head\_attention(attn1, enc\_out, enc\_out, None)
        attn2 = dropout(attn2)
        attn2 = layer\_normalization(attn1 + attn2)

        x = pointwise\_ff(attn2)
        x = layer\_normalization(attn2 + x)
    return dense(x)

```

### 備揀方案

訓練啲基於Transformer嘅架構可能非常之昂貴，尤其係對於長句子嚟講。備揀架構包括有Reformer，之可以減少個計算量從{\displaystyle O(N^{2})}到{\displaystyle O(N\ln N)}，其中{\displaystyle N}係序迾嘅長度。呢個係透過使返局部敏感哈希法同可逆層來做到嘅。

2020年末，仲有個基準測試得引入嚟比較啲唔同嘅xformer架構。

訓練
--

Transformer通常會接受半監督學習，當中包括非監督式嘅預培訓，然之後進行監督式嘅微調。由於標註好嘅訓練數據個資源查實有限，所以預訓練好多時係喺更大嘅數據集度進行，而唔係做微調（fine-tuning）。預訓練同微調嘅任務通常包括：

* 下一句預測
* 問答系統
* 閱讀理解
* 情緒分析
* 文章改寫（Paraphrasing）

應用領域
----

Transformer喺自然語言處理（NLP）領域入便得到好多唔同應用，譬如機械翻譯同時間序迾預測啲任務。好多預訓練模型（譬如GPT-2，GPT-3，BERT，XLNet同RoBERTa）都證明唨Transformers執行得各種噉樣嘅同NLP相關嘅任務，而且有應用於實際嘅潛力。當中可能包括：

* 機械翻譯
* 文本總結（document summarization）
* 文本生成（document generation）
* 命名實體識別（NER）
* 生物序迾分析（biological sequence analysis）

到唨2020年，事實證明可以對Transformer體系結構（尤其係GPT-2）進行微調來做走棋任務。Transformer亦都經已喺圖像處理使開，結果表明佢哋具有戥卷積神經網絡競爭嘅能力。

實現
--

Transformer模型經已喺TensorFlow同PyTorch等主要深度學習框架入便實現。

*Transformers*係Hugging Face製作嘅庫，佢提供基於Transformer嘅體系結構同預訓練嘅模型。呢個庫係免費軟件，喺GitHub度可以獲得。佢嘅模型有PyTorch同TensorFlow格式。

考
-

1. 1 2 3 4 5 6  Polosukhin, Illia; Kaiser, Lukasz; Gomez, Aidan N.; Jones, Llion; Uszkoreit, Jakob; Parmar, Niki; Shazeer, Noam; Vaswani, Ashish (2017-06-12). "Attention Is All You Need". arXiv:1706.03762 [cs.CL].
2. ↑  He, Cheng. "Transformer in CV". *Transformer in CV*. Towards Data Science.
3. ↑  Wolf, Thomas; Debut, Lysandre; Sanh, Victor; Chaumond, Julien; Delangue, Clement; Moi, Anthony; Cistac, Pierric; Rault, Tim; Louf, Remi (2020). "Transformers: State-of-the-Art Natural Language Processing". *Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing: System Demonstrations*. pp. 38–45. doi:10.18653/v1/2020.emnlp-demos.6.
4. 1 2 3  "Open Sourcing BERT: State-of-the-Art Pre-training for Natural Language Processing". *Google AI Blog*. 喺2019-08-25搵到.
5. 1 2 3  "Better Language Models and Their Implications". *OpenAI*. 2019-02-14. 喺2019-08-25搵到.
6. ↑  "Sequence Modeling with Neural Networks (Part 2): Attention Models". *Indico*. 2016-04-18. 原著喺2020-10-21歸檔. 喺2019-10-15搵到.
7. 1 2  Alammar, Jay. "The Illustrated Transformer". *jalammar.github.io*. 喺2019-10-15搵到.
8. ↑  Clark, Kevin; Khandelwal, Urvashi; Levy, Omer; Manning, Christopher D. (August 2019). "What Does BERT Look at? An Analysis of BERT's Attention". *Proceedings of the 2019 ACL Workshop BlackboxNLP: Analyzing and Interpreting Neural Networks for NLP*. Florence, Italy: Association for Computational Linguistics: 276–286. doi:10.18653/v1/W19-4828.
9. ↑  Alammar, Jay. "The Illustrated Transformer". *jalammar.github.io*. 喺2019-10-15搵到.
10. ↑  Kitaev, Nikita; Kaiser, Łukasz; Levskaya, Anselm (2020). "Reformer: The Efficient Transformer". arXiv:2001.04451 [cs.LG].
11. ↑  "Task with long sequences". 原著喺2020年10月26號歸檔. 喺2021年2月17號搵到.
12. ↑  "Reformer: The Efficient Transformer". *Google AI Blog* (英文). 喺2020-10-22搵到.
13. ↑  Tay, Yi; Dehghani, Mostafa; Abnar, Samira; Shen, Yikang; Bahri, Dara; Pham, Philip; Rao, Jinfeng; Yang, Liu; Ruder, Sebastian; Metzler, Donald (2020-11-08). "Long Range Arena: A Benchmark for Efficient Transformers". arXiv:2011.04006 [cs.LG].
14. 1 2  Wang, Alex; Singh, Amanpreet; Michael, Julian; Hill, Felix; Levy, Omer; Bowman, Samuel (2018). "GLUE: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding". *Proceedings of the 2018 EMNLP Workshop BlackboxNLP: Analyzing and Interpreting Neural Networks for NLP*. Stroudsburg, PA, USA: Association for Computational Linguistics: 353–355. arXiv:1804.07461. doi:10.18653/v1/w18-5446.
15. ↑  Allard, Maxime (2019-07-01). "What is a Transformer?". *Medium* (英文). 喺2019-10-21搵到.
16. ↑  Yang, Zhilin Dai, Zihang Yang, Yiming Carbonell, Jaime Salakhutdinov, Ruslan Le, Quoc V. (2019-06-19). *XLNet: Generalized Autoregressive Pretraining for Language Understanding*. OCLC 1106350082.`{{cite book}}`: CS1 maint: multiple names: 作者名單 (link)
17. ↑  Monsters, Data (2017-09-26). "10 Applications of Artificial Neural Networks in Natural Language Processing". *Medium* (英文). 喺2019-10-21搵到.
18. ↑  Rives, Alexander; Goyal, Siddharth; Meier, Joshua; Guo, Demi; Ott, Myle; Zitnick, C. Lawrence; Ma, Jerry; Fergus, Rob (2019). "Biological structure and function emerge from scaling unsupervised learning to 250 million protein sequences". bioRxiv 10.1101/622803.
19. ↑  Nambiar, Ananthan; Heflin, Maeve; Liu, Simon; Maslov, Sergei; Hopkins, Mark; Ritz, Anna (2020). "Transforming the Language of Life: Transformer Neural Networks for Protein Prediction Tasks". doi:10.1145/3388440.3412467. `{{cite journal}}`: Cite journal requires `|journal=` (help)
20. ↑  Rao, Roshan; Bhattacharya, Nicholas; Thomas, Neil; Duan, Yan; Chen, Xi; Canny, John; Abbeel, Pieter; Song, Yun S. (2019). "Evaluating Protein Transfer Learning with TAPE". bioRxiv 10.1101/676825.
21. ↑  Noever, David; Ciolino, Matt; Kalin, Josh (2020-08-21). "The Chess Transformer: Mastering Play using Generative Language Models". arXiv:2008.04057 [cs.AI].
22. ↑  "An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale" (PDF).`{{cite web}}`: CS1 maint: url-status (link)
23. ↑  "Training data-efficient image transformers & distillation through attention" (PDF).`{{cite web}}`: CS1 maint: url-status (link)

深入閱讀
----

* 休伯特·拉姆紹爾*等人*（2020），「Hopfield網絡係所有你需要到嘅」，提交預印本ICLR2021年arXiv;另見作者嘅博客

–討論作爲同Hopfield更新等效嘅Transformer層嘅影響，令到輸入更接近其中一個喺連續值Hopfield網絡入便嘅不動點（可表示模式）

連出去
---

* 亞歷山大·剌殊（Alexander Rush），帶埋註釋嘅Transformer，哈佛大學自然語言處理組，2018年4月3號

| * 睇
* 傾
* 改
機械學習同數據探勘 |
| --- |
| 可以睇埋機械學習詞彙同數據科學 |
| 基本概念 | 人工智能 · 學習 · 運算學習論 · 線性可分度 · 事前數據處理 · 特徵提取 · 知識表示 |  |
| 數學模型 | 

|  |
| --- |
| 迴歸模型 · 決策樹（蒙地卡羅樹搜尋） · 貝葉斯網絡 · 支援向量機 · 關聯規則學習 |
| 神經網絡 | 

|  |  |
| --- | --- |
| 網絡基礎 | 人工神經細胞 · 前饋網絡（感知機 · 多層感知機） |
| 遞迴網絡 | 霍菲特網絡 · 玻茲曼機 · 長短期記憶 · 神經圖靈機 |
| 深度學習 | 卷積網絡 · 受限玻茲曼機（深度信念網絡） · 深度強化學習 |
| 網絡概念 | 反向傳播算法 · 關注機制 · 生成對抗網絡 · 基於流嘅生成模型 |
| 自編碼器 · 脈衝神經網絡 · 自組織對映 · 網絡種類一覽 |

 |

 |
| 最佳化 | 誤差函數 · 爬山演算法 · 梯度下降法 · 全局最佳化 · 正則化 · 變分推斷 · 資訊最大化 |
| 學習範式 | 監督式學習 · 非監督式學習 · 強化學習 · 遺傳演算法 · 主動機械學習 |
| 模型評估 | 自助抽樣法 · 交叉驗證 · 訓練曲線 · 適合度函數 · 過適 |
| 主要應用 | 統計分類（線性分類機） · 表徵學習 · 降維（特徵選擇） · 聚類分析 · 異常檢測 |
| 拉雜相關 | 認知科學 · 電腦科學 · 統計學 · 資訊理論 · 資訊系統、資訊過多同大數據 |
| 機械學習類 · 數據探勘類 |