自 2017 年推出以來(lái),Transformer 已成為機(jī)器學(xué)習(xí)領(lǐng)域的一支重要力量,徹底改變了翻譯和自動(dòng)完成服務(wù)的功能。
最近,隨著 OpenAI 的 ChatGPT、GPT-4 和 Meta 的 LLama 等大型語(yǔ)言模型的出現(xiàn),Transformer 的受歡迎程度進(jìn)一步飆升。這些引起了巨大關(guān)注和興奮的模型都是建立在 Transformer 架構(gòu)的基礎(chǔ)上的。通過(guò)利用 Transformer 的力量,這些模型在自然語(yǔ)言理解和生成方面取得了顯著的突破。
盡管有很多很好的資源可以解釋Transformer的工作原理,但我發(fā)現(xiàn)自己處于這樣的境地:我理解其機(jī)制如何在數(shù)學(xué)上工作,但發(fā)現(xiàn)很難直觀地解釋Transformer如何工作。
在這篇博文[1]中,我的目標(biāo)是在不依賴代碼或數(shù)學(xué)的情況下提供Transformer如何工作的高級(jí)解釋。我的目標(biāo)是避免混淆技術(shù)術(shù)語(yǔ)以及與以前的架構(gòu)進(jìn)行比較。雖然我會(huì)盡量讓事情變得簡(jiǎn)單,但這并不容易,因?yàn)門ransformer相當(dāng)復(fù)雜,但我希望它能讓人們更好地直觀地了解它們的作用以及如何做到這一點(diǎn)。
什么是Transformer?
Transformer 是一種神經(jīng)網(wǎng)絡(luò)架構(gòu),非常適合涉及處理序列作為輸入的任務(wù)。也許在這種情況下,序列最常見(jiàn)的例子是句子,我們可以將其視為有序的單詞集。
這些模型的目的是為序列中的每個(gè)元素創(chuàng)建數(shù)字表示;封裝有關(guān)元素及其相鄰上下文的基本信息。然后,所得的數(shù)字表示可以傳遞到下游網(wǎng)絡(luò),下游網(wǎng)絡(luò)可以利用這些信息來(lái)執(zhí)行各種任務(wù),包括生成和分類。
通過(guò)創(chuàng)建如此豐富的表示,這些模型使下游網(wǎng)絡(luò)能夠更好地理解輸入序列中的底層模式和關(guān)系,從而增強(qiáng)它們生成連貫且上下文相關(guān)的輸出的能力。
Transformer 的主要優(yōu)勢(shì)在于它們能夠處理序列內(nèi)的遠(yuǎn)程依賴關(guān)系,并且效率很高;能夠并行處理序列。這對(duì)于機(jī)器翻譯、情感分析和文本生成等任務(wù)特別有用。

什么是注意力 ?
也許 Transformer 架構(gòu)使用的最重要的機(jī)制被稱為注意力,它使網(wǎng)絡(luò)能夠理解輸入序列的哪些部分與給定任務(wù)最相關(guān)。對(duì)于序列中的每個(gè)標(biāo)記,注意力機(jī)制會(huì)識(shí)別哪些其他標(biāo)記對(duì)于理解給定上下文中的當(dāng)前標(biāo)記很重要。在我們探索如何在變壓器中實(shí)現(xiàn)這一點(diǎn)之前,讓我們先從簡(jiǎn)單的開(kāi)始,嘗試?yán)斫庾⒁饬C(jī)制試圖從概念上實(shí)現(xiàn)什么,以建立我們的直覺(jué)。
理解注意力的一種方法是將其視為一種用包含有關(guān)其相鄰標(biāo)記信息的嵌入替換每個(gè)標(biāo)記嵌入的方法;而不是對(duì)每個(gè)標(biāo)記使用相同的嵌入,而不管其上下文如何。如果我們知道哪些標(biāo)記與當(dāng)前標(biāo)記相關(guān),捕獲此上下文的一種方法是創(chuàng)建這些嵌入的加權(quán)平均值,或者更一般地說(shuō),創(chuàng)建線性組合。

讓我們考慮一個(gè)簡(jiǎn)單的例子,說(shuō)明如何查找我們之前看到的句子之一。在應(yīng)用注意力之前,序列中的嵌入沒(méi)有其鄰居的上下文。因此,我們可以將單詞 light 的嵌入可視化為以下線性組合。

在這里,我們可以看到我們的權(quán)重只是單位矩陣。應(yīng)用我們的注意力機(jī)制后,我們希望學(xué)習(xí)一個(gè)權(quán)重矩陣,以便我們可以用類似于以下的方式表達(dá)我們的光嵌入。

這次,我們?yōu)榕c我們選擇的標(biāo)記序列中最相關(guān)的部分相對(duì)應(yīng)的嵌入賦予了更大的權(quán)重;這應(yīng)該確保在新的嵌入向量中捕獲最重要的上下文。包含當(dāng)前上下文信息的嵌入有時(shí)被稱為上下文嵌入,這就是我們最終想要?jiǎng)?chuàng)建的。
注意力是如何計(jì)算的?
注意力有多種類型,主要區(qū)別在于用于執(zhí)行線性組合的權(quán)重的計(jì)算方式。在這里,我們將考慮原始論文中介紹的縮放點(diǎn)積注意力,因?yàn)檫@是最常見(jiàn)的方法。在本節(jié)中,假設(shè)我們所有的嵌入都已進(jìn)行位置編碼。
回想一下,我們的目標(biāo)是使用原始嵌入的線性組合來(lái)創(chuàng)建上下文嵌入,讓我們從簡(jiǎn)單開(kāi)始,假設(shè)我們可以將所需的所有必要信息編碼到我們學(xué)習(xí)的嵌入向量中,而我們需要計(jì)算的只是權(quán)重。
為了計(jì)算權(quán)重,我們必須首先確定哪些標(biāo)記彼此相關(guān)。為了實(shí)現(xiàn)這一點(diǎn),我們需要建立兩個(gè)嵌入之間的相似性概念。表示這種相似性的一種方法是使用點(diǎn)積,我們希望學(xué)習(xí)嵌入,以便較高的分?jǐn)?shù)表明兩個(gè)單詞更相似。

由于對(duì)于每個(gè)標(biāo)記,我們需要計(jì)算其與序列中每個(gè)其他標(biāo)記的相關(guān)性,因此我們可以將其概括為矩陣乘法,這為我們提供了權(quán)重矩陣;這通常被稱為注意力分?jǐn)?shù)。為了確保權(quán)重總和為 1,我們還應(yīng)用了 SoftMax 函數(shù)。然而,由于矩陣乘法可以產(chǎn)生任意大的數(shù)字,這可能會(huì)導(dǎo)致 SoftMax 函數(shù)針對(duì)較大的注意力分?jǐn)?shù)返回非常小的梯度;這可能會(huì)導(dǎo)致訓(xùn)練過(guò)程中梯度消失的問(wèn)題。為了解決這個(gè)問(wèn)題,在應(yīng)用 SoftMax 之前,將注意力分?jǐn)?shù)乘以縮放因子。

現(xiàn)在,為了獲得上下文嵌入矩陣,我們可以將注意力分?jǐn)?shù)乘以原始嵌入矩陣;這相當(dāng)于對(duì)我們的嵌入進(jìn)行線性組合。

雖然模型有可能學(xué)習(xí)足夠復(fù)雜的嵌入來(lái)生成注意力分?jǐn)?shù)和隨后的上下文嵌入;我們?cè)噲D將大量信息壓縮到通常很小的嵌入維度中。
因此,為了讓模型學(xué)習(xí)任務(wù)稍微容易一些,讓我們引入一些更容易學(xué)習(xí)的參數(shù)!我們不直接使用嵌入矩陣,而是通過(guò)三個(gè)獨(dú)立的線性層(矩陣乘法);這應(yīng)該使模型能夠“關(guān)注”嵌入的不同部分。如下圖所示:

從圖像中,我們可以看到線性投影被標(biāo)記為 Q、K 和 V。在原始論文中,這些投影被命名為 Query、Key 和 Value,據(jù)說(shuō)是受到信息檢索的啟發(fā)。就我個(gè)人而言,我從未發(fā)現(xiàn)這個(gè)類比有助于我的理解,所以我傾向于不關(guān)注這一點(diǎn);我遵循此處的術(shù)語(yǔ)是為了與文獻(xiàn)保持一致,并明確這些線性層是不同的。
現(xiàn)在我們了解了這個(gè)過(guò)程是如何工作的,我們可以將注意力計(jì)算視為具有三個(gè)輸入的單個(gè)塊,這將被傳遞到 Q、K 和 V。

當(dāng)我們將相同的嵌入矩陣傳遞給 Q、K 和 V 時(shí),這稱為自注意力。
什么是多頭注意力?
在實(shí)踐中,我們經(jīng)常并行使用多個(gè)自注意力模塊,以使 Transformer 能夠同時(shí)關(guān)注輸入序列的不同部分——這稱為多頭注意力。
多頭注意力背后的想法非常簡(jiǎn)單,多個(gè)獨(dú)立自注意力塊的輸出連接在一起,然后通過(guò)線性層。該線性層使模型能夠?qū)W習(xí)組合來(lái)自每個(gè)注意力頭的上下文信息。
在實(shí)踐中,每個(gè)自注意力塊中使用的隱藏維度大小通常選擇為原始嵌入大小除以注意力頭的數(shù)量;保留嵌入矩陣的形狀。

Transformer 還由什么組成?
盡管介紹 Transformer 的論文被命名為“Attention is all you need”,但這有點(diǎn)令人困惑,因?yàn)?Transformer 的組件不僅僅是 Attention!
Transformer 還包含以下內(nèi)容:
-
前饋神經(jīng)網(wǎng)絡(luò)(FFN):一種兩層神經(jīng)網(wǎng)絡(luò),獨(dú)立應(yīng)用于批次和序列中的每個(gè)標(biāo)記嵌入。 FFN 塊的目的是將額外的可學(xué)習(xí)參數(shù)引入到轉(zhuǎn)換器中,這些參數(shù)負(fù)責(zé)確保上下文嵌入是不同的且分散的。原始論文使用了 GeLU 激活函數(shù),但 FFN 的組件可能會(huì)根據(jù)架構(gòu)的不同而有所不同。 -
層歸一化:有助于穩(wěn)定深度神經(jīng)網(wǎng)絡(luò)(包括 Transformer)的訓(xùn)練。它標(biāo)準(zhǔn)化每個(gè)序列的激活,防止它們?cè)谟?xùn)練過(guò)程中變得太大或太小;這可能會(huì)導(dǎo)致與梯度相關(guān)的問(wèn)題,例如梯度消失或爆炸。這種穩(wěn)定性對(duì)于有效訓(xùn)練非常深的 Transformer 模型至關(guān)重要。 -
跳過(guò)連接:與 ResNet 架構(gòu)一樣,殘差連接用于緩解梯度消失問(wèn)題并提高訓(xùn)練穩(wěn)定性。
雖然 Transformer 架構(gòu)自推出以來(lái)一直保持相當(dāng)穩(wěn)定,但層歸一化塊的位置可能會(huì)根據(jù) Transformer 架構(gòu)而變化。原始架構(gòu)(現(xiàn)在稱為后層規(guī)范)如下所示:

如下圖所示,最近架構(gòu)中最常見(jiàn)的放置是預(yù)層規(guī)范,它將規(guī)范化塊放置在跳躍連接內(nèi)的自注意力和 FFN 塊之前。

Transformer 有哪些不同類型?
雖然現(xiàn)在有許多不同的Transformer 架構(gòu),但大多數(shù)可以分為三種主要類型。
編碼器架構(gòu)
編碼器模型旨在產(chǎn)生可用于下游任務(wù)(例如分類或命名實(shí)體識(shí)別)的上下文嵌入,因?yàn)樽⒁饬C(jī)制能夠關(guān)注整個(gè)輸入序列;這是本文到目前為止所探討的架構(gòu)類型。最流行的純編碼器Transformer系列是 BERT 及其變體。
將數(shù)據(jù)傳遞給一個(gè)或多個(gè)Transformer塊后,我們得到了一個(gè)復(fù)雜的上下文嵌入矩陣,表示序列中每個(gè)標(biāo)記的嵌入。然而,要將其用于分類等下游任務(wù),我們只需要做出一個(gè)預(yù)測(cè)。傳統(tǒng)上,第一個(gè)標(biāo)記被取出并通過(guò)分類頭;通常包含 Dropout 和 Linear 層。這些層的輸出可以通過(guò) SoftMax 函數(shù)傳遞,將其轉(zhuǎn)換為類概率。下面描述了一個(gè)示例。

解碼器架構(gòu)
與編碼器架構(gòu)幾乎相同,主要區(qū)別在于解碼器架構(gòu)采用屏蔽(或因果)自注意力層,因此注意力機(jī)制只能關(guān)注輸入序列的當(dāng)前和先前元素;這意味著生成的上下文嵌入僅考慮之前的上下文。流行的僅解碼器型號(hào)包括 GPT 系列。

這通常是通過(guò)用二元下三角矩陣屏蔽注意力分?jǐn)?shù)并用負(fù)無(wú)窮大替換非屏蔽元素來(lái)實(shí)現(xiàn)的;當(dāng)通過(guò)下面的 SoftMax 操作時(shí),這將確保這些位置的注意力分?jǐn)?shù)等于 0。我們可以更新之前的自注意力圖,將其包括在內(nèi),如下所示。

由于它們只能從當(dāng)前位置和向后進(jìn)行,因此解碼器架構(gòu)通常用于自回歸任務(wù),例如序列生成。然而,當(dāng)使用上下文嵌入來(lái)生成序列時(shí),與使用編碼器相比,還有一些額外的考慮因素。下面顯示了一個(gè)示例。

我們可以注意到,雖然解碼器為輸入序列中的每個(gè)標(biāo)記生成上下文嵌入,但在生成序列時(shí),我們通常使用與最終標(biāo)記相對(duì)應(yīng)的嵌入作為后續(xù)層的輸入。
此外,將 SoftMax 函數(shù)應(yīng)用于 logits 后,如果不應(yīng)用過(guò)濾,我們將收到模型詞匯表中每個(gè)標(biāo)記的概率分布;這可能非常大!通常,我們希望使用各種過(guò)濾策略來(lái)減少潛在選項(xiàng)的數(shù)量,一些最常見(jiàn)的方法是:
-
Temperature
調(diào)整:Temperature
是一個(gè)應(yīng)用于 SoftMax 操作內(nèi)部的參數(shù),它會(huì)影響生成文本的隨機(jī)性。它通過(guò)改變輸出詞的概率分布來(lái)確定模型輸出的創(chuàng)造性或集中度。較高的Temperature
使分布變得平坦,使輸出更加多樣化。 -
Top-P 采樣:此方法根據(jù)給定的概率閾值過(guò)濾下一個(gè)標(biāo)記的潛在候選者數(shù)量,并根據(jù)高于此閾值的候選者重新分配概率分布。 -
Top-K 采樣:此方法根據(jù) Logit 或概率得分(取決于實(shí)現(xiàn))將潛在候選者的數(shù)量限制為 K 個(gè)最有可能的標(biāo)記
一旦我們改變或減少了下一個(gè)標(biāo)記的潛在候選者的概率分布,我們就可以從中采樣以獲得我們的預(yù)測(cè)——這只是從多項(xiàng)分布中采樣。然后將預(yù)測(cè)的標(biāo)記附加到輸入序列并反饋到模型中,直到生成所需數(shù)量的標(biāo)記,或者模型生成停止標(biāo)記;表示序列結(jié)束的特殊標(biāo)記。
編碼器-解碼器架構(gòu)
最初,Transformer 是作為機(jī)器翻譯的架構(gòu)提出的,并使用編碼器和解碼器來(lái)實(shí)現(xiàn)這一目標(biāo);在使用解碼器轉(zhuǎn)換為所需的輸出格式之前,使用編碼器創(chuàng)建中間表示。雖然編碼器-解碼器轉(zhuǎn)換器已經(jīng)變得不太常見(jiàn),但 T5 等架構(gòu)演示了如何將問(wèn)答、摘要和分類等任務(wù)構(gòu)建為序列到序列問(wèn)題并使用這種方法來(lái)解決。
編碼器-解碼器架構(gòu)的主要區(qū)別在于解碼器使用編碼器-解碼器注意力,它在注意力計(jì)算期間同時(shí)使用編碼器的輸出(作為 K 和 V)和解碼器塊的輸入(作為 Q)。這與自注意力形成對(duì)比,自注意力對(duì)于所有輸入使用相同的輸入嵌入矩陣。除此之外,整體生成過(guò)程與使用僅解碼器架構(gòu)非常相似。
我們可以將編碼器-解碼器架構(gòu)可視化,如下圖所示。在這里,為了簡(jiǎn)化圖形,我選擇描繪原始論文中所示的變壓器的后層范數(shù)變體;其中層規(guī)范層位于注意塊之后。

希望上面的描述對(duì)您理解 Transformer
有所幫助。
Reference
Source: https://towardsdatascience.com/de-coded-transformers-explained-in-plain-english-877814ba6429文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-725091.html
本文由 mdnice 多平臺(tái)發(fā)布文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-725091.html
到了這里,關(guān)于解碼自然語(yǔ)言處理之 Transformers的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!