輕鬆理解 Transformers (4) :Decoder 和 Output 部分
編者按:Transformers憑藉其卓越的效能,已經成為自然語言處理領域的代表性模型架構。但是Transformers的內在機制卻比較複雜,對許多讀者來說可能還存在一定的難度。本系列對 Transformer各元件進行逐一剖析,我們可以更直觀地理解這個模型架構的整體執行邏輯。 本篇文章是《輕鬆理解Transformers》系列的最後一篇,主要介紹Transformer的Decoder和Output 部分。
文章首先指出,Transformers屬於編碼器-解碼器架構,輸入資料透過編碼器轉換為數學表徵,再輸入解碼器生成最終輸出。接著又以Teacher Forcing為線索,剖析了帶Mask的Decoder是如何基於Encoder 的輸出,一步步生成目標語言的。在描述每個元件的作用時,作者都會補充通俗的示例或類比,幫助讀者更好地理解 Transformers 。
這種融通俗性、系統性與啟發性為一體的寫作風格,使得本文對於理解 Transformer模型具有很高的參考價值。如果想要全面理解這個極具代表性的模型架構,本文將是很好的學習資料。預祝各位讀者的深度學習旅途越走越順!
以下是譯文,enjoy!
作者 | Chen Margalit
編譯 | 嶽揚
本文經原作者授權,由Baihai IDP編譯。如需轉載譯文,請聯絡獲取授權。
???歡迎小夥伴們加入 AI技術軟體及技術交流群 ,追蹤前沿熱點,共探技術難題~
圖片來自 Vaswani, A. 等人的論文[1]
如果您之前沒有閱讀過本系列的前幾篇文章,並且對上圖架構中左側元件的工作原理不太瞭解,我建議你先閱讀本系列的其他文章。本文中未解釋的任何術語都可能在本系列前面幾篇文章中有過介紹。
本系列往期文章:
輕鬆理解 Transformers(2):Attention部分
輕鬆理解 Transformers(3):Feed-Forward Layer部分
01 解碼器 Decoder
Transformers 是一種編碼器-解碼器(Encoder-Decoder)架構。 輸入的資料經過編碼(轉換)成數學表徵(某種形式的數字,通常是向量)。然後,它被傳輸到另一個被稱為解碼器的處理單元,在解碼器中將數字轉換回所需的輸出。 在語言模型中,就是生成一個單詞作為最終的輸出結果。
解碼器的首要任務是根據目標序列(我們想要給出的答案)建立值矩陣。它會接收整個目標序列,將其轉換為嵌入向量(Embeddings),並像編碼器(encoder)一樣新增位置編碼。然後,它將嵌入向量傳遞給一個帶掩碼的多頭注意力層,該層就會建立值矩陣。這個矩陣將幫助模型決定使用者的Prompt和預期目標如何共同發揮作用。
在解釋 Transformers 的工作原理時存在一種悖論,因為我們需要理解各個組成部分才能理解最終結果(end result)是如何產生的,但我們同時也需要理解最終結果是如何產生的才能理解各個組成部分。在解釋Transformer的訓練過程時,我們將超越當前的理解,從未來的角度進行解釋,以便更好地理解Transformer的訓練方式:
首先,在編碼器中,使用者的Prompt被轉換為嵌入向量,然後我們在其中新增位置編碼。編碼器組(原始論文中為6個)處理資料並生成文字的數字表徵。接下來,在解碼器中,我們將期望的輸出(我們希望模型回應的內容)會被加上一個特殊的標記,表示這是每條句子的第一個標記。比如像<BOS>(句子開頭)這樣的標記,但也可以是模型訓練時使用的其他符號。這個輸入(input)被轉換為嵌入向量,並新增位置編碼。解碼器組(最初也是6個)接收這些向量,並與編碼器的輸出一起生成新的單詞表徵(word representation)。再將單詞表徵轉換為機率分佈(probability distribution),並從模型的整個資料集中選出機率最高的單詞。最後,根據模型所選單詞和模型期望的輸出之間的差距計算損失函式。該損失函式可用於生成梯度(gradients),而這些梯度對於反向傳播演算法(一種根據各自對整體誤差的貢獻計算權重應如何變化的演算法)非常重要。
既然我們已經瞭解了總體流程,那麼讓我們來看看一個微小但重要的細節:我們使用的一種名為Teacher Forcing的技術。
02 Teacher Forcing
假如你要做一個數學測試,這個測試有3個題目:
-
取數字4,加上5,並記下分數。
-
取第一題的結果,乘以2,記分。
-
取第二題的結果,除以2。
如果根據每個題目解答的結果單獨排名,無論對錯。您發現什麼問題了嗎? 如果第一題做錯了,那麼在第二題和第三題中也會做錯。Teacher Forcing技術就解決了這個問題。 由於語言模型也是基於序列的(例如,如何預測第二個單詞取決於第一個單詞是什麼),為了後續的內容正確,必須在之前的內容就正確。在上文給出的示例中,Teacher Forcing會在第二題給出正確答案,然後在第三題給出正確答案,這樣實際上我們接受的是乘法/除法測試,而不是加法測試。每個題目仍會單獨評分,只是不會因為在第一題中犯錯誤而在第二題中受到影響。
具體而言,Teacher Forcing可以幫助我們更快地完成訓練。我們在每個步驟都給模型提供正確的標籤,確保第x個單詞的預測是準確的。例如,第4個單詞將基於前3個正確的標籤,而不是可能有錯誤的預測標籤,這樣可以確保模型不會因為之前的錯誤而無法繼續正確地執行。
好的,現在迴歸正題。在將輸入轉換為嵌入向量並新增位置編碼之後,我們將輸入透過一個帶有掩碼的多頭注意力層進行處理。
03 帶有掩碼的多頭注意力機制 Masked Multi-Head Attention
在本系列前面部分的內容已經介紹了注意力層(attention layer)的作用和存在的原因。帶有掩碼的注意力層基本上是出於同樣的原因做同樣的事情,但有一個重要區別。由於解碼器會處理全部的期望輸出,模型很容易在構建注意力得分(attention scores)時使用整個序列。由於這些注意力得分是 Transformers 工作機制的重要組成部分,因此我們必須正確處理。假設我們需要生成這樣一條句子:“Amazing technology, I love it”。在當前階段,我們正試圖預測單詞“technology”。 但在推理時(實際使用模型的時候),模型只能逐步生成輸出,而無法一次性獲取整個句子的資訊。 因此,在訓練模型時,為了使其能夠適應實際使用, 我們需要確保模型只能依賴於已經生成的前面的單詞,而不能直接訪問後面的單詞。 這個步驟就是透過掩碼(隱藏)未來的單詞來實現的。
你可能已經猜到了,由於機器學習與數學緊密相連,並不僅僅只有隱藏單詞這樣一種方法,還有一種更 好的方法。具體來說,在計算注意力得分時,我們會加上負無窮大(一個非常小的負數,例如-86131676513135468),這將使得在下一階段softmax函式會將這些負數變為0。這種技術確保了模型在沒有訪問許可權的情況下無法訪問下一個單詞。
該圖片由作者提供
在計算完經過掩碼的注意力得分之後,輸入(the input)會經過一個“Add & Normalize”層(譯者注:“Add & Normalize”層主要執行加法和歸一化操作。),其工作方式和使用原因與該系列文章第二篇所解釋的相同。它還接收來自注意力計算(attention calculation)前層的skip connection(譯者注:本系列第二篇文章第6節介紹了skip connection技術)。之後,值矩陣(Values)進入下一階段。然後從編碼器中獲取Q(查詢)和K(鍵)矩陣,它們分別代表使用者的提示詞(Prompt)和針對給定的查詢(query),可能的建議或推薦內容。(譯者注:編碼器提供了與查詢相關的建議,這些建議可以用來幫助解碼器生成合適的輸出。這些建議可以是與查詢相關的相關單詞、短語或句子,用於輔助解碼器在生成輸出時做出更準確的決策。)解碼器帶有自己的值矩陣(Values),以決定重點關注編碼器輸入的哪一部分。透過這3個矩陣(2個來自編碼器,1個來自解碼器),我們計算出一個“常規”的注意力得分。
接下來,又有另一個前饋網路和 “Add & Normalize”層,它接收另一個skip connection,就像前文說明的那樣,然後...解碼器部分就講述完成了!
現在我們來到最後一步。堆疊的解碼器層(stack of decoders)中的最後一個(即第6個)解碼器(譯者注:在 Transformers 架構中,解碼器通常由多個相同結構的解碼器層組成。堆疊的解碼器層可以透過逐層傳遞資訊和特徵來逐步生成輸出,從而實現更準確的預測和生成)將其輸出傳遞給一個線性層(linear layer)。透過線性層,我們可以生成任意數量的數字表徵。在語言模型中,我們希望表徵的數量與模型的詞彙量相匹配。如果模型的全部詞彙量(它所見過的所有單詞)是 1000 個,那麼就需要 1000 個數字來表示詞彙表中的每個單詞。我們需要對每個位置上的每個單詞都這樣做。如果最終的輸出內容擁有10個單詞,我們要為其中的每一個單詞計算1000個數字(譯者注:即需要為每個單詞生成一個1000維的數值向量)。然後,我們將其傳遞給一個Softmax層,該層會給出每個單詞的機率,最高機率的單詞就是我們要使用的單詞。Softmax會返回給我們一個索引,比如3。模型就會輸出詞彙表中索引為3的單詞。如果我們的詞彙表是['a', 'man', 'works', 'nice', 'go'],那麼輸出的單詞將是'nice'。
本系列文章的全部內容到此結束,感謝您的支援!希望透過閱讀本系列文章,能夠讓您對Transformers架構的工作原理有一個較為深入的理解。
Have a good time.
END
???歡迎小夥伴們加入 AI技術軟體及技術交流群 ,追蹤前沿熱點,共探技術難題~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70018536/viewspace-2994917/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 輕鬆理解 Transformers(2):Attention部分ORM
- 輕鬆理解 Transformers (3): Feed-Forward Layer 部分ORMForward
- 4個角度輕鬆理解 Flink中的Watermark
- 輕鬆理解 Spring AOPSpring
- 輕鬆理解建構函式和原型物件函式原型物件
- 看動畫輕鬆理解「 堆 」動畫
- 輕鬆理解分庫分表
- 輕鬆理解HTTP快取策略HTTP快取
- 看圖輕鬆理解最小(大)堆
- 看圖輕鬆理解計數排序排序
- 輕鬆理解JVM的分代模型JVM模型
- 幾張圖輕鬆理解String.intern()
- 軟體工程入門-輕鬆理解依賴注入 (DI) 和 IoC 容器軟體工程依賴注入
- 兩個案例輕鬆理解MyBatis中的TypeHandler!MyBatis
- 5分鐘搞懂Kubernetes:輕鬆理解所有元件元件
- 【動畫】看動畫輕鬆理解「Trie樹」動畫
- 輕鬆理解 Java 靜態代理/動態代理Java
- Downie 4:輕鬆下載,暢享影片
- Java 輕鬆理解深拷貝與淺拷貝Java
- substrate輕鬆學系列4:substrate快速瞭解
- 看動畫輕鬆理解時間複雜度(一)動畫時間複雜度
- 看動畫輕鬆理解時間複雜度(二)動畫時間複雜度
- Kafka 架構圖-輕鬆理解 kafka 生產消費Kafka架構
- 注意這幾點,輕輕鬆鬆配置 Nginx + Tomcat 的叢集和負載均衡NginxTomcat負載
- angular input和outputAngular
- Knife4j輕鬆聚合雲端OpenAPI文件API
- 看動畫輕鬆理解「遞迴」與「動態規劃」動畫遞迴動態規劃
- 輕輕鬆鬆實現本地和雲主機之間的檔案上傳下載
- 輕鬆理解UML用例圖時序圖類圖的教程時序圖
- 輕鬆應對併發問題,Newbe.Claptrap 框架中 State 和 Event 應該如何理解?APT框架
- Apache Doris 輕鬆入門和快速實踐Apache
- Linux的目錄結構與部分實用命令,輕鬆掌握Linux基礎Linux
- Downie 4影片下載專家:輕鬆抓取、儲存影片
- 在國內如何輕鬆用上GPT4介面?GPT
- 使用 AppImageLauncher 輕鬆執行和整合 AppImage 檔案APP
- 輕鬆開發React元件和造輪子指北React元件
- 使用moment.js輕鬆管理日期和時間JS
- 怎麼徹底理解悲觀鎖與樂觀鎖?來,圖文並茂輕鬆理解!