Ketan Doshi | 作者 羅伯特
在第一篇文章中,我們了解了Transformer的功能、使用方式、其高級(jí)架構(gòu)以及優(yōu)勢(shì)。 前一篇文章,移步:Transformers圖解(第1部分):功能概述 在這篇文章中,我們將深入了解它的內(nèi)部運(yùn)作,詳細(xì)研究它是如何工作的。我們將看到數(shù)據(jù)如何通過系統(tǒng)流動(dòng),以及它們的實(shí)際矩陣表示和形狀,理解每個(gè)階段執(zhí)行的計(jì)算。 以下是本系列中之前和接下來文章的快速摘要。整個(gè)系列中的目標(biāo)是不僅了解某物是如何運(yùn)作的,而且為什么它以這種方式運(yùn)作。
功能概述(Transformer的使用方式以及為什么它們比RNN更好。架構(gòu)的組成部分,以及在訓(xùn)練和推理期間的行為)。
工作原理 — 本文(內(nèi)部操作端到端。數(shù)據(jù)如何流動(dòng)以及在每個(gè)階段執(zhí)行的計(jì)算,包括矩陣表示)。
多頭注意力(Transformer中注意力模塊的內(nèi)部工作)。
為什么注意力提升性能(注意力不僅做什么,還為什么它如此有效。注意力如何捕捉句子中單詞之間的關(guān)系)。
1. 架構(gòu)概述 正如我們?cè)诘谝徊糠种锌吹降?,架?gòu)的主要組件包括:
(作者提供的圖像)
編碼器和解碼器的數(shù)據(jù)輸入,其中包括:
嵌入層(Embedding layer)
位置編碼層(Position Encoding layer)
解碼器堆棧包含多個(gè)解碼器。每個(gè)解碼器包含:
兩個(gè)多頭注意力層(Multi-Head Attention layer)
前饋層(Feed-forward layer)
輸出(右上方)—生成最終輸出,并包含:
線性層(Linear layer)
Softmax層(Softmax layer)
為了理解每個(gè)組件的作用,讓我們通過訓(xùn)練Transformer解決翻譯問題的過程,逐步了解Transformer的工作原理。我們將使用訓(xùn)練數(shù)據(jù)的一個(gè)樣本,其中包含輸入序列(英語中的'You are welcome')和目標(biāo)序列(西班牙語中的'De nada')。
2. 嵌入和位置編碼
與任何自然語言處理模型一樣,Transformer需要了解有關(guān)每個(gè)單詞的兩個(gè)方面:?jiǎn)卧~的含義以及它在序列中的位置。 嵌入層編碼單詞的含義。位置編碼層表示單詞的位置。Transformer通過將這兩種編碼相加來組合它們。
2.1 嵌入(embedding)
Transformer有兩個(gè)嵌入層。輸入序列被送入第一個(gè)嵌入層,稱為輸入嵌入。
(作者提供的圖像) 目標(biāo)序列在將目標(biāo)向右移一個(gè)位置并在第一個(gè)位置插入起始標(biāo)記后,被送入第二個(gè)嵌入層。請(qǐng)注意,在推理期間,我們沒有目標(biāo)序列,我們將輸出序列循環(huán)饋送到這第二層,正如我們?cè)诘谝徊糠种袑W(xué)到的。這就是為什么它被稱為輸出嵌入。 文本序列使用我們的詞匯表映射為數(shù)值單詞ID。然后,嵌入層將每個(gè)輸入單詞映射到一個(gè)嵌入向量,這是該單詞含義的更豐富表示。
(作者提供的圖像)
2.2 位置編碼
由于RNN實(shí)現(xiàn)了一個(gè)循環(huán),每個(gè)單詞都按順序輸入,它隱式地知道每個(gè)單詞的位置。 然而,Transformer不使用RNN,序列中的所有單詞都是并行輸入的。這是它相對(duì)于RNN架構(gòu)的主要優(yōu)勢(shì),但這意味著位置信息丟失了,必須單獨(dú)添加。 就像有兩個(gè)嵌入層一樣,有兩個(gè)位置編碼層。位置編碼是獨(dú)立于輸入序列計(jì)算的。這些是僅依賴于序列的最大長(zhǎng)度的固定值。例如,
第一項(xiàng)是指示第一個(gè)位置的常數(shù)代碼,
第二項(xiàng)是指示第二個(gè)位置的常數(shù)代碼,
以此類推。
這些常數(shù)是使用下面的公式計(jì)算的,其中:
pos是單詞在序列中的位置
d_model是編碼向量的長(zhǎng)度(與嵌入向量相同)
是該向量中的索引值。
(作者提供的圖像) 換句話說,它交替使用正弦曲線和余弦曲線,對(duì)于所有偶數(shù)索引使用正弦值,對(duì)于所有奇數(shù)索引使用余弦值。例如,如果我們對(duì)一個(gè)包含40個(gè)單詞的序列進(jìn)行編碼,我們可以看到下面是一些(單詞位置,編碼索引)組合的編碼數(shù)值。
(作者提供的圖像) 藍(lán)色曲線顯示了所有40個(gè)單詞位置的第0個(gè)索引的編碼,橙色曲線顯示了所有40個(gè)單詞位置的第1個(gè)索引的編碼。對(duì)于其余的索引值,將會(huì)有類似的曲線。
3. 矩陣維度
正如我們所知,深度學(xué)習(xí)模型一次處理一個(gè)批次的訓(xùn)練樣本。嵌入層和位置編碼層操作的是表示一批序列樣本的矩陣。嵌入層接收一個(gè)形狀為(樣本數(shù),序列長(zhǎng)度)的單詞ID矩陣。它將每個(gè)單詞ID編碼成一個(gè)長(zhǎng)度為嵌入大小的單詞向量,從而產(chǎn)生一個(gè)形狀為(樣本數(shù),序列長(zhǎng)度,嵌入大?。┑妮敵鼍仃?。位置編碼使用與嵌入大小相等的編碼大小。因此,它產(chǎn)生一個(gè)形狀類似的矩陣,可以添加到嵌入矩陣中。
(作者提供的圖像) 由嵌入層和位置編碼層產(chǎn)生的形狀為(樣本數(shù),序列長(zhǎng)度,嵌入大?。┑木仃囋谡麄€(gè)Transformer中得以保留,因?yàn)閿?shù)據(jù)通過編碼器和解碼器堆棧流動(dòng),直到被最終的輸出層重新整形。 這給出了Transformer中3D矩陣維度的概念。然而,為了簡(jiǎn)化可視化,從這里開始我們將放棄第一個(gè)維度(樣本數(shù)),并使用單個(gè)樣本的2D表示。
(作者提供的圖像) 輸入嵌入將其輸出發(fā)送到編碼器。類似地,輸出嵌入饋入解碼器。
4. 編碼器(Encoder)
編碼器和解碼器堆棧由若干(通常為六個(gè))編碼器和解碼器連接而成。
(作者提供的圖像) 堆棧中的第一個(gè)編碼器從嵌入和位置編碼接收其輸入。堆棧中的其他編碼器從前一個(gè)編碼器接收其輸入。 編碼器將其輸入傳遞到多頭自注意力層。自注意力輸出傳遞到前饋層,然后將其輸出向上傳遞到下一個(gè)編碼器。
(作者提供的圖像) 自注意力和前饋?zhàn)訉佣加欣@過它們的殘差跳連接,然后是一層歸一化。 最后一個(gè)編碼器的輸出被饋送到解碼器堆棧中的每個(gè)解碼器,如下所述。
5. 解碼器(Decoder)
解碼器的結(jié)構(gòu)與編碼器非常相似,但有一些區(qū)別。 與編碼器一樣,堆棧中的第一個(gè)解碼器從輸出嵌入和位置編碼接收其輸入。堆棧中的其他解碼器從前一個(gè)解碼器接收其輸入。 解碼器將其輸入傳遞到多頭自注意力層。這個(gè)自注意力層的運(yùn)作方式略有不同于編碼器中的自注意力層。它只允許關(guān)注序列中較早的位置。這是通過屏蔽未來位置來實(shí)現(xiàn)的,我們將很快討論。
(作者提供的圖像) 與編碼器不同,解碼器有第二個(gè)多頭注意力層,稱為編碼器-解碼器注意力層。編碼器-解碼器注意力層的工作方式類似于自注意力,只是它結(jié)合了兩個(gè)輸入源 —— 在它下面的自注意力層以及編碼器堆棧的輸出。 自注意力輸出傳遞到前饋層,然后將其輸出向上傳遞到下一個(gè)解碼器。 這些子層,自注意力、編碼器-解碼器注意力和前饋,都有繞過它們的殘差跳連接,然后是一層歸一化。
6. 注意力
在第一部分中,我們談到了在處理序列時(shí)為什么注意力非常重要。在Transformer中,注意力在三個(gè)地方使用:
編碼器的自注意力 — 輸入序列關(guān)注自身
解碼器的自注意力 — 目標(biāo)序列關(guān)注自身
解碼器的編碼器-解碼器注意力 — 目標(biāo)序列關(guān)注輸入序列
注意力層以三個(gè)參數(shù)的形式接收其輸入,稱為Query(查詢)、Key(鍵)和Value(值)。
在編碼器的自注意力中,編碼器的輸入傳遞給所有三個(gè)參數(shù):Query、Key 和 Value。
(作者提供的圖像) 在解碼器的自注意力中,解碼器的輸入傳遞給所有三個(gè)參數(shù):Query、Key 和 Value。在解碼器的編碼器-解碼器注意力中,堆棧中最后一個(gè)編碼器的輸出傳遞給 Value 和 Key 參數(shù)。下面的自注意力(和層歸一化)模塊的輸出傳遞給 Query 參數(shù)。
(作者提供的圖像)
7. 多頭注意力
Transformer將每個(gè)注意力處理器稱為一個(gè)注意力頭,并并行地重復(fù)多次。這被稱為多頭注意力。它通過組合多個(gè)類似的注意力計(jì)算,使得注意力具有更強(qiáng)的判別力。
(作者提供的圖像) Query、Key 和 Value 分別通過單獨(dú)的線性層傳遞,每個(gè)層都有自己的權(quán)重,產(chǎn)生三個(gè)結(jié)果分別稱為 Q、K 和 V。然后,它們使用如下所示的注意力公式結(jié)合在一起,產(chǎn)生注意力分?jǐn)?shù)。
(作者提供的圖像)
這里需要意識(shí)到的重要一點(diǎn)是,Q、K 和 V 值攜帶了序列中每個(gè)單詞的編碼表示。注意力計(jì)算然后將每個(gè)單詞與序列中的每個(gè)其他單詞結(jié)合在一起,使得注意力分?jǐn)?shù)為序列中的每個(gè)單詞編碼了一個(gè)分?jǐn)?shù)。 在稍早前討論解碼器時(shí),我們簡(jiǎn)要提到了掩碼。上述注意力圖中也顯示了掩碼。讓我們看看它是如何工作的。
8. 注意力掩碼
在計(jì)算注意力分?jǐn)?shù)時(shí),注意力模塊實(shí)施了一個(gè)掩碼步驟。掩碼有兩個(gè)目的: 在編碼器自注意力和編碼器-解碼器注意力中:掩碼用于將輸入句子中的填充位置的注意力輸出置零,以確保填充不會(huì)影響自注意力。(注意:由于輸入序列的長(zhǎng)度可能不同,它們被擴(kuò)展為帶有填充標(biāo)記的固定長(zhǎng)度向量,就像大多數(shù)NLP應(yīng)用程序一樣。)
(作者提供的圖像) 編碼器-解碼器注意力同樣如此。
(作者提供的圖像) 在解碼器的自注意力中:掩碼用于防止解碼器在預(yù)測(cè)下一個(gè)單詞時(shí)偷看目標(biāo)句子的其余部分。 解碼器處理源序列中的單詞,并使用它們來預(yù)測(cè)目標(biāo)序列中的單詞。在訓(xùn)練期間,通過教師強(qiáng)制(teacher forcing),完整的目標(biāo)序列被作為解碼器的輸入傳遞。因此,在預(yù)測(cè)某個(gè)位置的單詞時(shí),解碼器可以使用該單詞之前以及之后的目標(biāo)單詞。這使得解碼器可以通過使用未來‘時(shí)間步’中的目標(biāo)單詞來‘作弊’。 例如,在預(yù)測(cè)‘Word 3’時(shí),解碼器應(yīng)該只參考目標(biāo)中的前3個(gè)輸入單詞,而不是第4個(gè)單詞‘Ketan’。
(作者提供的圖像) 因此,解碼器屏蔽了序列中稍后出現(xiàn)的輸入單詞。
(作者提供的圖像) 在計(jì)算注意力分?jǐn)?shù)時(shí)(參考前面顯示計(jì)算的圖片),掩碼應(yīng)用于 Softmax 之前的分子部分。被屏蔽的元素(白色方塊)被設(shè)置為負(fù)無窮,以便 Softmax 將這些值轉(zhuǎn)換為零。
9. 生成輸出
堆棧中的最后一個(gè)解碼器將其輸出傳遞給輸出組件,將其轉(zhuǎn)換為最終的輸出句子。 線性層將解碼器向量投影為單詞分?jǐn)?shù),每個(gè)位置的句子中目標(biāo)詞匯表中的每個(gè)唯一單詞都有一個(gè)分?jǐn)?shù)值。例如,如果我們的最終輸出句子有7個(gè)單詞,而目標(biāo)西班牙語詞匯表中有10000個(gè)唯一單詞,我們將為這7個(gè)單詞生成10000個(gè)分?jǐn)?shù)值。分?jǐn)?shù)值指示了每個(gè)單詞在該句子位置的出現(xiàn)概率。 然后,Softmax層將這些分?jǐn)?shù)轉(zhuǎn)換為概率(總和為1.0)。在每個(gè)位置,我們找到具有最高概率的單詞的索引,然后將該索引映射到詞匯表中相應(yīng)的單詞。這些單詞然后形成Transformer的輸出序列。
(作者提供的圖像)
10. 訓(xùn)練和損失函數(shù)
在訓(xùn)練過程中,我們使用交叉熵?fù)p失等損失函數(shù)來比較生成的輸出概率分布與目標(biāo)序列。概率分布給出了每個(gè)單詞在該位置出現(xiàn)的概率。
(作者提供的圖像) 假設(shè)我們的目標(biāo)詞匯表只包含四個(gè)單詞。我們的目標(biāo)是生成一個(gè)概率分布,與我們期望的目標(biāo)序列“De nada END”相匹配。 這意味著第一個(gè)單詞位置的概率分布應(yīng)該對(duì)“De”有一個(gè)概率為1,而對(duì)詞匯表中所有其他單詞的概率為0。同樣,“nada”和“END”在第二和第三個(gè)單詞位置的概率應(yīng)分別為1。 與往常一樣,損失用于計(jì)算梯度,通過反向傳播來訓(xùn)練Transformer。
11. 結(jié)論
希望這能讓你對(duì)Transformer在訓(xùn)練過程中的內(nèi)部運(yùn)作有所了解。正如我們?cè)谇耙黄恼轮杏懻摰哪菢樱谕评磉^程中,它運(yùn)行在一個(gè)循環(huán)中,但大部分處理方式保持不變。 多頭注意力模塊是賦予Transformer強(qiáng)大能力的關(guān)鍵。
審核編輯:黃飛
-
解碼器
+關(guān)注
關(guān)注
9文章
1144瀏覽量
40822 -
Transformer
+關(guān)注
關(guān)注
0文章
145瀏覽量
6026 -
自然語言處理
+關(guān)注
關(guān)注
1文章
619瀏覽量
13599 -
rnn
+關(guān)注
關(guān)注
0文章
89瀏覽量
6899
原文標(biāo)題:Transformers圖解(第2部分):它是如何工作的,逐步說明
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論