近年來(lái),我們聽(tīng)說(shuō)了很多關(guān)于Transformers的事情,并且在過(guò)去的幾年里,它們已經(jīng)在NLP領(lǐng)域取得了巨大成功。Transformers是一種使用注意力機(jī)制(Attention)顯著改進(jìn)深度學(xué)習(xí)NLP翻譯模型性能的架構(gòu)。它首次在論文Attention is all you need中被引入,并迅速確立為大多數(shù)文本數(shù)據(jù)應(yīng)用的主導(dǎo)架構(gòu)。
自那時(shí)以來(lái),包括Google的BERT和OpenAI的GPT系列在內(nèi)的眾多項(xiàng)目已經(jīng)在這個(gè)基礎(chǔ)上進(jìn)行了擴(kuò)展,并發(fā)布了比現(xiàn)有最先進(jìn)基準(zhǔn)更好的性能結(jié)果。
在一系列的文章中,我將介紹Transformers的基礎(chǔ)知識(shí)、其架構(gòu)以及內(nèi)部工作原理。我們將以自上而下的方式了解Transformers的功能。
在后續(xù)的文章中,我們將深入了解系統(tǒng)的運(yùn)作細(xì)節(jié)。我們還將深入研究多頭注意力(multi-head attention)的運(yùn)作,這是Transformers的核心。
以下是本系列和接下來(lái)文章的快速摘要(共計(jì)四篇)。我的目標(biāo)是理解事物的運(yùn)作方式,而不僅僅是了解它是如何運(yùn)作的。
功能概述 — 本文(Transformers的用途以及為什么它們比RNN更好。架構(gòu)的組件,以及在訓(xùn)練和推斷期間的行為)。
工作原理(內(nèi)部操作端到端。數(shù)據(jù)如何流動(dòng)以及執(zhí)行了哪些計(jì)算,包括矩陣表示)。
多頭注意力(貫穿整個(gè)Transformers的注意力模塊的內(nèi)部運(yùn)作)。
為什么注意力提高性能(不僅僅是注意力在做什么,而是為什么它如此有效)。
后面三篇推文進(jìn)行介紹。
為適合中文閱讀習(xí)慣,閱讀更有代入感,原文翻譯后有刪改。
1. 什么是Transformers
Transformers架構(gòu)擅長(zhǎng)處理本質(zhì)上是順序(sequential)的文本數(shù)據(jù)。它們將文本序列作為輸入并生成另一個(gè)文本序列作為輸出,例如將英語(yǔ)句子翻譯成西班牙語(yǔ)。
(作者提供的圖像)
在其核心,它包含堆疊的編碼器層(Encoder layers)和解碼器層(Decoder layers)。
為避免混淆,我們將個(gè)體層稱為編碼器(Encoder)或解碼器(Decoder)。
編碼器堆棧和解碼器堆棧分別有相應(yīng)的嵌入層用于它們的輸入。最后,有一個(gè)輸出層用于生成最終輸出。
(作者提供的圖像)
所有編碼器彼此相同。同樣,所有解碼器也是相同的。
(作者提供的圖像)
編碼器包含非常重要的自注意力層,用于計(jì)算序列中不同單詞之間的關(guān)系,以及一個(gè)前饋層。
解碼器包含自注意力層和前饋層,以及第二個(gè)編碼器-解碼器注意力層。
每個(gè)編碼器和解碼器都有自己的權(quán)重集。
編碼器是所有Transformers架構(gòu)的定義性組件,是可重復(fù)使用的模塊。除了上述兩個(gè)層外,它還在這兩個(gè)層周圍具有殘差跳過(guò)連接(Residual skip connections),并帶有兩個(gè)LayerNorm層。
(作者提供的圖像)
Transformers架構(gòu)有許多變體。有些Transformers架構(gòu)根本沒(méi)有解碼器,完全依賴于編碼器。
2. 注意力的作用是什么?
Transformers取得突破性性能的關(guān)鍵在于它對(duì)注意力的使用。
在處理一個(gè)單詞時(shí),注意力使模型能夠關(guān)注輸入中與該單詞密切相關(guān)的其他單詞。
例如,ball與blue和holding密切相關(guān)。另一方面,blue與boy無(wú)關(guān)。
Transformers架構(gòu)通過(guò)將輸入序列中的每個(gè)單詞與其他每個(gè)單詞相關(guān)聯(lián)來(lái)使用自注意力。
例如,考慮兩個(gè)句子:
The cat drank the milk because it was hungry.
The cat drank the milk because it was sweet.
在第一個(gè)句子中,it指的是cat,而在第二個(gè)句子中,它指的是milk。當(dāng)模型處理it這個(gè)詞時(shí),自注意力為模型提供更多關(guān)于其含義的信息,以便它能將it與正確的詞關(guān)聯(lián)起來(lái)。
深色表示更高的注意力(作者提供的圖像)
為了使其能夠處理關(guān)于句子意圖和語(yǔ)義的更多細(xì)微差別,Transformers為每個(gè)單詞包含多個(gè)注意力分?jǐn)?shù)。
例如,在處理it這個(gè)詞時(shí),第一個(gè)分?jǐn)?shù)突出顯示cat,而第二個(gè)分?jǐn)?shù)突出顯示hungry。因此,當(dāng)它將it這個(gè)詞解碼成另一種語(yǔ)言時(shí),它將在翻譯的詞中結(jié)合cat和hungry的一些方面。
(作者提供的圖像)
3. 訓(xùn)練Transformers
在訓(xùn)練和推斷期間,Transformers的工作稍有不同。
首先,讓我們看看訓(xùn)練期間數(shù)據(jù)的流動(dòng)。訓(xùn)練數(shù)據(jù)包括兩個(gè)部分:
源序列或輸入序列(例如,對(duì)于一個(gè)翻譯問(wèn)題,You are welcome是英語(yǔ)的源序列)
目標(biāo)序列(例如,西班牙語(yǔ)中的De nada是目標(biāo)序列)
Transformers的目標(biāo)是通過(guò)使用輸入和目標(biāo)序列來(lái)學(xué)習(xí)如何輸出目標(biāo)序列。
(作者提供的圖像)
Transformers處理數(shù)據(jù)的步驟如下:
將輸入序列轉(zhuǎn)換為嵌入(帶有位置編碼)并饋送到編碼器。
編碼器堆棧處理此數(shù)據(jù)并生成輸入序列的編碼表示。
目標(biāo)序列以句子開(kāi)始標(biāo)記為前綴,轉(zhuǎn)換為嵌入(帶有位置編碼)并饋送到解碼器。
解碼器堆棧處理此數(shù)據(jù)以及編碼器堆棧的編碼表示,生成目標(biāo)序列的編碼表示。
輸出層將其轉(zhuǎn)換為單詞概率和最終輸出序列。
Transformers的損失函數(shù)將此輸出序列與訓(xùn)練數(shù)據(jù)中的目標(biāo)序列進(jìn)行比較。這個(gè)損失用于在反向傳播期間訓(xùn)練Transformers生成梯度。
4. 推斷
在推斷期間,我們只有輸入序列,并沒(méi)有目標(biāo)序列傳遞給解碼器。Transformers的目標(biāo)是僅從輸入序列中產(chǎn)生目標(biāo)序列。
因此,就像在Seq2Seq模型中一樣,我們?cè)谝粋€(gè)循環(huán)中生成輸出,并將上一個(gè)時(shí)間步的輸出序列饋送到下一個(gè)時(shí)間步的解碼器,直到遇到句子結(jié)束標(biāo)記。
與Seq2Seq模型的不同之處在于,在每個(gè)時(shí)間步,我們重新饋送迄今生成的整個(gè)輸出序列,而不僅僅是最后一個(gè)單詞。
第一時(shí)間步后的推斷流程(圖像由作者提供)
推斷期間數(shù)據(jù)的流動(dòng)如下:
輸入序列被轉(zhuǎn)換為嵌入(帶有位置編碼)并饋送到編碼器。
編碼器堆棧處理此數(shù)據(jù)并生成輸入序列的編碼表示。
與目標(biāo)序列不同,我們使用一個(gè)只有句子開(kāi)始標(biāo)記的空序列。這被轉(zhuǎn)換為嵌入(帶有位置編碼)并饋送到解碼器。
解碼器堆棧處理此數(shù)據(jù)以及編碼器堆棧的編碼表示,生成目標(biāo)序列的編碼表示。
輸出層將其轉(zhuǎn)換為單詞概率并生成輸出序列。
我們將輸出序列的最后一個(gè)詞視為預(yù)測(cè)的詞。該詞現(xiàn)在填入解碼器輸入序列的第二個(gè)位置,其中現(xiàn)在包含一個(gè)句子開(kāi)始標(biāo)記和第一個(gè)單詞。
返回到步驟#3。與以前一樣,將新的解碼器序列饋送到模型。然后取輸出的第二個(gè)詞并將其附加到解碼器序列。重復(fù)此過(guò)程,直到預(yù)測(cè)到句子結(jié)束標(biāo)記。請(qǐng)注意,由于編碼器序列在每次迭代中不變,因此我們不必每次重復(fù)步驟#1和#2(感謝Michal Ku?írka指出這一點(diǎn))。
5. Teacher Forcing(強(qiáng)制教師)
在訓(xùn)練期間將目標(biāo)序列饋送到解碼器的方法被稱為強(qiáng)制教師。我們?yōu)槭裁匆@樣做,這個(gè)術(shù)語(yǔ)是什么意思?
在訓(xùn)練期間,我們本可以使用與推斷期間相同的方法。換句話說(shuō),循環(huán)運(yùn)行Transformers,取輸出序列的最后一個(gè)詞,將其附加到解碼器輸入并在下一次迭代中饋送給解碼器。最終,當(dāng)預(yù)測(cè)到句子結(jié)束標(biāo)記時(shí),損失函數(shù)將比較生成的輸出序列與目標(biāo)序列,以便訓(xùn)練網(wǎng)絡(luò)。
這種循環(huán)會(huì)導(dǎo)致訓(xùn)練時(shí)間更長(zhǎng),而且使訓(xùn)練模型變得更加困難。模型必須基于可能錯(cuò)誤的第一個(gè)預(yù)測(cè)單詞來(lái)預(yù)測(cè)第二個(gè)單詞,依此類推。
相反,通過(guò)將目標(biāo)序列饋送到解碼器,我們可以說(shuō)是在給予它一些提示,就像老師會(huì)做的一樣。即使它預(yù)測(cè)了錯(cuò)誤的第一個(gè)單詞,它仍然可以使用正確的第一個(gè)單詞來(lái)預(yù)測(cè)第二個(gè)單詞,以防這些錯(cuò)誤不斷累積。
此外,Transformers能夠在沒(méi)有循環(huán)的情況下并行輸出所有單詞,從而大大加快訓(xùn)練速度。
6. Transformers用于什么?
Transformers非常靈活,用于大多數(shù)NLP任務(wù),如語(yǔ)言模型和文本分類。它們經(jīng)常用于序列到序列模型,適用于機(jī)器翻譯、文本摘要、問(wèn)答、命名實(shí)體識(shí)別和語(yǔ)音識(shí)別等應(yīng)用。
有不同類型的Transformers架構(gòu)用于解決不同的問(wèn)題。基本的編碼器層被用作這些架構(gòu)的通用構(gòu)建塊,具體取決于正在解決的問(wèn)題,使用不同的應(yīng)用特定的頭(heads)。
7. Transformers分類架構(gòu)
例如,情感分析應(yīng)用將接受文本文檔作為輸入。分類頭采用Transformers的輸出,并生成類標(biāo)簽的預(yù)測(cè),如積極或消極情感。
(作者提供的圖像)
8. Transformers語(yǔ)言模型架構(gòu)
語(yǔ)言模型架構(gòu)將輸入序列的初始部分,如文本句子,作為輸入,并通過(guò)預(yù)測(cè)將跟隨的句子生成新文本。語(yǔ)言模型頭采用Transformers的輸出,并為詞匯表中的每個(gè)單詞生成概率。概率最高的單詞成為下一個(gè)句子中的預(yù)測(cè)輸出。
(作者提供的圖像)
9. 它們?yōu)槭裁幢妊h(huán)神經(jīng)網(wǎng)絡(luò)(RNNs)更好?
在Transformers出現(xiàn)并取代它們之前,基于RNN的序列到序列模型是所有NLP應(yīng)用的事實(shí)標(biāo)準(zhǔn),而且表現(xiàn)良好。
基于RNN的序列到序列模型表現(xiàn)不錯(cuò),當(dāng)注意機(jī)制首次引入時(shí),它被用于增強(qiáng)其性能。
然而,它們有兩個(gè)限制:
難以處理在長(zhǎng)句中分散分開(kāi)的單詞之間的長(zhǎng)程依賴關(guān)系。
它們按照順序逐個(gè)單詞地處理輸入序列,這意味著在完成時(shí)間步t-1的計(jì)算之前,它不能進(jìn)行時(shí)間步t的計(jì)算。這減緩了訓(xùn)練和推斷的速度。
順便提一下,使用CNN,所有輸出可以并行計(jì)算,這使得卷積速度更快。然而,它們?cè)谔幚黹L(zhǎng)程依賴性方面也有局限性:
在卷積層中,只有能夠適應(yīng)內(nèi)核大小的圖像的部分(如果應(yīng)用于文本數(shù)據(jù),則是單詞)可以相互交互。對(duì)于相距較遠(yuǎn)的項(xiàng),您需要具有許多層的更深的網(wǎng)絡(luò)。Transformers架構(gòu)解決了這兩個(gè)限制。它完全摒棄了RNN,并僅依賴于注意力的好處。
它并行處理序列中的所有單詞,從而大大加快了計(jì)算速度。
(作者提供的圖像)
輸入序列中單詞之間的距離不重要。它在計(jì)算相鄰單詞和相距較遠(yuǎn)單詞之間的依賴性方面同樣出色。
現(xiàn)在我們對(duì)Transformers有了一個(gè)高層次的了解,我們可以在下一篇文章中深入了解其內(nèi)部功能,了解它的工作細(xì)節(jié)。
來(lái)源:新機(jī)器視覺(jué)
審核編輯:湯梓紅
-
編碼器
+關(guān)注
關(guān)注
45文章
3638瀏覽量
134428 -
模型
+關(guān)注
關(guān)注
1文章
3226瀏覽量
48809 -
nlp
+關(guān)注
關(guān)注
1文章
488瀏覽量
22033 -
OpenAI
+關(guān)注
關(guān)注
9文章
1079瀏覽量
6482
原文標(biāo)題:【光電智造】Transformers圖解(第1部分):功能概述
文章出處:【微信號(hào):今日光電,微信公眾號(hào):今日光電】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論