Transformer架構

Transformer架構圖，左邊為編碼器，右邊為解碼器。注：圖中採用前向層歸一化，與原2017年原論文采用後向層歸一化不同
Transformer（直譯為“變換器”）是一種採用注意力機制的深度學習架構，這一機制可以按輸入數據各部分重要性的不同而分配不同的權重。採用該架構的模型主要用於自然語言處理（NLP）與計算機視覺（CV）領域。
與循環神經網絡（RNN）一樣，Transformer旨在處理自然語言等順序輸入數據，可應用於翻譯、文本摘要等任務。而與RNN不同的是，Transformer能夠一次性處理所有輸入數據。注意力機制可以為輸入序列中的任意位置提供上下文。如果輸入數據是自然語言，則Transformer不必像RNN一樣一次只處理一個單詞，這種架構允許更多的並行計算，並以此減少訓練時間。
Transformer於2017年由谷歌大腦的一個團隊推出，現已逐步取代長短期記憶（LSTM）等RNN模型成為了NLP問題的首選模型。並行化優勢允許其在更大的數據集上進行訓練。這也促成了BERT、GPT等預訓練模型的發展。 這些系統使用了維基百科、Common Crawl等大型語料庫進行訓練，並可以針對特定任務進行微調。

**背景**
在Transformer模型之前，大多數最先進的NLP系統都依賴於諸如LSTM、Gated recurrent unit（GRU）等門控RNN模型，並在此基礎上增加了注意力機制。Transformer正是在注意力機制的基礎上構建的，但其沒有使用RNN結構，這表明僅依靠注意力機制就能在性能上比肩加上了注意力機制的RNN模型。2014年，注意力機制的提出為Transformer奠定了理論基礎。

**順序處理**
RNN模型按順序處理每一個標記（token）並維護一個狀態向量，其中包含所有已輸入數據的表示。如要處理第個標記，模型將表示句中到第個標記為止的狀態向量與最新的第個標記的信息結合在一起創建一個新的狀態向量，以此表示句中到第個標記為止的狀態。從理論上講，如果狀態向量不斷繼續編碼每個標記的上下文信息，則來自一個標記的信息可以在序列中不斷傳播下去。但在實踐中，這一機制是有缺陷的：梯度消失問題使得長句末尾的模型狀態會缺少前面標記的精確信息。此外，每個標記的計算都依賴於先前標記的計算結果，這也使得其很難在現代深度學習硬件上進行並行處理，這導致了RNN模型訓練效率低下。

**自注意力機制**
注意力機制解決了上述這些問題。這一機制讓模型得以提取序列中任意先前點的狀態信息。注意力層能夠訪問所有先前的狀態並根據學習到的相關性度量對其進行加權，從而提供相距很遠的標記的相關信息。
翻譯是一個能夠突顯注意力機制優勢的例子，其中上下文對於句子中單詞的含義至關重要。例如在一個將英語翻譯為法語的系統中，法語輸出的第一個詞很可能取決於英語輸入的前幾個詞。然而在經典的LSTM模型中，為了產生法語輸出的第一個單詞，模型需要訪問處理完最後一個英語單詞後得到的狀態向量。理論上這個向量包含了整個英語句子的信息，從而為模型提供所有必要的知識。然而在實踐中，LSTM通常無法很好地保存這些信息。可以通過添加註意力機制來解決這個問題：解碼器可以訪問每個英語輸入單詞的狀態向量，而不僅僅是最後一個單詞。同時模型可以學習注意力權重，這些權重決定了對每個英語輸入狀態向量的關注程度。
在RNN模型中添加註意力機制能提高模型的性能。而Transformer架構的發展表明，注意力機制本身就足夠強大，並且不需要像RNN模型一樣再對數據進行順序循環處理。Transformer模型採用了沒有RNN模型的注意力機制，它能夠同時處理所有標記並計算它們之間的注意力權重。由於注意力機制僅使用來自之前層中其他標記的信息，因此可以並行計算所有標記以提高訓練速度。

**架構**

**輸入**
輸入文本使用字節對編碼以進行標記化，每個標記通過詞嵌入轉換為向量。然後，將標記的位置信息添加到嵌入向量中。

**編碼器-解碼器架構**
與早期的seq2seq模型一樣，原始的Transformer模型使用編碼器-解碼器（encoder–decoder）架構。編碼器由逐層迭代處理輸入的編碼層組成，而解碼器則由對編碼器的輸出執行相同操作的解碼層組成。
每個編碼層的功能是確定輸入數據的哪些部分彼此相關。它將其編碼作為輸入再傳遞給下一個編碼層。每個解碼層的功能則相反，讀取被編碼的信息並使用整合好的上下文信息來生成輸出序列。為了實現這一點，每個編碼層和解碼層都使用了注意力機制。
對於每個輸入，注意力會權衡每個其他輸入的相關性，並從中提取信息以產生輸出。每個解碼層都包含一個額外的注意力機制，它會在從編碼層提取信息之前先從之前解碼器的輸出中提取信息。
編碼層和解碼層都有一個前饋神經網絡用於對輸出進行額外處理，幷包含殘差連接和層歸一化步驟。

**縮放點積注意力**
Transformer模型的基本構建單元是縮放點積注意力（scaled dot-product attention）單元。當一個句子被傳遞到一個Transformer模型中時，可以同時計算所有標記互相之間的注意力權重。注意力單元為上下文中的每個標記生成嵌入，其中包含有關標記本身的信息以及由注意力權重加權得到的其他相關標記的信息。
對於每個注意力單元，Transformer模型學習三個權重矩陣，分別為查詢（query）權重、鍵（key）權重以及值（value）權重。對於每個標記，輸入詞嵌入分別與三個權重矩陣相乘以得到查詢向量、鍵向量與值向量。再使用查詢向量和鍵向量計算注意力權重，即計算和的點積以得到從標記到標記的注意力權重。之後再將注意力權重除以向量維度的平方根以在訓練期間穩定梯度，並通過softmax函數對權重進行歸一化。與的不同意味著注意力是非對稱的：如果標記很關注標記（即很大）並不一定意味著標記也反過來關注標記（即可能很小）。對每一個標記而言，注意力單元的輸出是以（標記到每一個標記的注意力）加權所有標記的值向量得到的加權和。
對所有標記的注意力計算可以表示為使用softmax函數的一個大型矩陣計算，由於可以對矩陣運算速度進行優化，這十分利於訓練速度的提升。矩陣、和可分別定義為第行是向量、 和的矩陣。

**多頭注意力**
一組矩陣稱為一個注意力頭（attention head），Transformer模型中每一層都包含多個注意力頭。每個注意力頭都表示不同標記相互之間的注意力，而多個注意力頭則可以針對不同的“相關性”計算不同的注意力權重。許多注意力頭編碼的相關性信息是人類可以理解的，例如某個注意力頭可能主要關注下一個單詞，而另一個注意力頭則可能主要關注動詞與其直接賓語之間的關係。每個注意力頭的計算可以並行執行，這使得處理速度得以加快。注意力層的輸出被連接起來傳遞到前饋神經網絡層。

**編碼器**
每個編碼器由一個自注意力機制和一個前饋神經網絡兩個主要部分組成。自注意力機制接受來自前一個編碼器的輸入編碼，並計算它們之間相關性的權重以生成輸出編碼。前饋神經網絡則進一步單獨處理每個輸出編碼。然後將這些輸出編碼作為輸入傳遞給下一個編碼器以及解碼器。
第一個編碼器將輸入序列的位置信息和嵌入作為其輸入。位置信息向Transformer模型提供了序列的順序信息，這是模型中唯一利用這一信息的部分。
編碼器是雙向的，這意味著當前標記的注意力可以放在之前或之後的標記上。
BERT是一種僅具有編碼器的結構。

**解碼器**
每個解碼器由一個自注意力機制、一個針對編碼器的注意力機制和一個前饋神經網絡三個主要部分組成。解碼器的功能與編碼器類似，但插入了一個額外的注意力機制，它從編碼器生成的編碼中提取相關信息。這種機制也可以稱為編碼器-解碼器注意力（encoder-decoder attention）。
與第一個編碼器一樣，第一個解碼器也將輸出序列的位置信息和嵌入作為其輸入。因為模型不能使用當前或未來的輸出來預測輸出，因此必須對輸出序列進行部分屏蔽以防止這種反向信息流。這使得自迴歸文本生成成為可能。最後一個解碼器之後是最終的線性變換和softmax層以產生所有詞彙的輸出概率。
GPT是一種僅具有解碼器的架構。

**替代架構**
訓練基於Transformer模型的架構可能很昂貴，尤其是對於長輸入而言。替代架構包括Reformer模型、ETC/BigBird模型等，前者可以將計算複雜度從減少為 ，後者則可以減少到，其中表示序列長度。其實現得益於Locality-sensitive hashing與可逆層。
原始的Transformer模型需要與上下文窗口大小成二次方的內存大小。無注意力Transformer模型（Attention Free Transformer）則將對內存的需求減少為線性依賴，同時通過連接鏈與值保留了Transformer模型的優勢。
2020年底推出了用於比較不同Transformer架構的基準測試。

**訓練**
Transformer模型通常會進行自監督學習，包括無監督預訓練和監督微調。由於監督微調時使用的帶標籤訓練數據一般比較有限，預訓練通常會在比微調時所用的更大的數據集上完成。預訓練和微調的任務通常包括：- 語言建模- 下一句預測- 問答系統- 閱讀理解- 文本情感分析- Paraphrasing (computational linguistics)

**應用**
Transformer模型在自然語言處理（NLP）領域取得了巨大成功，例如機器翻譯與時間序列預測任務。包括GPT-2、GPT-3、BERT、XLNet與RoBERTa在內的許多預訓練模型展示了Transformer模型執行各種NLP相關任務的能力，並有很多潛在實際應用。這些應用包括：- 機器翻譯- Automatic summarization- 文本生成- 命名實體識別- 生物序列分析  - 視頻理解
2020年，Transformer架構（更具體地說是GPT-2）被證明可以通過微調執行下象棋的任務。Transformer模型也已應用於圖像處理，其結果可與卷積神經網絡相媲美。

**實現**
Transformer模型已在TensorFlow、PyTorch等標準深度學習框架中實現。
Transformers是由Hugging Face製作的一個庫，提供基於Transformer的架構和預訓練模型。

**參見**
 注意力機制- GPT-3- BERT- 悟道預訓練模型- OpenAI- ChatGPT- 深度學習

**參考文獻 ==