基於transformer 的編碼器-解碼器模型是 表徵學習 和 模型架構 這兩個領域多年研究成果的結晶。本文簡要介紹了神經編碼器-解碼器模型的歷史,更多背景知識,建議讀者閱讀由Sebastion Ruder 撰寫的這篇精彩博文。此外,建議讀者對 自註意力(self-attention) 架構 有一個基本了解,可以閱讀Jay Alammar 的這篇博文複習一下原始transformer 模型。
本文分4 個部分:
-
背景 –
簡要回顧了神經編碼器-解碼器模型的歷史,重點關注基於RNN 的模型。
-
編碼器-解碼器 –
闡述基於transformer 的編碼器-解碼器模型,並闡述如何使用該模型進行推理。
-
編碼器 –
闡述模型的編碼器部分。
-
解碼器 –
闡述模型的解碼器部分。
每個部分都建立在前一部分的基礎上,但也可以單獨閱讀。這篇分享是第二部分 編碼器-解碼器。如果你還沒有看過第一部分背景,可以先讀一讀。
編碼器-解碼器
2017 年,Vaswani 等人引入了 transformer 架構,從而催生了 基於transformer 的編碼器-解碼器模型。
與基於RNN 的編碼器-解碼器模型類似,基於transformer 的編碼器-解碼器模型由一個編碼器和一個解碼器組成,且其編碼器和解碼器均由 殘差注意力模塊(residual attention blocks) 堆疊而成。基於transformer 的編碼器-解碼器模型的關鍵創新在於: 殘差注意力模塊無需使用循環結構即可處理長度
可變的輸入序列
。不依賴循環結構使得基於transformer 的編碼器-解碼器可以高度並行化,這使得模型在現代硬件上的計算效率比基於RNN 的編碼器-解碼器模型高出幾個數量級。
回憶一下,要解決 序列到序列 問題,我們需要找到輸入序列
到變長輸出序列
的映射。我們看看如何使用基於transformer 的編碼器-解碼器模型來找到這樣的映射。
與基於RNN 的編碼器-解碼器模型類似,基於transformer 的編碼器-解碼器模型定義了在給定輸入序列
條件下目標序列
的條件分佈:
基於transformer 的編碼器部分將輸入序列
編碼為 隱含狀態序列
,即:
然後,基於transformer 的解碼器負責建模在給定隱含狀態序列
根據貝葉斯法則,該序列分佈可被分解為每個目標向量
因此,在生成
我們可視化一下使用 基於transformer 的編碼器-解碼器模型_自回歸_地生成序列的完整過程。

上圖中,綠色為基於transformer 的編碼器,紅色為基於transformer 的解碼器。與上一節一樣,我們展示瞭如何將表示為 的英語句子“I want to buy a car” 翻譯成表示為 的德語句子“Ich will ein Auto kaufen”。
首先,編碼器將完整的輸入序列
接下來,輸入編碼
然後,從該分佈中採樣出第一個目標向量
再採樣一次,生成目標向量
這裡有一點比較重要,我們僅在第一次前向傳播時用編碼器將

可以看出,僅在步驟
在🤗 transformers 庫中,這一自回歸生成過程是在調用 .generate()
方法時在後台完成的。我們用一個翻譯模型來實際體驗一下。
from transformers import MarianMTModel, MarianTokenizertokenizer = MarianTokenizer.from_pretrained("Helsinki-NLP/opus-mt-en-de")
model = MarianMTModel.from_pretrained("Helsinki-NLP/opus-mt-en-de")
# create ids of encoded input vectors
input_ids = tokenizer("I want to buy a car", return_tensors="pt").input_ids
# translate example
output_ids = model.generate(input_ids)[0]
# decode and print
print(tokenizer.decode(output_ids))
輸出:
<pad> Ich will ein Auto kaufen
.generate()
接口做了很多事情。首先,它將 input_ids
傳遞給編碼器。然後,它將一個預定義的標記連同已編碼的 input_ids
一起傳遞給解碼器(在使用 MarianMTModel
的情況下,該預定義標記為
我們在附錄中加入了一個代碼片段,展示瞭如何“從頭開始”實現一個簡單的生成方法。如果你想要完全了解 自回歸 生成的幕後工作原理,強烈建議閱讀附錄。
總結一下:
-
基於transformer 的編碼器實現了從輸入序列
-
基於transformer 的解碼器定義了條件分佈
-
給定適當的解碼機制,可以自回歸地從
中採樣出輸出序列
太好了,現在我們已經大致了解了 基於transformer 的 編碼器-解碼器模型的工作原理。下面的部分,我們將更深入地研究模型的編碼器和解碼器部分。更具體地說,我們將確切地看到編碼器如何利用自註意力層來產生一系列上下文相關的向量編碼,以及自註意力層如何實現高效並行化。然後,我們將詳細解釋自註意力層在解碼器模型中的工作原理,以及解碼器如何通過 交叉注意力 層以編碼器輸出為條件來定義分佈
"Helsinki-NLP/opus-mt-en-de"
的解碼參數。可以看到,其使用了 num_beams=6
的波束搜索。
敬請關注其餘部分的文章。
英文原文: https://hf.co/blog/encoder-decoder
原文作者: Patrick von Platen
譯者: Matrix Yao (姚偉峰),英特爾深度學習工程師,工作方向為transformer-family 模型在各模態數據上的應用及大規模模型的訓練推理。
審校/排版: zhongdongy (阿東)
#編碼器解碼器 #基於Transformers #的編碼器解碼器模型 #Hugging #Face #科技資訊
You may also like
相关贴文:
- 在一張24 GB 的消費級顯卡上用RLHF 微調20B LLMs – Hugging Face – 科技資訊
- ChatGPT 背後的“功臣”——RLHF 技術詳解- Hugging Face – 科技資訊
- 一文帶你入門圖機器學習- Hugging Face – 科技資訊
- 解讀ChatGPT 背後的技術重點:RLHF、IFT、CoT、紅藍對抗- Hugging Face – 科技資訊
- 了解Transformers 是如何“思考”的- Hugging Face – 科技資訊
- 大語言模型: 新的摩爾定律? – Hugging Face – 科技資訊
- 深入了解視覺語言模型- Hugging Face – 科技資訊
- 千亿参数开源大模型 BLOOM 背后的技术 – Hugging Face – 科技資訊
近期文章
- 免費在WhatsApp按鈕上添加訂單到WooCommerce | #WooCommerce#Whatsapp
- WooCommerce秘密功能您可以在2025年添加!
- 在2025年與WooCommerce商店在線賺錢
- WooCommerce可以進行訂閱嗎? – 精通應用
- crea il tuo negozio在線da zero con wooCommerce😱
- 如何使用Echorewards啟動推薦計劃
- 使用JetPack將WooCommerce網站連接到WooCommerce移動應用| #jetpack #woocommerce #app
- 🛒wooCommerce + AI🤖Zbuduj Sklep Internetowy krok po kroku 2024
- 成功付款後如何自動完成WooCommerce訂單
發佈留言