該沒人看不懂了吧——Transformer工作原理)
前言本文將深入剖析Transformer的內(nèi)部工作原理詳細(xì)研究其運(yùn)作細(xì)節(jié)。我們將通過實(shí)際的矩陣表示和形狀觀察數(shù)據(jù)如何在系統(tǒng)中流動(dòng)并理解每個(gè)階段進(jìn)行的計(jì)算。本文目標(biāo)不僅是理解Transformer是如何工作的更要探究它為何如此工作。架構(gòu)概覽正如我們?cè)诘谝徊糠种锌吹降腡ransformer架構(gòu)的主要組件包括編碼器和解碼器的數(shù)據(jù)輸入包括嵌入層位置編碼層編碼器堆棧由多個(gè)編碼器組成每個(gè)編碼器內(nèi)部包含多頭注意力層前饋神經(jīng)網(wǎng)絡(luò)層解碼器堆棧則由多個(gè)解碼器組成每個(gè)解碼器內(nèi)部包含兩個(gè)多頭注意力層前饋神經(jīng)網(wǎng)絡(luò)層輸出右上角——生成最終輸出包含線性層Softmax層為了理解每個(gè)組件的作用讓我們以訓(xùn)練Transformer解決翻譯問題為例來逐步了解它的工作原理。我們將使用訓(xùn)練數(shù)據(jù)中的一個(gè)樣本該樣本由輸入序列英文“You are welcome”和目標(biāo)序列西班牙文“De nada”組成。嵌入與位置編碼與任何自然語言處理NLP模型一樣Transformer需要了解每個(gè)單詞的兩方面信息——單詞的含義及其在序列中的位置。嵌入層負(fù)責(zé)編碼單詞的含義。位置編碼層負(fù)責(zé)表示單詞在序列中的位置。Transformer通過將這兩個(gè)編碼相加來結(jié)合這兩方面的信息。嵌入處理Transformer具有兩個(gè)嵌入層輸入序列被送入第一個(gè)嵌入層即輸入嵌入層。目標(biāo)序列在向右移動(dòng)一個(gè)位置并在第一個(gè)位置插入一個(gè)開始標(biāo)記后被送入第二個(gè)嵌入層。請(qǐng)注意在推理過程中我們沒有目標(biāo)序列而是將輸出序列循環(huán)地送入這個(gè)第二層因此它被稱為輸出嵌入。文本序列通過詞匯表被映射為數(shù)字形式的單詞ID然后嵌入層將每個(gè)輸入單詞映射到一個(gè)嵌入向量中這個(gè)向量是該單詞含義的更豐富表示。位置編碼由于循環(huán)神經(jīng)網(wǎng)絡(luò)RNN通過順序輸入每個(gè)單詞來實(shí)現(xiàn)循環(huán)因此它隱式地知道每個(gè)單詞的位置。然而Transformer不使用RNN且序列中的所有單詞都是并行輸入的。這是它相對(duì)于RNN架構(gòu)的主要優(yōu)勢(shì)但也意味著位置信息丟失了需要單獨(dú)添加回來。與兩個(gè)嵌入層類似也有兩個(gè)位置編碼層。位置編碼是根據(jù)輸入序列獨(dú)立計(jì)算的。這些值是固定的僅取決于序列的最大長度。例如第一個(gè)元素是一個(gè)表示第一個(gè)位置的常量編碼第二個(gè)元素是一個(gè)表示第二個(gè)位置的常量編碼以此類推這些常量通過使用以下公式計(jì)算得出其中pos 是單詞在序列中的位置d_model 是編碼向量的長度與嵌入向量相同i 是該向量的索引值換句話說它通過正弦曲線和余弦曲線的交錯(cuò)來編碼偶數(shù)索引使用正弦值奇數(shù)索引使用余弦值。例如如果我們編碼一個(gè)40個(gè)單詞的序列我們可以看到下面幾個(gè)單詞位置編碼索引組合的編碼值。藍(lán)色曲線顯示了所有40個(gè)單詞位置的第0個(gè)索引的編碼橙色曲線顯示了所有40個(gè)單詞位置的第1個(gè)索引的編碼剩余的索引值也會(huì)有類似的曲線。矩陣維度我們知道深度學(xué)習(xí)模型一次處理一批訓(xùn)練樣本。嵌入層和位置編碼層在代表一批序列樣本的矩陣上操作。嵌入層接受一個(gè)形狀為樣本數(shù)序列長度的單詞ID矩陣將每個(gè)單詞ID編碼為一個(gè)長度等于嵌入大小的詞向量從而生成一個(gè)形狀為樣本數(shù)序列長度嵌入大小的輸出矩陣。位置編碼使用與嵌入大小相等的編碼大小因此它產(chǎn)生一個(gè)形狀相似的矩陣該矩陣可以與嵌入矩陣相加。嵌入層和位置編碼層產(chǎn)生的樣本數(shù)序列長度嵌入大小形狀在Transformer中一直保持不變直到數(shù)據(jù)流經(jīng)編碼器和解碼器堆棧最后被最終輸出層重新塑形。這給出了Transformer中3D矩陣維度的概念然而為了簡化可視化從現(xiàn)在起我們將省略第一維對(duì)于樣本并使用單個(gè)樣本的2D表示。輸入嵌入將其輸出發(fā)送到編碼器。類似地輸出嵌入將其輸出送入解碼器。編碼器編碼器和解碼器堆棧分別由幾個(gè)通常是六個(gè)編碼器和解碼器順序連接而成。堆棧中的第一個(gè)編碼器從嵌入層和位置編碼接收輸入。堆棧中的其他編碼器從前一個(gè)編碼器接收輸入。編碼器將其輸入傳遞給多頭自注意力層。自注意力層的輸出被傳遞到前饋神經(jīng)網(wǎng)絡(luò)層然后將其輸出向上傳遞到下一個(gè)編碼器。自注意力層和前饋神經(jīng)網(wǎng)絡(luò)子層都圍繞它們有一個(gè)殘差跳躍連接之后是層歸一化。如下所述最后一個(gè)編碼器的輸出被送入解碼器堆棧中的每個(gè)解碼器。解碼器解碼器的結(jié)構(gòu)與編碼器非常相似但有一些不同。與編碼器一樣堆棧中的第一個(gè)解碼器從輸出嵌入和位置編碼接收輸入。堆棧中的其他解碼器從前一個(gè)解碼器接收輸入。解碼器將其輸入傳遞給多頭自注意力層。但這與編碼器中的自注意力層工作方式略有不同。它只允許關(guān)注序列中較早的位置這是通過屏蔽未來位置來實(shí)現(xiàn)的稍后將詳細(xì)介紹。與編碼器不同解碼器包含第二層多頭注意力機(jī)制即編碼器-解碼器注意力層。編碼器-解碼器注意力層的工作原理類似于自注意力機(jī)制但其特殊之處在于它結(jié)合了兩種輸入源其下方的自注意力層輸出以及編碼器堆疊的輸出。自注意力層的輸出會(huì)傳遞給一個(gè)前饋神經(jīng)網(wǎng)絡(luò)層該層隨后將其輸出向上傳遞至下一個(gè)解碼器。這三個(gè)子層——自注意力層、編碼器-解碼器注意力層以及前饋神經(jīng)網(wǎng)絡(luò)層——都圍繞殘差連接進(jìn)行之后進(jìn)行層歸一化。注意力機(jī)制在第一部分中我們討論了為什么在處理序列時(shí)注意力機(jī)制如此重要。在Transformer模型中注意力機(jī)制在三個(gè)地方被使用編碼器的自注意力輸入序列關(guān)注自身解碼器的自注意力目標(biāo)序列關(guān)注自身解碼器的編碼器-解碼器注意力目標(biāo)序列關(guān)注輸入序列注意力層通過三個(gè)參數(shù)接收輸入分別稱為查詢Query、鍵Key和值Value。在編碼器的自注意力中編碼器的輸入被傳遞給這三個(gè)參數(shù)。在解碼器的自注意力中解碼器的輸入同樣被傳遞給這三個(gè)參數(shù)。在解碼器的編碼器-解碼器注意力中編碼器堆疊的最終輸出被傳遞給值Value和鍵Key參數(shù)而其下方的自注意力及層歸一化模塊的輸出被傳遞給查詢Query參數(shù)。多頭注意力Transformer將每個(gè)注意力處理單元稱為一個(gè)注意力頭并并行重復(fù)多次這稱為多頭注意力。它通過組合多個(gè)類似的注意力計(jì)算結(jié)果增強(qiáng)了注意力機(jī)制的區(qū)分能力。查詢Query、鍵Key和值Value各自通過獨(dú)立的線性層各層具有自己的權(quán)重傳遞產(chǎn)生三個(gè)結(jié)果分別稱為Q、K、V。然后使用下面的注意力公式將這些結(jié)果組合起來生成注意力分?jǐn)?shù)。重要的是要認(rèn)識(shí)到Q、K、V值攜帶了序列中每個(gè)單詞的編碼表示。注意力計(jì)算隨后將序列中的每個(gè)單詞與其他單詞相結(jié)合使得注意力分?jǐn)?shù)為序列中的每個(gè)單詞編碼了一個(gè)分?jǐn)?shù)。之前在討論解碼器時(shí)我們簡要提到了掩碼。掩碼也顯示在上面的注意力圖中。讓我們看看它是如何工作的。注意力掩碼在計(jì)算注意力分?jǐn)?shù)時(shí)注意力模塊執(zhí)行一個(gè)掩碼步驟掩碼有兩個(gè)目的在編碼器的自注意力和編碼器-解碼器注意力中掩碼用于將輸入句子中填充部分的注意力輸出置為零以確保填充不參與自注意力計(jì)算。注意由于輸入序列長度可能不同它們通常會(huì)被擴(kuò)展為固定長度的向量以便輸入到Transformer中同樣地對(duì)于編碼器-解碼器注意力機(jī)制也是如此。在解碼器的自注意力中掩碼用于防止解碼器在預(yù)測(cè)下一個(gè)單詞時(shí)“偷看”目標(biāo)句子的其余部分。解碼器處理源序列中的單詞并使用它們來預(yù)測(cè)目標(biāo)序列中的單詞。在訓(xùn)練期間這通過Teacher Forcing實(shí)現(xiàn)即將完整的目標(biāo)序列作為解碼器輸入。因此在預(yù)測(cè)某個(gè)位置的單詞時(shí)解碼器可以使用該單詞之前的目標(biāo)單詞以及該單詞之后的目標(biāo)單詞。這允許解碼器通過使用未來“時(shí)間步”中的目標(biāo)單詞來“作弊”。例如在預(yù)測(cè)“單詞3”時(shí)解碼器應(yīng)僅參考目標(biāo)中的前3個(gè)輸入單詞而不應(yīng)參考第四個(gè)單詞“Ketan”。因此解碼器會(huì)屏蔽掉序列中后續(xù)出現(xiàn)的輸入單詞。在計(jì)算注意力分?jǐn)?shù)時(shí)參考之前顯示計(jì)算的圖片掩碼被應(yīng)用于Softmax之前的分子部分。被屏蔽的元素白色方塊被設(shè)置為負(fù)無窮大以便Softmax將這些值轉(zhuǎn)換為零。生成輸出堆疊中的最后一個(gè)解碼器將其輸出傳遞給輸出組件該組件將其轉(zhuǎn)換為最終輸出句子。線性層將解碼器向量投影為單詞分?jǐn)?shù)每個(gè)分?jǐn)?shù)對(duì)應(yīng)目標(biāo)詞匯表中每個(gè)唯一單詞在句子中每個(gè)位置的出現(xiàn)概率。例如如果我們的最終輸出句子有7個(gè)單詞目標(biāo)西班牙語詞匯表有10000個(gè)唯一單詞我們將為這7個(gè)單詞中的每一個(gè)生成10000個(gè)分?jǐn)?shù)值。分?jǐn)?shù)值表示詞匯表中每個(gè)單詞在該句子位置出現(xiàn)的可能性。然后Softmax層將這些分?jǐn)?shù)轉(zhuǎn)換為概率這些概率加起來等于1.0。在每個(gè)位置我們找到概率最高的單詞的索引然后將該索引映射到詞匯表中對(duì)應(yīng)的單詞。這些單詞隨后形成Transformer的輸出序列。訓(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è)單詞位置的概率分布中“De”的概率為1而詞匯表中其他所有單詞的概率均為0。類似地“nada”和“END”應(yīng)分別在第二個(gè)和第三個(gè)單詞位置具有概率為1。通常我們使用損失來計(jì)算梯度以通過反向傳播訓(xùn)練Transformer。結(jié)論希望這能讓你對(duì)Transformer在訓(xùn)練過程中的內(nèi)部工作機(jī)制有所了解。正如我們?cè)谏弦黄恼轮杏懻摰哪菢铀谕评磉^程中會(huì)循環(huán)運(yùn)行但大部分處理過程保持不變。最后的最后感謝你們的閱讀和喜歡作為一位在一線互聯(lián)網(wǎng)行業(yè)奮斗多年的老兵我深知在這個(gè)瞬息萬變的技術(shù)領(lǐng)域中持續(xù)學(xué)習(xí)和進(jìn)步的重要性。為了幫助更多熱愛技術(shù)、渴望成長的朋友我特別整理了一份涵蓋大模型領(lǐng)域的寶貴資料集。這些資料不僅是我多年積累的心血結(jié)晶也是我在行業(yè)一線實(shí)戰(zhàn)經(jīng)驗(yàn)的總結(jié)。這些學(xué)習(xí)資料不僅深入淺出而且非常實(shí)用讓大家系統(tǒng)而高效地掌握AI大模型的各個(gè)知識(shí)點(diǎn)。如果你愿意花時(shí)間沉下心來學(xué)習(xí)相信它們一定能為你提供實(shí)質(zhì)性的幫助。這份完整版的大模型 AI 學(xué)習(xí)資料已經(jīng)上傳CSDN朋友們?nèi)绻枰梢晕⑿艗呙柘路紺SDN官方認(rèn)證二維碼免費(fèi)領(lǐng)取【保證100%免費(fèi)】大模型知識(shí)腦圖為了成為更好的 AI大模型 開發(fā)者這里為大家提供了總的路線圖。它的用處就在于你可以按照上面的知識(shí)點(diǎn)去找對(duì)應(yīng)的學(xué)習(xí)資源保證自己學(xué)得較為全面。經(jīng)典書籍閱讀閱讀AI大模型經(jīng)典書籍可以幫助讀者提高技術(shù)水平開拓視野掌握核心技術(shù)提高解決問題的能力同時(shí)也可以借鑒他人的經(jīng)驗(yàn)。對(duì)于想要深入學(xué)習(xí)AI大模型開發(fā)的讀者來說閱讀經(jīng)典書籍是非常有必要的。實(shí)戰(zhàn)案例光學(xué)理論是沒用的要學(xué)會(huì)跟著一起敲要?jiǎng)邮謱?shí)操才能將自己的所學(xué)運(yùn)用到實(shí)際當(dāng)中去這時(shí)候可以搞點(diǎn)實(shí)戰(zhàn)案例來學(xué)習(xí)。面試資料我們學(xué)習(xí)AI大模型必然是想找到高薪的工作下面這些面試題都是總結(jié)當(dāng)前最新、最熱、最高頻的面試題并且每道題都有詳細(xì)的答案面試前刷完這套面試題資料小小offer不在話下640套AI大模型報(bào)告合集這套包含640份報(bào)告的合集涵蓋了AI大模型的理論研究、技術(shù)實(shí)現(xiàn)、行業(yè)應(yīng)用等多個(gè)方面。無論您是科研人員、工程師還是對(duì)AI大模型感興趣的愛好者這套報(bào)告合集都將為您提供寶貴的信息和啟示。這份完整版的大模型 AI 學(xué)習(xí)資料已經(jīng)上傳CSDN朋友們?nèi)绻枰梢晕⑿艗呙柘路紺SDN官方認(rèn)證二維碼免費(fèi)領(lǐng)取【保證100%免費(fèi)】