Transformer模型(直譯為「變換器」)是一種採用注意力機制的深度學習模型,這一機制可以按輸入資料各部分重要性的不同而分配不同的權重。該模型主要用於自然語言處理(NLP)與電腦視覺(CV)領域。[1]
與迴圈神經網路(RNN)一樣,Transformer模型旨在處理自然語言等順序輸入資料,可應用於翻譯、文字摘要等任務。而與RNN不同的是,Transformer模型能夠一次性處理所有輸入資料。注意力機制可以為輸入序列中的任意位置提供上下文。如果輸入資料是自然語言,則Transformer不必像RNN一樣一次只處理一個單詞,這種架構允許更多的平行計算,並以此減少訓練時間。[2]
Transformer模型於2017年由谷歌大腦的一個團隊推出[2],現已逐步取代長短期記憶(LSTM)等RNN模型成為了NLP問題的首選模型。[3]並列化優勢允許其在更大的資料集上進行訓練。這也促成了BERT、GPT等預訓練模型的發展。[4][5] 這些系統使用了維基百科、Common Crawl等大型語料庫進行訓練,並可以針對特定任務進行微調。[6][7]
背景
在Transformer模型之前,大多數最先進的NLP系統都依賴於諸如LSTM、門控迴圈單元(GRU)等門控RNN模型,並在此基礎上增加了注意力機制。Transformer正是在注意力機制的基礎上構建的,但其沒有使用RNN結構,這表明僅依靠注意力機制就能在效能上比肩加上了注意力機制的RNN模型。
門控RNN模型按順序處理每一個標記(token)並維護一個狀態向量,其中包含所有已輸入資料的表示。如要處理第個標記,模型將表示句中到第個標記為止的狀態向量與最新的第個標記的資訊結合在一起建立一個新的狀態向量,以此表示句中到第個標記為止的狀態。從理論上講,如果狀態向量不斷繼續編碼每個標記的上下文資訊,則來自一個標記的資訊可以在序列中不斷傳播下去。但在實踐中,這一機制是有缺陷的:梯度消失問題使得長句末尾的模型狀態會缺少前面標記的精確資訊。此外,每個標記的計算都依賴於先前標記的計算結果,這也使得其很難在現代深度學習硬體上進行並列處理,這導致了RNN模型訓練效率低下。
注意力機制解決了上述這些問題。這一機制讓模型得以提取序列中任意先前點的狀態資訊。注意力層能夠訪問所有先前的狀態並根據學習到的相關性度量對其進行加權,從而提供相距很遠的標記的相關資訊。
翻譯是一個能夠突顯注意力機制優勢的例子,其中上下文對於句子中單詞的含義至關重要。例如在一個將英語翻譯為法語的系統中,法語輸出的第一個詞很可能取決於英語輸入的前幾個詞。然而在經典的LSTM模型中,為了產生法語輸出的第一個單詞,模型需要訪問處理完最後一個英語單詞後得到的狀態向量。理論上這個向量包含了整個英語句子的資訊,從而為模型提供所有必要的知識。然而在實踐中,LSTM通常無法很好地儲存這些資訊。可以透過添加注意力機制來解決這個問題:解碼器可以訪問每個英語輸入單詞的狀態向量,而不僅僅是最後一個單詞。同時模型可以學習注意力權重,這些權重決定了對每個英語輸入狀態向量的關注程度。
在RNN模型中添加注意力機制能提高模型的效能。而Transformer架構的發展表明,注意力機制本身就足夠強大,並且不需要像RNN模型一樣再對資料進行順序迴圈處理。Transformer模型採用了沒有RNN模型的注意力機制,它能夠同時處理所有標記並計算它們之間的注意力權重。由於注意力機制僅使用來自之前層中其他標記的資訊,因此可以平行計算所有標記以提高訓練速度。
架構
與早期的seq2seq模型一樣,原始的Transformer模型使用編碼器-解碼器(encoder–decoder)架構。編碼器由逐層迭代處理輸入的編碼層組成,而解碼器則由對編碼器的輸出執行相同操作的解碼層組成。
每個編碼層的功能是確定輸入資料的哪些部分彼此相關。它將其編碼作為輸入再傳遞給下一個編碼層。每個解碼層的功能則相反,讀取被編碼的資訊並使用整合好的上下文資訊來生成輸出序列。[8]為了實現這一點,每個編碼層和解碼層都使用了注意力機制。
對於每個輸入,注意力會權衡每個其他輸入的相關性,並從中提取資訊以產生輸出。[9]每個解碼層都包含一個額外的注意力機制,它會在從編碼層提取資訊之前先從之前解碼器的輸出中提取資訊。
Transformer模型的基本構建單元是縮放點積注意力(scaled dot-product attention)單元。當一個句子被傳遞到一個Transformer模型中時,可以同時計算所有標記互相之間的注意力權重。注意力單元為上下文中的每個標記生成嵌入,其中包含有關標記本身的資訊以及由注意力權重加權得到的其他相關標記的資訊。
對於每個注意力單元,Transformer模型學習三個權重矩陣,分別為查詢(query)權重、鍵(key)權重以及值(value)權重。對於每個標記,輸入詞嵌入分別與三個權重矩陣相乘以得到查詢向量、鍵向量與值向量。再使用查詢向量和鍵向量計算注意力權重,即計算和的點積以得到從標記到標記的注意力權重。之後再將注意力權重除以向量維度的平方根以在訓練期間穩定梯度,並透過softmax函式對權重進行歸一化。與的不同意味著注意力是非對稱的:如果標記很關註標記(即很大)並不一定意味著標記也反過來關註標記(即可能很小)。對每一個標記而言,注意力單元的輸出是以(標記到每一個標記的注意力)加權所有標記的值向量得到的加權和。
對所有標記的注意力計算可以表示為使用softmax函式的一個大型矩陣計算,由於可以對矩陣運算速度進行最佳化,這十分利於訓練速度的提升。矩陣、和可分別定義為第行是向量、 和的矩陣。
一組矩陣稱為一個注意力頭(attention head),Transformer模型中每一層都包含多個注意力頭。每個注意力頭都表示不同標記相互之間的注意力,而多個注意力頭則可以針對不同的「相關性」計算不同的注意力權重。許多注意力頭編碼的相關性資訊是人類可以理解的,例如某個注意力頭可能主要關注下一個單詞,而另一個注意力頭則可能主要關注動詞與其直接賓語之間的關係。[10]每個注意力頭的計算可以並列執行,這使得處理速度得以加快。注意力層的輸出被連接起來傳遞到前饋神經網路層。
每個編碼器由一個自注意力機制和一個前饋神經網路兩個主要部分組成。自注意力機制接受來自前一個編碼器的輸入編碼,並計算它們之間相關性的權重以生成輸出編碼。前饋神經網路則進一步單獨處理每個輸出編碼。然後將這些輸出編碼作為輸入傳遞給下一個編碼器以及解碼器。
第一個編碼器將輸入序列的位置資訊和嵌入作為其輸入。位置資訊向Transformer模型提供了序列的順序資訊,這是模型中唯一利用這一資訊的部分。[2]
編碼器是雙向的,這意味著當前標記的注意力可以放在之前或之後的標記上。
每個解碼器由一個自注意力機制、一個針對編碼器的注意力機制和一個前饋神經網路三個主要部分組成。解碼器的功能與編碼器類似,但插入了一個額外的注意力機制,它從編碼器生成的編碼中提取相關資訊。這種機制也可以稱為編碼器-解碼器注意力(encoder-decoder attention)。[2][9]
與第一個編碼器一樣,第一個解碼器也將輸出序列的位置資訊和嵌入作為其輸入。因為模型不能使用當前或未來的輸出來預測輸出,因此必須對輸出序列進行部分封鎖以防止這種反向資訊流。[2]這使得自回歸文字生成成為可能。最後一個解碼器之後是最終的線性變換和softmax層以產生所有詞彙的輸出概率。
GPT是一種僅具有解碼器的架構。
訓練基於Transformer模型的架構可能很昂貴,尤其是對於長輸入而言。替代架構包括Reformer模型、ETC/BigBird模型等[11],前者可以將計算複雜度從減少為 ,後者則可以減少到,其中表示序列長度。其實現得益於局部敏感雜湊與可逆層。[12][13]
原始的Transformer模型需要與上下文窗口大小成二次方的主記憶體大小。無注意力Transformer模型(Attention Free Transformer)[14]則將對主記憶體的需求減少為線性依賴,同時透過連接鏈與值保留了Transformer模型的優勢。
2020年底推出了用於比較不同Transformer架構的基準測試。[15]
訓練
Transformer模型通常會進行自監督學習,包括無監督預訓練和監督微調。由於監督微調時使用的帶標籤訓練資料一般比較有限,預訓練通常會在比微調時所用的更大的資料集上完成。預訓練和微調的任務通常包括:
應用
Transformer模型在自然語言處理(NLP)領域取得了巨大成功,例如機器翻譯與時間序列預測任務。[17]包括GPT-2、GPT-3、BERT、XLNet與RoBERTa在內的許多預訓練模型展示了Transformer模型執行各種NLP相關任務的能力,並有很多潛在實際應用。[6][7][18]這些應用包括:
2020年,Transformer架構(更具體地說是GPT-2)被證明可以透過微調執行下象棋的任務。[24]Transformer模型也已應用於圖像處理,其結果可與卷積神經網路相媲美。[25][26]
實現
Transformer模型已在TensorFlow、PyTorch等標準深度學習框架中實現。
Transformers是由Hugging Face製作的一個庫,提供基於Transformer的架構和預訓練模型。[3]
參見
參考文獻
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.