跳去內容

Transformer (機械學習模型)

出自維基百科,自由嘅百科全書
汩汩银泉討論貢獻喺2021年2月17號 (三) 02:01嘅修訂。
【改動】←之前嘅修訂|最新嘅修訂版本改動】|新啲嘅修訂→改動

 

Transformer係喺2017年推出嘅深度學習模型,主要使喺自然語言處理(NLP)領域。

遞迴神經網絡(RNN)一樣,Transformers設計出嚟係攞嚟處理啲順序數據(譬如自然語言)嘅,嚟去執行翻譯文本摘要生成之類啲任務。之戥RNN唔同,Transformer唔使照序處理啲順序數據。譬如,若果輸入數據係自然語言語句,Transformer唔使處理個開頭先、再處理個結尾。鑑於呢個特點,Transformer允許嘅平行運算多過RNN,可以藉此減少訓練時間。

Transformer經已速度成為唨NLP問題嘅首選模型[1],同時取代唨啲舊嘅遞迴神經網絡模型似長短期記憶(LSTM)模型。由於喺訓練過程當中Transformer模型方便到嘅平行運算會多啲,所以引入唨Transformer之後可以訓練得愈發大嘅數據集。呢個都催生唨啲預訓練系統似BERT(Transformer嘅雙向編碼器表示)同GPT(生成式預訓練Transformer)之類,之經已利用到龐大嘅通用語言數據集(似Wikipedia Corpus)嚟進行訓練,而且仲可以根據特定嘅語言任務微調得。[2][3]

背景

喺引入Transformer之前,大多數最先進嘅NLP系統都依靠啲閘控遞迴神經網絡RNN),譬如LSTM閘控遞迴單位(GRU),亦都有埋關注機制。Transformer喺唔使RNN結構嘅情況下基於呢啲關注技術而構建成,擺明僅衹使關注機制而毋需進行遞迴順序處理就夠喺性能上比肩啲有埋關注機制嘅RNN。

閘控RNN按順序處理令牌,維護狀態向量,呢個狀態向量包含每個令牌之後睇到嘅數據表示。處理令牌,模型捉表示句子嘅狀態組合到令牌同新令牌嘅信息一齊創建一個新狀態,表示直到令牌為止嘅句子。從理論上講,若果狀態喺每個點繼續對有關令牌嘅信息進行編碼,則來自一個令牌嘅信息可以沿序列任意向下傳播。之不過喺實踐當中,呢種機制仲唔完善:部分由於消失嘅梯度問題,長句子結尾處嘅模型狀態通常唔包含有關早期標記嘅精確,可提取嘅信息。

透過引入註意機制解決唨呢個個問題。注意機制使模型可以直接查看句子入便任何較早點嘅狀態,仲從中提取狀態。注意層可以訪問所有以前嘅狀態,仲根據一啲同當前令牌相關嘅學習度量權衡佢哋,從而提供有關遙遠相關令牌嘅更清晰信息。注意力嘅一個明顯例子係翻譯。喺英語到法語嘅翻譯系統入便,法語輸出嘅第一個單詞好可能好大程度上取決於英語輸入嘅開頭。之但係,喺經典嘅編碼器/解碼器LSTM模型入便,為唨產生法語輸出嘅第一個單詞,僅衹給模型一個最後一個英語單詞嘅狀態向量。從理論上講,此向量可以對有關整個英語句子嘅信息進行編碼,從而為模型提供所有必要嘅知識,但實際上,呢啲信息好多時冇得到好好嘅保存。若果引入唨注意機制,則呢個模型可以喺產生法語輸出嘅開始陣時學習學習早期英語令牌嘅狀態,從而為翻譯提供更好嘅概念。

注意力機制着添加到RNN之後就促進到性能嘅大幅提高。Transformer嘅引入揭示唨噉樣一個事實,即註意力機製本身俱有強大嘅功能,而且照序噉循環處理啲數據對於實現具有註意力嘅RNN嘅性能提升唔係必需嘅。Transformer使關注機製而唔係RNN,可同時處理所有令牌併計算佢哋之間嘅關注權重。Transformer唔依賴順序處理,非常之容易進行平行運算化,呢個一事實使Transformer可以喺較大嘅數據集上得到更有效嘅訓練。

架構

似之前發明嘅模型一樣,Transformer亦都係一種編碼器-解碼器體系架構。編碼器由一組編碼層組成,呢啲編碼層一層又一層噉迭代處理輸入,解碼器由一組對編碼器嘅輸出執行相同操作嘅解碼層組成。

每個編碼器層嘅功能係處理其輸入嚟生成編碼,其中包含有關輸入嘅哪啲部分彼此相關嘅信息。佢捉其編碼集作為輸入傳遞到下一個編碼器層。每個解碼器層進行相反嘅操作,使所有合併嘅上下文信息進行所有編碼並進行處理,嚟生成輸出序列。[4]為此,每個編碼器同解碼器層都使一種關注機制,呢個機製針對每個輸入權衡其他每個輸入嘅相關性,仲據此從中獲取信息嚟產生輸出。[5]每個解碼器層還具有一個附加嘅關注機制,呢個機制喺解碼器層從編碼當中獲取信息之前從先前解碼器嘅輸出當中獲取信息。編碼器層同解碼器層都具有前饋神經網絡,使喺輸出嘅其他處理,仲包含剩餘連接同層歸一化步驟。

擴大點產品關注度

Transformer嘅基本構建塊係按比例縮放嘅點積注意單元。捉句子傳遞到Transformer模型嗰陣,同時會計算到每個標記之間嘅注意力權重。注意單元幫上下文當中嘅每個令牌生成嵌入,呢啲嵌入唔單止包含有關令牌本身嘅信息,而且還包含其他相關令牌嘅加權組合,呢啲信息由關注權重加權。

具體而言,對於每個關注單元,Transformer模型學習三個權重矩陣;查詢權重,關鍵權重,與及價值權重。對於每個令牌,輸入字嵌入同三個權重矩陣嘅每一個相乘嚟生成查詢向量,關鍵向量同一個值向量。使用查詢同關鍵向量計算注意力權重:注意力權重來自令牌令牌係之間嘅點積。注意權重除以關鍵向量維數嘅平方根,可喺訓練過程當中穩定梯度,仲透過softmax捉權重歸一化為。事實唔同嘅矩陣可以使注意力唔對稱:若果標記出席令牌(IE好大),呢個又唔一定意味著令牌將參加令牌(IE大)。令牌關注單元嘅輸出係所有令牌嘅值向量嘅加權同,加權為,來自每個令牌。

所有令牌嘅注意力計算可以表示為一個大型矩陣計算,由於計算矩陣運算優化使得矩陣運算可以快速計算,所以對於訓練好有用。矩陣被定義為矩陣行係向量,同分別。

多頭注意力

一套矩陣稱為關注頭,而Transformer模型入便嘅每一層都有多個關注頭。當一個關注頭關注同每個標記相關嘅標記陣時,透過多個關注頭,模型可以學習針對「相關性」嘅唔同定義來做到呢個一點。研究表明,Transformer入便嘅好多關注頭對人類可以解釋嘅關聯關係進行編碼。譬如,對於每個標記,都有一啲關注頭,主要針對下一個單詞,或者主要從動詞到其直接賓語嘅關注頭。[6]由於Transformer模型具有多個關注頭,所以佢哋有可能捕獲好多級別同類型嘅相關關係,從表面級別到語義。多頭注意力層嘅多個輸出被串聯嚟去傳遞到前饋神經網絡層。

編碼器

每個編碼器均由兩個主要組件組成:自我注意力機制同前饋神經網絡。自我注意機制從先前嘅編碼器度獲取一組輸入編碼,仲權衡佢哋之間嘅相關性去生成一組輸出編碼。然之後,前饋神經網絡進一步分別處理每個輸出編碼。呢啲輸出編碼最終會傳遞給下一個編碼器與及其解碼器,作為其輸入。

第一編碼器捉位置信息同輸入序列嘅詞嵌入作為其輸入,而唔係編碼。位置信息對於Transformer利用序列嘅順序係必唔可少嘅,因為Transformer嘅其他部分都冇使到佢。

解碼器

每個解碼器由三個主要組件組成:自我注意機制,編碼注意機制同前饋神經網絡。解碼器嘅功能類似於編碼器,但係插入唨一個附加嘅注意機制,呢個機制從編碼器生成嘅編碼入便提取相關信息。[5]

似第一編碼器一樣,第一解碼器捉位置信息同輸出序列嘅嵌入作為輸入,而唔係編碼。由於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,可減少以下方面嘅計算量:,喺哪裡係序列嘅長度。呢個係透過使返局部敏感哈希法同可逆層來完成嘅。[7][8]

2020年末引入唨使喺比較唔同xformer體系結構嘅基準。

訓練

Transformer通常會接受半監督學習,包括無監督嘅預培訓,然之後進行有監督嘅微調。由於標記嘅訓練數據嘅可用性有限,所以好多時喺比微調更大嘅數據集上進行預訓練。預訓練同微調嘅任務通常包括:

  • 下一句預測[2]
  • 問題回答[3]
  • 閱讀理解
  • 情緒分析[9]
  • 釋義

應用領域

Transformer喺自然語言處理(NLP)領域入便找到唨大多數應用,譬如機器翻譯時間序列預測嘅任務。[10]好多預訓練嘅模型(譬如GPT-2,GPT-3,BERT,XLNet同RoBERTa)證明唨Transformers能夠執行各種此類同NLP相關嘅任務嘅能力,而且有可能找到實際應用。[2][3][11]呢啲可能包括:

到唨2020年,事實證明可以對Transformer體系結構(尤其係GPT-2)進行微調以下棋。Transformer亦都經已喺圖像處理使開,結果表明佢哋具有戥卷積神經網絡競爭嘅能力。[14][15]

實現

Transformer模型經已喺TensorFlowPyTorch等主要深度學習框架入便實現

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

參考

  1. 1.0 1.1 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. 引用錯誤 Invalid <ref> tag; name "wolf2020" defined multiple times with different content
  2. 2.0 2.1 2.2 "Open Sourcing BERT: State-of-the-Art Pre-training for Natural Language Processing". Google AI Blog. 喺2019-08-25搵到. 引用錯誤 Invalid <ref> tag; name ":6" defined multiple times with different content
  3. 3.0 3.1 3.2 "Better Language Models and Their Implications". OpenAI. 2019-02-14. 喺2019-08-25搵到. 引用錯誤 Invalid <ref> tag; name ":7" defined multiple times with different content
  4. "Sequence Modeling with Neural Networks (Part 2): Attention Models". Indico. 2016-04-18. 喺2019-10-15搵到.
  5. 5.0 5.1 Alammar, Jay. "The Illustrated Transformer". jalammar.github.io. 喺2019-10-15搵到.
  6. 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.
  7. "Task with long sequences".
  8. "Reformer: The Efficient Transformer". Google AI Blog (英文). 喺2020-10-22搵到.
  9. 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.
  10. Allard, Maxime (2019-07-01). "What is a Transformer?". Medium (英文). 喺2019-10-21搵到.
  11. 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)
  12. Monsters, Data (2017-09-26). "10 Applications of Artificial Neural Networks in Natural Language Processing". Medium (英文). 喺2019-10-21搵到.
  13. 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)
  14. "An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale" (PDF).{{cite web}}: CS1 maint: url-status (link)
  15. "Training data-efficient image transformers & distillation through attention" (PDF).{{cite web}}: CS1 maint: url-status (link)

進一步閱讀

–討論等效於Hopfield更新嘅Transformer層嘅影響,使輸入更接近連續值Hopfield網絡不動點(可表示模式)之一

外部鏈接