Transformer架構詳解:從Encoder到Decoder的完整旅程

引言:從Self-Attention到完整架構

在上一篇文章中,我們深入剖析了Self-Attention機制的核心原理。然而,Transformer的魅力遠不止于此——其Encoder-Decoder架構通過巧妙的模塊化設計,實現了從機器翻譯到文本生成的廣泛能力。本文將以“架構拆解+數學推導+代碼實現”的方式,完整揭示Transformer的工作機制。

一、Transformer整體架構全景圖

Transformer由N個相同的Encoder層和Decoder層堆疊而成(通常N=6)。其核心流程如下:

輸入序列 → Encoder → 上下文表示 → Decoder → 輸出序列  

二、Encoder層深度解析

每個Encoder層包含兩個核心子層:

2.1 多頭自注意力(Multi-Head Attention)

\text{MultiHead}(Q,K,V) = \text{Concat}(head_1,...,head_h)W^O  

其中每個頭獨立計算Self-Attention:

head_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)  

作用:從不同子空間捕捉特征,提升模型表達能力。

2.2 前饋神經網絡(FFN)

\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2  

設計特點:

  • 使用ReLU激活函數
  • 中間層維度通常為4×d_model(如d_model=512時,中間層為2048)

2.3 殘差連接與層歸一化
每個子層輸出計算為:

x_{out} = \text{LayerNorm}(x + \text{Sublayer}(x))  

數學意義:防止梯度消失,加速模型收斂。

三、Decoder層核心技術揭秘

Decoder在Encoder基礎上新增兩個關鍵機制:

3.1 掩碼自注意力(Masked Self-Attention)
通過下三角矩陣掩碼,確保當前位置只能關注之前的位置:

# 生成掩碼矩陣
mask = torch.triu(torch.ones(seq_len, seq_len), diagonal=1).bool()
scores.masked_fill_(mask, -1e9)  

作用:防止解碼時“偷看”未來信息,保證自回歸特性。

3.2 Encoder-Decoder注意力
Query來自Decoder上一層的輸出,Key/Value來自Encoder最終輸出:

\text{Attention}(Q_{dec}, K_{enc}, V_{enc})  

物理意義:建立輸入序列與輸出序列的語義對齊。

四、核心組件實現詳解

4.1 位置前饋網絡(Position-wise FFN)代碼實現

class FeedForward(nn.Module):def __init__(self, d_model, d_ff=2048):super().__init__()self.linear1 = nn.Linear(d_model, d_ff)self.linear2 = nn.Linear(d_ff, d_model)def forward(self, x):return self.linear2(F.relu(self.linear1(x)))# 輸入維度示例:x.shape = [batch, seq_len, 512]

4.2 層歸一化(LayerNorm)的位置
實驗表明,Transformer使用Post-LN結構(先殘差連接后歸一化):

class Sublayer(nn.Module):def __init__(self, d_model, dropout=0.1):super().__init__()self.norm = nn.LayerNorm(d_model)self.dropout = nn.Dropout(dropout)def forward(self, x, sublayer):return x + self.dropout(sublayer(self.norm(x)))

五、訓練與推理關鍵技術

5.1 動態掩碼技術
在訓練時隨機屏蔽不同位置的token,提升魯棒性:

def create_mask(seq, pad_idx):mask = (seq != pad_idx).unsqueeze(1)  # padding掩碼seq_mask = (1 - torch.triu(torch.ones(seq_len, seq_len))).bool()  # 序列掩碼return mask & seq_mask

5.2 標簽平滑(Label Smoothing)
緩解過擬合,計算公式:

q_i = \begin{cases} 
1-\epsilon+\epsilon/K & \text{if } i=y \\
\epsilon/K & \text{otherwise}
\end{cases}  

其中ε=0.1,K為類別數。

六、完整模型實現與效果驗證
使用PyTorch搭建完整Transformer:

class Transformer(nn.Module):def __init__(self, src_vocab, tgt_vocab, N=6, d_model=512):super().__init__()self.encoder = Encoder(N, d_model)self.decoder = Decoder(N, d_model)self.src_embed = nn.Embedding(src_vocab, d_model)self.tgt_embed = nn.Embedding(tgt_vocab, d_model)def forward(self, src, tgt):memory = self.encoder(self.src_embed(src))output = self.decoder(self.tgt_embed(tgt), memory)return output# 示例:英中翻譯任務
model = Transformer(src_vocab=10000, tgt_vocab=8000)

七、總結與延展思考

Transformer通過以下設計革新了序列建模:

  1. 并行計算:徹底擺脫RNN的時序依賴
  2. 層次化注意力:從局部到全局的特征抽象
  3. 統一架構:同一模型處理不同模態任務

思考題

  • 為什么Decoder需要兩個不同的注意力層?
  • 如何理解“多頭”注意力中的“頭”維度分配?

下期預告:《Vision Transformer實戰:如何將Transformer應用于圖像分類》

參考資料

  1. Vaswani A, et al. Attention Is All You Need. NeurIPS 2017
  2. Transformer代碼庫

(注:文中部分示意圖需配合代碼運行生成,完整實現代碼可在CSDN資源下載專區獲取)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900092.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900092.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900092.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker學習--容器生命周期管理相關命令--docker create 命令

docker create 命令作用: 會根據指定的鏡像和參數創建一個容器實例,但容器只會在創建時進行初始化,并不會執行任何進程。 語法: docker create[參數] IMAGE(要執行的鏡像) [COMMAND](在容器內部…

【C++11】異步編程

異步編程的概念 什么是異步? 異步編程是一種編程范式,允許程序在等待某些操作時繼續執行其它任務,而不是阻塞或等待這些操作完成。 異步編程vs同步編程? 在傳統的同步編程中,代碼按順序同步執行,每個操作需…

FastAPI與ASGI深度整合實戰指南

一、ASGI技術體系解析 1. ASGI協議棧全景圖 #mermaid-svg-a5XPEshAsf64SBkw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-a5XPEshAsf64SBkw .error-icon{fill:#552222;}#mermaid-svg-a5XPEshAsf64SBkw .error-te…

數組與特殊壓縮矩陣

一、數組的基本特性 定義: int arr[3][3]; // 3x3二維數組 存儲方式: 行優先存儲(C語言默認):元素按行連續存儲。 列優先存儲:需手動實現(如科學計算中的Fortran風格)。 訪問元素…

Word 插入無頁眉頁碼的空白頁(即插入奇數頁)

遇到問題 例如,我的第5章的頁碼是58,偶數頁,我想改成奇數頁59,需要在57頁和58頁之間插入奇數頁。 解決辦法 單擊上一頁(57頁),打開“視圖-大綱”,找到要插入奇數頁的位置&#x…

OpenCV 從入門到精通(day_05)

1. 模板匹配 1.1 什么是模板匹配 模板匹配就是用模板圖(通常是一個小圖)在目標圖像(通常是一個比模板圖大的圖片)中不斷的滑動比較,通過某種比較方法來判斷是否匹配成功。 1.2 匹配方法 rescv2.matchTemplate(image, …

【目標檢測】【深度學習】【Pytorch版本】YOLOV3模型算法詳解

【目標檢測】【深度學習】【Pytorch版本】YOLOV3模型算法詳解 文章目錄 【目標檢測】【深度學習】【Pytorch版本】YOLOV3模型算法詳解前言YOLOV3的模型結構YOLOV3模型的基本執行流程YOLOV3模型的網絡參數 YOLOV3的核心思想前向傳播階段反向傳播階段 總結 前言 YOLOV3是由華盛頓…

LN2220 2A 高效率升壓 DC/DC 電壓調整器

1、產品概述 LN2220 是一款微小型、高效率、升壓型 DC/DC 調整器。 電路由電流模 PWM 控制環路,誤差放大器,斜波補償電路, 比較器和功率開關等模塊組成。該芯片可在較寬負載范圍內 高效穩定的工作,內置一個 4A 的功率開關和…

【大模型基礎_毛玉仁】6.3 知識檢索

目錄 6.3 知識檢索6.3.1 知識庫構建1)數據采集及預處理2)知識庫增強 6.3.2 查詢增強1)查詢語義增強2)查詢內容增強 6.3.3 檢索器1)判別式檢索器2)生成式檢索器 6.3.4 檢索效率增強1)相似度索引算…

靜態方法和實例方法

在 Java 中,?靜態方法(static method)?和?實例方法(instance method)?是兩種不同類型的方法,它們在調用方式、內存分配和訪問權限上有顯著區別。以下是詳細對比: ?1. 靜態方法(…

Lua環境搭建+Lua基本語法

前期準備: 搜索并下載安裝LuaForWindows,例: 安裝完成后開啟cmd窗口,輸入lua 出現版本號證明成功下載安裝 使用Sublime Text編輯器編寫Lua 使用瀏覽器或CSDN搜索Sublime Text下載并安裝,安裝成功后打開編輯器,編輯…

FFmpeg錄制屏幕和音頻

一、FFmpeg命令行實現錄制屏幕和音頻 1、Windows 示例 #include <cstdlib> #include <string> #include <iostream>int main() {// FFmpeg 命令行&#xff08;錄制屏幕 麥克風音頻&#xff09;std::string command "ffmpeg -f gdigrab -framerate 3…

【數據集】多視圖文本數據集

多視圖文本數據集指的是包含多個不同類型或來源的信息的文本數據集。不同視圖可以來源于不同的數據模式&#xff08;如原始文本、元數據、網絡結構等&#xff09;&#xff0c;或者不同的文本表示方法&#xff08;如 TF-IDF、詞嵌入、主題分布等&#xff09;。這些數據集常用于多…

C++ 繼承方式使用場景(極簡版)

1. 公有繼承&#xff08;public&#xff09; 什么時候用&#xff1f; “是一個”&#xff08;is-a&#xff09;關系&#xff1a;派生類 是 基類的一種。 例&#xff1a;class Dog : public Animal&#xff08;狗是動物&#xff09; 最常見&#xff0c;90%的繼承都用它。 2. 保…

Ubuntu 系統 Docker 中搭建 CUDA cuDNN 開發環境

CUDA 是 NVIDIA 推出的并行計算平臺和編程模型&#xff0c;利用 GPU 多核心架構加速計算任務&#xff0c;廣泛應用于深度學習、科學計算等領域。cuDNN 是基于 CUDA 的深度神經網絡加速庫&#xff0c;為深度學習框架提供高效卷積、池化等操作的優化實現&#xff0c;提升模型訓練…

高密度任務下的挑戰與破局:數字樣機助力火箭發射提效提質

2025年4月1日12時&#xff0c;在酒泉衛星發射中心&#xff0c;長征二號丁運載火箭順利升空&#xff0c;成功將一顆衛星互聯網技術試驗衛星送入預定軌道&#xff0c;發射任務圓滿完成。這是長征二號丁火箭的第97次發射&#xff0c;也是長征系列火箭的第567次發射。 執行本次任務…

關于SQL子查詢的使用策略

在 SQL 優化中&#xff0c;一般遵循**“非必要不使用子查詢”**的原則&#xff0c;因為子查詢可能會帶來額外的計算開銷&#xff0c;影響查詢效率。但是&#xff0c;并不是所有子查詢都需要避免&#xff0c;有時子查詢是最優解&#xff0c;具體要根據實際場景選擇合適的優化方式…

JavaEE初階復習(JVM篇)

JVM Java虛擬機 jdk java開發工具包 jre java運行時環境 jvm java虛擬機(解釋執行 java 字節碼) java作為一個半解釋,半編譯的語言,可以做到跨平臺. java 通過javac把.java文件>.class文件(字節碼文件) 字節碼文件, 包含的就是java字節碼, jvm把字節碼進行翻譯轉化為…

2.pycharm保姆級安裝教程

一、pycharm安裝 1.官網上下載好好軟&#xff0c;雙擊打開 2.下一步 3.修改路徑地址 (默認也可以) 4.打勾 5.安裝 不用重啟電腦 二、添加解釋器 1.雙擊軟件&#xff0c;打開 2.projects – new project 3.指定項目名字&#xff0c;項目保存地址&#xff0c;解釋器 4.右擊 – …

zk基礎—4.zk實現分布式功能二

大綱 1.zk實現數據發布訂閱 2.zk實現負載均衡 3.zk實現分布式命名服務 4.zk實現分布式協調(Master-Worker協同) 5.zk實現分布式通信 6.zk實現Master選舉 7.zk實現分布式鎖 8.zk實現分布式隊列和分布式屏障 4.zk實現分布式協調(Master-Worker協同) (1)Master-Worker架構…