
本文通過可視化的方式清晰地展示了Transformer的工作本質,并從本質中探索了它具有優(yōu)良表現(xiàn)的原因。
關鍵字:注意力機制 Transformer NLP

在過去的幾年里,Transformers席卷了NLP 的世界?,F(xiàn)在,它們也成功地用于NLP 以外的技術中。由于注意力(Attention)模塊,Transformer 從中受益良多,而這一切都是因為注意力模塊捕獲了序列中每個單詞與每個其他單詞之間的關系。然而,最重要的問題是transformer究竟是如何做到這一點的?在本文中,我們將嘗試回答這個問題,并理解為什么它要執(zhí)行它所做的計算。本文作者在關于transformer的系列文章中還有幾篇文章。在那些文章中,我們了解了 Transformer架構,并逐步了解了它們在訓練和推理過程中所進行的操作。我們還探索了其背后的理論細節(jié),并準確了解了它們的工作原理。1. 功能概述(如何使用 Transformer,以及為什么它們比RNN 更好。該架構的組件,以及訓練和推理期間的行為。)https://towardsdatascience.com/transformers-explained-visually-part-1-overview-of-functionality-95a6dd460452
2. 工作原理(端到端的內部操作。數(shù)據(jù)如何流動以及執(zhí)行哪些計算,其中包括矩陣表示。)https://towardsdatascience.com/transformers-explained-visually-part-2-how-it-works-step-by-step-b49fa4a64f34
3. 多頭注意力(整個Transformer中注意力模塊的內部工作原理。)https://towardsdatascience.com/transformers-explained-visually-part-3-multi-head-attention-deep-dive-1c1ff1024853
如果你對一般的 NLP 應用感興趣,這里還有一些你可能喜歡的其他文章。
1. 集束搜索(在Speech-to-Text 和 NLP 應用中常用于增強預測的算法)
https://towardsdatascience.com/foundations-of-nlp-explained-visually-beam-search-how-it-works-1586b9849a24
2. Bleu分數(shù)(Bleu Score 和 Word Error Rate 是 NLP 模型的兩個基本指標)
https://towardsdatascience.com/foundations-of-nlp-explained-bleu-score-and-wer-metrics-1a5ba06d812b
要了解是什么讓Transformer得以工作,我們必須關注注意力機制。讓我們從它的輸入開始,看看它如何處理這個輸入。輸入序列如何到達注意力模塊
注意力模塊存在于編碼器堆棧中的每個編碼器中,以及解碼器堆棧中的每個解碼器中。我們將首先來看看編碼器的注意力機制。
編碼器中的Attention機制(圖源自作者)
例如,假設我們正在解決英語到西班牙語的翻譯問題,其中一個樣本源序列“是藍色的”。目標序列是“La bola es azul”。
源序列首先通過Embedding層和位置編碼層(Position Encoding layer),它為序列中的每個詞生成嵌入向量。Embedding向量被傳遞到編碼器,在那里它將首先到達注意力模塊。
在注意力機制中,嵌入序列將通過三個線性層,產(chǎn)生三個獨立的矩陣——稱為查詢(Query)、鍵(Key)和價值(Value)。這些是用于計算注意力分數(shù)的三個矩陣。
要記住的重要一點是,這些矩陣的每一“行”對應源序列中的一個詞。

每個輸入行都是序列中的一個單詞
我們了解注意力機制的方式是從源序列中的單個單詞開始,然后沿著它們通過Transformer的路徑走。我們尤其要關注注意力模塊內部發(fā)生的事情。這將幫助我們清楚地看到源和目標序列中的每個單詞如何與源和目標序列中的其他單詞交互。因此,在我們對此進行解釋時,請專注于對每個單詞執(zhí)行哪些操作,以及每個向量如何映射到原始的輸入單詞。如果一些細節(jié)與每個單詞的去向沒有直接關系,我們則不需要關注他們,例如矩陣形狀、算術計算的細節(jié)、多頭注意力等。因此,為了簡化解釋和可視化過程,我們將忽略嵌入維度并只跟蹤對應于每個單詞的行。
每個單詞都經(jīng)過一系列可學習的轉換
每行都是其對應的源詞通過一系列轉換生成的——這些轉換是:嵌入、位置編碼和線性層。以上這些轉換都是可訓練的操作。意味著這些操作中使用的權重不是預先確定的,而是由模型為了生成所需要的輸出預測而不斷學習更新的。
學習線性(Linear)和嵌入層的權重(圖源自作者)
這里的關鍵問題是,Transformer如何確定哪組權重會給它最好的結果?請將這一點牢記在心,我們稍后會再討論。
注意力得分——查詢(Query)和關鍵詞(Key)的點積
注意力模塊執(zhí)行幾個步驟,但這里,我們只關注線性層和注意力得分。

多頭注意力機制(圖片源自作者)

從公式中我們可以看出,Attention模塊中的第一步是在 Query (Q) 矩陣和 Key (K) 矩陣的轉置之間進行矩陣乘法(即點積)。讓我們來觀察每個單詞會發(fā)生什么。我們生成一個中間矩陣(我們稱之為“因子(Factor)”矩陣),其中每個單元格是兩個詞之間的矩陣乘法。
例如,第四行中的每一列對應于第四個查詢詞(Query)與每個關鍵字(Key)之間的點積。
查詢矩陣和關鍵矩陣之間的點積(圖源自作者)
注意力得分——Query-Key和Value詞之間的點積
下一步,是在這個中間“因子(factor)”矩陣和價值(Value)矩陣之間進行矩陣乘法,來計算注意力模塊輸出的注意力分數(shù)。這里我們可以看到第四行對應的是第四個Query詞矩陣乘以所有其他Key和Value詞。

Query-Key矩陣和價值矩陣之間的點積(圖源自作者)于是,這樣就生成了注意力模塊輸出的注意力得分向量 (Z)。可以這樣思考這個輸出分數(shù):對于每個單詞,它是來自“Value”矩陣的每個單詞的編碼值,由“factor”矩陣加權。因子(factor)矩陣是該特定單詞的Query值與所有單詞的Key值的點積。
查詢(Query)、鍵(Key)和價值(Value)詞的作用是什么?
查詢(Query)詞可以解釋為我們正在計算注意力的詞。關鍵(Key)和價值(Value)詞是我們關注的詞,即該詞與查詢(Query)詞的相關程度如何。
關注所有其他詞時“藍色”這個詞的注意力得分(圖源自作者)例如,對于句子“The ball is blue”,單詞“blue”所在的行將包含“blue”與其他單詞的注意力得分。這里,“blue”是查詢(Query)詞,其他詞是“Key/Value”。與此同時,還有其他操作正在執(zhí)行,例如除法和softmax函數(shù)。但我們可以在本文中忽略它們,因為它們只是改變矩陣中的數(shù)值,不影響矩陣中每個單詞所對應行的位置。它們也不涉及任何詞間交互。點積代表了單詞之間的相似性
我們已經(jīng)看到,注意力得分通過計算點積然后將它們相加來捕捉特定單詞和句子中每個其他單詞之間的交互行為。但是矩陣乘法是如何幫助Transformer確定兩個詞之間的相關性呢?為了理解這一點,請記住 查詢(Query)、鍵(Key) 和 價值(Value)實際上是具有Embedding維度的向量。讓我們重點看看這些向量之間的矩陣乘法是如何計算的。
當我們在兩個向量之間進行點積,我們將成對的數(shù)字相乘,然后將它們相加。如果兩個成對的數(shù)字(例如上面的“a”和“d”)都是正數(shù)或都是負數(shù),那么乘積將為正數(shù)。乘積會使得最終總和增加。
如果其中一個數(shù)為正數(shù),另一個數(shù)為負數(shù),則乘積將為負數(shù)。乘積會使得最終總和減少。
如果乘積為正,則兩個數(shù)字越大,它們使得最終總和的增長就越大。
這意味著如果兩個向量中相應數(shù)字的正負號一致,則最終和會更大。
Transformer如何學習單詞之間的相關性?
上一節(jié)介紹的點積這個概念也適用于注意力得分。如果兩個詞的向量越一致,則注意力得分會越高。我們希望句子中兩個相互關聯(lián)的單詞的注意力得分較高,兩個互不相關的詞的得分較低。例如,對于句子“The black cat drink the milk”,“milk”這個詞與“drank”的相關性很強,但可能與“cat”的相關性略低,甚至與“black”無關。我們希望“milk”和“drank”產(chǎn)生較高的注意力分數(shù),“milk”和“cat”產(chǎn)生的分數(shù)略低,而“milk”和“black”產(chǎn)生的分數(shù)可以忽略不計。這是我們希望模型通過學習而產(chǎn)生的輸出。為此,“milk”和“drank”的詞向量必須一致?!癿ilk”和“cat”的向量會有些不同。對于“milk”和“black”向量,它們則非常不同。回到我們一直牢記在心的那個問題——Transformer如何確定哪組權重會給它帶來最好的結果?詞向量是基于詞嵌入和線性層的權重生成的。因此,Transformer可以學習這些嵌入、線性權重等信息生成上述要求的詞向量。換句話說,它將以以下一種方式學習這些嵌入和權重:如果句子中的兩個詞彼此相關,那么它們的詞向量將對齊或一致,從而產(chǎn)生更高的注意力得分。對于彼此不相關的詞,詞向量不會對齊,并且會產(chǎn)生較低的注意力得分。
因此,“milk”和“drank”的嵌入向量將非常一致并產(chǎn)生高注意力得分。對于“milk”和“cat”,它們的向量會略有不同,所以注意力得分略有下降,而“milk”和“black”的注意力得分最低。
以上就是注意力模塊本質原理。
總結——是什么讓Transformer工作?
Query和Key之間的點積計算了每對單詞之間的相關性。然后將此相關性用作“因子(factor)”矩陣來計算所有價值詞的加權總和,該加權總和作為注意力得分進行輸出。Transformer以這樣一種方式學習嵌入向量等,使彼此相關的單詞更加對齊或一致。這是引入三個線性層并構造三個版本的輸入序列(查詢(Query)、鍵(Key)和值(Value))的原因之一。這給了注意力模塊更多的參數(shù),使它能夠學習并調整詞向量的構建。Transformer中的編碼器自注意力機制
注意力模塊在Transformer中的三個地方使用:Transformer中的注意力機制(圖源自作者)在編碼器自注意力機制中,我們計算源句中每個單詞與源句中其他單詞的相關性。這發(fā)生在堆棧中的所有編碼器中。Transformer中的解碼器自注意力機制
以上在編碼器自注意力機制中看到的大部分內容也適用于解碼器中的注意力機制,其中只有一些微小但重要的不同之處。在解碼器自注意力機制中,我們計算目標句子中每個單詞與目標句子中每個其他單詞的相關性。Transformer中的編碼-解碼注意力機制
在編碼-解碼注意力機制中,查詢(Query)從目標句中獲取,鍵(Key)和價值(Value)從源句中獲取。因此,它計算目標句子中的每個單詞與源句子中的每個單詞的相關性。結論
希望本文能讓你對Transformer設計的優(yōu)美之處有一個很好的認識。請閱讀作者本系列的其他 Transformer文章,以深入了解為什么Transformer 現(xiàn)在已成為眾多深度學習應用程序的首選架構。Transformers Explained Visually — Not Just How, but Why They Work So Wellhttps://towardsdatascience.com/transformers-explained-visually-not-just-how-but-why-they-work-so-well-d840bd61a9d3歐陽錦,一名在埃因霍溫理工大學就讀的碩士生。喜歡數(shù)據(jù)科學和人工智能相關方向。歡迎不同觀點和想法的交流與碰撞,對未知充滿好奇,對熱愛充滿堅持。
工作內容:需要一顆細致的心,將選取好的外文文章翻譯成流暢的中文。如果你是數(shù)據(jù)科學/統(tǒng)計學/計算機類的留學生,或在海外從事相關工作,或對自己外語水平有信心的朋友歡迎加入翻譯小組。
你能得到:定期的翻譯培訓提高志愿者的翻譯水平,提高對于數(shù)據(jù)科學前沿的認知,海外的朋友可以和國內技術應用發(fā)展保持聯(lián)系,THU數(shù)據(jù)派產(chǎn)學研的背景為志愿者帶來好的發(fā)展機遇。
其他福利:來自于名企的數(shù)據(jù)科學工作者,北大清華以及海外等名校學生他們都將成為你在翻譯小組的伙伴。
點擊文末“閱讀原文”加入數(shù)據(jù)派團隊~
轉載須知
如需轉載,請在開篇顯著位置注明作者和出處(轉自:數(shù)據(jù)派ID:DatapiTHU),并在文章結尾放置數(shù)據(jù)派醒目二維碼。有原創(chuàng)標識文章,請發(fā)送【文章名稱-待授權公眾號名稱及ID】至聯(lián)系郵箱,申請白名單授權并按要求編輯。
發(fā)布后請將鏈接反饋至聯(lián)系郵箱(見下方)。未經(jīng)許可的轉載以及改編者,我們將依法追究其法律責任。