譯者 | 李睿
審校 | 孫淑娟
近年來, Transformer 機器學習模型已成為深度學習和深度神經網路技術進步的主要亮點之一。它主要用於自然語言處理中的高級應用。谷歌正在使用它來增強其搜尋引擎結果。 OpenAI 使用 Transformer 創建了著名的 GPT-2和 GPT-3模型。
自2017年首次亮相以來,Transformer 架構不斷發展並擴展到多種不同的變體,從語言任務擴展到其他領域。它們已被用於時間序列預測。它們是 DeepMind 的蛋白質結構預測模型 AlphaFold 背後的關鍵創新。 OpenAI 的原始碼產生模型 Codex 也基於 Transformer。 Transformer 最近也進入了電腦視覺領域,在許多複雜任務中它們正在慢慢取代卷積神經網路(CNN)。
研究人員仍在探索改進 Transformer 並將其用於新應用的方法。以下是關於 Transformer 令人興奮的原因以及它們如何運作的簡要解釋。
#傳統的前饋神經網路並非旨在追蹤序列資料並將每個輸入映射到輸出。它適用於諸如圖像分類之類的任務,但在諸如文本之類的序列數據上卻失敗了。處理文字的機器學習模型不僅必須處理每個單詞,還必須考慮單字如何按順序排列並相互關聯。而一個單字的意思可能會隨著句子中出現在它們之前和之後的其他單字而改變。
在 Transformer 出現之前,遞歸神經網路(RNN)是自然語言處理的首選解決方案。當提供一個單字序列時,遞歸神經網路(RNN)將處理第一個單詞,並將結果回饋到處理下一個單字的層。這使它能夠追蹤整個句子,而不是單獨處理每個單字。
遞歸神經網路(RNN)的缺點限制了它們的用處。首先,它們的處理速度非常緩慢。由於它們必須按順序處理數據,因此無法在訓練和推理中利用平行計算硬體和圖形處理單元(GPU)。其次,它們無法處理長序列的文字。隨著遞歸神經網路(RNN)深入文本摘錄中,句子開頭幾個單字的效果逐漸減弱。當兩個連結的字在文本中相距很遠時,這個被稱為「梯度消失」的問題就會出現。第三,它們只捕捉到一個單字和它之前的單字之間的關係。實際上,單字的意思取決於它們之前和之後的單字。
長短時記憶(LSTM)網路是遞歸神經網路(RNN)的繼任者,能夠在一定程度上解決梯度消失問題,並且能夠處理更大的文本序列。但是長短時記憶(LSTM)的訓練速度甚至比遞歸神經網路(RNN)還要慢,而且仍然無法充分利用平行計算。他們仍然依賴文字序列的串行處理。
2017年發表的一篇名為《注意就是所需要的一切》的論文介紹了Transformer,指出Transformer
做出了兩個關鍵貢獻:首先,它們使並行處理整個序列成為可能,從而可以將順序深度學習模型的速度和容量擴展到前所未有的速度。其次,它們引入了“注意機制”,可以在正向和反向的非常長的文本序列中追蹤單字之間的關係。
在討論 Transformer 模型的工作原理之前,有必要討論序列神經網路解決的問題類型。
儘管存在差異,但所有這些類型的模型都有一個共同點——他們學習表達。神經網路的工作是將一種類型的資料轉換為另一種類型的資料。在訓練期間,神經網路的隱藏層(位於輸入和輸出之間的層)以最能代表輸入資料類型特徵的方式調整其參數,並將其映射到輸出。最初的 Transformer 被設計為用於機器翻譯的序列到序列(seq2seq)模型(當然,序列到序列模型不限於翻譯任務)。它由一個編碼器模組組成,該模組將來自來源語言的輸入字串壓縮為向量,該向量表示單字及其相互之間的關係。解碼器模組將編碼向量轉換為目標語言的文字字串。
#輸入文字必須經過處理並轉換為統一格式,然後才能輸入到Transformer。首先,文字透過“標記器”,將其分解為可以單獨處理的字元區塊。標記化演算法可以取決於應用程式。在大多數情況下,每個單字和標點符號大致算作一個標記。有些字尾和前綴算是單獨的標記(例如,「ize」、「ly」和「pre」)。標記器產生一個數字列表,表示輸入文字的標記ID。
然後將標記轉換為「單字嵌入」。單字嵌入是一種試圖在多維空間中捕捉單字價值的向量。例如,「貓」和「狗」這兩個詞在某些維度上可能具有相似的值,因為它們都用於關於動物和寵物的句子中。然而,在區分貓科動物和犬科動物的其他維度上,「貓」比「狼」更接近「獅子」。同樣,「巴黎」和「倫敦」可能彼此更加接近,因為它們都是城市。然而,“倫敦”更接近“英格蘭”,“巴黎”更接近“法國”,這是因為在一個國家的區分維度上。而單字嵌入通常有數百個維度。
單字嵌入是透過嵌入模型創建的,這些模型與 Transformer 分開訓練。有幾種用於語言任務的預訓練嵌入模型。
一旦句子被轉換成一個單字嵌入列表,它就會被輸入到Transformer 的編碼器模組中。與遞歸神經網路(RNN)和長短時記憶(LSTM)模型不同,Transformer 一次不會接收一個輸入。它可以接收整個句子的嵌入值,並並行處理它們。這使得 Transformer 比它們的前輩更具有計算效率,並且還使它們能夠在正向和反向序列中檢查文本的場景。
為了保持句子中單字的順序,Transformer 應用“位置編碼”,這基本上意味著它修改每個嵌入向量的值,以表示其在文本中的位置。
接下來,輸入被傳遞到第一個編碼器區塊,它會透過「注意層」來處理。注意層試圖捕捉句子中單字之間的關係。例如,想想 「一隻大黑貓碰掉一個瓶子之後橫穿馬路」(The big black cat crossed the road after it dropped a bottle on its side)這個句子。在這裡,模型必須將“it”與“cat”相關聯,將“its”與“bottle”相關聯。因此,它應該建立其他關聯,例如“big”和“cat”或“crossed”和“cat”。否則,注意層接收表示單字值的單字嵌入列表,並產生表示單字及其相互關係的向量列表。注意層包含多個「attention heads」 (注意頭),每個「attention heads」都可以捕捉單字之間的不同類型的關係。
注意層的輸出被饋送到前饋神經網絡,該網絡將其轉換為向量表示,並將其發送到下一個注意層。 Transformers
包含幾個注意力區塊和前饋層,以逐漸捕捉更複雜的關係。
解碼器模組的任務是將編碼器的注意向量轉換為輸出資料(例如,輸入文字的翻譯版本)。在訓練階段,解碼器可以存取編碼器產生的注意向量和預期的結果(例如,翻譯的字串)。
解碼器使用相同的標記化、單字嵌入和注意機制來處理預期結果並建立注意向量。然後,它在編碼器模組中傳遞該注意向量和注意層,從而在輸入和輸出值之間建立關係。在翻譯應用程式中,這是原始語言和目標語言中的單字相互映射的部分。與編碼器模組一樣,解碼器注意向量透過前饋層傳遞。然後其結果被映射到一個非常大的向量池,即目標資料的大小(在翻譯的情況下,這可以涉及數萬個單字)。
#在訓練期間,Transformer 提供了非常大的配對範例語料庫(例如,英語句子及其相應的法語翻譯)。編碼器模組接收並處理完整的輸入字串。然而,解碼器接收到輸出字串的遮罩版本(一次一個單字),並嘗試建立編碼的注意向量和預期結果之間的映射。編碼器嘗試預測下一個單字,並根據其輸出與預期結果之間的差異進行修正。這種回饋使轉換器能夠修改編碼器和解碼器的參數,並逐漸在輸入和輸出語言之間建立正確的對應。
Transformer 擁有的訓練資料和參數越多,它就越有能力在較長文字序列中保持連貫性和一致性。
# 在上述研究的機器翻譯範例中,Transformer 的編碼器模組學習英語單字和句子之間的關係,而解碼器學習英語和法語之間的映射。
但並非所有 Transformer 應用程式都需要編碼器和解碼器模組。例如,大型語言模型的GPT系列使用解碼器模組堆疊來產生文字。 BERT是Google研究人員開發的 Transformer 模型的另一種變體,而它只使用編碼器模組。
其中一些架構的優點是它們可以透過自我監督學習或無監督方法進行訓練。例如,BERT 透過取得大量未標記文字的語料庫,可以屏蔽其中的一部分,並嘗試預測缺少的部分來進行大部分訓練。然後,它根據其預測接近或遠離實際數據的程度調整其參數。透過不斷重複這個過程,BERT 捕捉了不同場景中不同單字之間的關係。在這個預訓練階段之後,BERT 可以透過在少量標記範例上進行訓練來針對下游任務進行微調,例如問答、文字摘要或情緒分析。使用無監督和自我監督的預訓練可以減少註釋訓練資料所需的工作量。
關於 Transformer 和他們正在解鎖的新應用程式還有更多,這超出了本文的範圍。研究人員如今仍在尋找從Transformer中獲得更多幫助的方法。
Transformer 也引發了關於語言理解和通用人工智慧的討論。顯而易見的是,Transformer 與其他神經網路一樣是一種統計模型,能夠以巧妙而複雜的方式捕捉資料中的規律性。雖然它們不像人類那樣「理解」語言,但是其發展仍然令人興奮並且可以提供更多新事物。
原文連結:https://bdtechtalks.com/2022/05/02/what-is-the-transformer/
以上是什麼是Transformer機器學習模型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!