第6講、全面拆解Encoder、Decoder內部模塊

全面拆解 Transformer 架構:Encoder、Decoder 內部模塊解析(附流程圖小測驗)

關鍵詞:Transformer、Encoder、Decoder、Self-Attention、Masked Attention、位置編碼、殘差連接、多頭注意力機制

Transformer 自 2017 年誕生以來,已經成為深度學習中最具影響力的模型架構之一。無論是 GPT、BERT,還是今天的大模型 GPT-4、Claude、Gemini,它們的底層都離不開 Transformer 的基本框架。

今天我們就來全面拆解 Transformer 的 Encoder 與 Decoder 內部模塊結構,并附上一個動手小測驗:畫出 Transformer 的完整流程圖,幫助大家真正掌握這個強大的架構。


一、Transformer 總覽

Transformer 的核心是:自注意力機制(Self-Attention)+ 前饋神經網絡(Feed Forward Network),通過堆疊多層 Encoder 和 Decoder 實現序列建模。

整個模型可以分為兩個部分:

  • Encoder:理解輸入序列
  • Decoder:逐步生成輸出序列

每個部分都由多個重復的模塊(Layer)組成,每個 Layer 內部結構非常規范。


二、Encoder 模塊拆解

一個 Encoder Layer 通常包括以下結構:

輸入 Embedding → 位置編碼 → 多頭自注意力(Multi-Head Self-Attention)→ 殘差連接 + LayerNorm → 前饋全連接層(FFN)→ 殘差連接 + LayerNorm

1. 輸入 Embedding + 位置編碼

  • 詞嵌入:將離散詞 token 轉化為連續向量
  • 位置編碼(Positional Encoding):添加序列中 token 的位置信息,常用 sin/cos 形式

2. 多頭自注意力(Multi-Head Self-Attention)

  • 每個位置都對所有位置的 token 做注意力計算
  • 多頭機制可以并行學習不同語義空間的信息

3. 殘差連接 + LayerNorm

  • 避免深層網絡梯度消失
  • 加快收斂速度,提高訓練穩定性

4. 前饋神經網絡(FFN)

  • 兩層全連接層,中間使用激活函數 ReLU 或 GELU
  • 提高模型非線性表達能力

三、Decoder 模塊拆解

Decoder Layer 在結構上和 Encoder 類似,但多了一個關鍵模塊:Encoder-Decoder Attention,同時引入了Mask 機制來保證自回歸生成。

輸入 Embedding → 位置編碼 → Masked Multi-Head Self-Attention → 殘差連接 + LayerNorm
→ Encoder-Decoder Attention → 殘差連接 + LayerNorm
→ FFN → 殘差連接 + LayerNorm

1. Masked Multi-Head Self-Attention

  • 為了防止"看見未來",只允許當前 token 看到它左邊的 token(即因果 Mask)

2. Encoder-Decoder Attention

  • 允許 Decoder 訪問 Encoder 的輸出表示,用于對輸入序列進行上下文感知
  • 本質也是注意力機制,只不過 Query 來自 Decoder,Key 和 Value 來自 Encoder 輸出

四、整體結構圖

建議自己畫一遍 Transformer 的流程圖,從輸入 token 到輸出結果,包括 Encoder 和 Decoder 各層之間的連接方式。

小提示可以參考以下流程(動手練習!):

[Input Embedding + Pos Encoding] → [N個Encoder Layer 堆疊] → Encoder輸出
↓
[Shifted Output Embedding + Pos Encoding] → [N個Decoder Layer 堆疊(含 Mask + Encoder-Decoder Attention)]
↓
[線性層 + Softmax] → 最終預測輸出

? 小測驗:請嘗試畫出這個結構圖,并標注出每個模塊的主要作用。


五、總結:你需要掌握的關鍵點

模塊作用說明
Self-Attention獲取上下文依賴
Multi-Head Mechanism學習多種注意力表示
Positional Encoding注入位置信息
FFN增強模型表達能力
Residual + LayerNorm穩定訓練、加快收斂
Masking(Decoder)保證生成的因果性
Encoder-Decoder Attention對輸入序列做條件建模

六、后續推薦閱讀

  • 《Attention is All You Need》原論文
  • BERT、GPT、T5 架構演化對比
  • Transformer 變體(如:Linformer、Performer、Longformer)

希望這篇文章能幫助你真正"看懂" Transformer 的結構與邏輯。建議動手畫一畫,理解每一個模塊的輸入輸出關系,構建自己的知識圖譜。

你是否已經掌握 Transformer 的全部細節了?不妨挑戰一下自己,不看圖,能不能完整說出 Encoder 和 Decoder 每一層的結構?


需要我生成一張配套的 Transformer 流程圖嗎?


七、核心公式與直觀解釋

1. 自注意力機制(Self-Attention)

  • 公式

  • 直觀理解:每個 token 通過 Query 與所有 token 的 Key 計算相關性分數,Softmax 后加權 Value,動態聚合全局信息。

2. 前饋神經網絡(FFN)

  • 結構:兩層全連接,常用激活函數 ReLU/GELU
  • 作用:提升模型的非線性表達能力

3. Mask 機制

  • Decoder Masked Attention:用上三角 Mask 保證自回歸生成,防止信息泄露

4. Encoder-Decoder Attention

  • 作用:讓 Decoder 能"讀"到 Encoder 的輸出,做條件生成
  • 本質:Query 來自 Decoder,Key/Value 來自 Encoder

八、配套流程圖與交互式可視化代碼(Streamlit Demo)

1. 結構流程圖建議

建議動手畫一遍 Transformer 的流程圖,幫助理解各模塊的輸入輸出關系。參考流程如下:

[Input Embedding + Pos Encoding] → [N個Encoder Layer 堆疊] → Encoder輸出
↓
[Shifted Output Embedding + Pos Encoding] → [N個Decoder Layer 堆疊(含 Mask + Encoder-Decoder Attention)]
↓
[線性層 + Softmax] → 最終預測輸出

你可以用 draw.io、ProcessOn、Visio 等工具繪制,也可以參考下方 Streamlit Demo 的可視化。

2. Streamlit 交互式可視化 Demo 代碼

將以下代碼保存為 streamlit_transformer_demo.py,在命令行運行 streamlit run streamlit_transformer_demo.py 即可體驗:

import streamlit as st
import numpy as np
import matplotlib.pyplot as pltst.set_page_config(page_title="Transformer Encoder/Decoder 可視化拆解", layout="wide")st.title("Transformer Encoder/Decoder 結構交互式拆解")
st.markdown("""
> 結合自注意力、前饋網絡、Mask 機制等核心模塊,交互式理解 Transformer 架構。
""")tab1, tab2, tab3 = st.tabs(["結構流程圖", "模塊細節", "自注意力演示"])with tab1:st.header("Transformer 總體結構流程圖")st.markdown("""- **左側:Encoder 堆疊層**,每層包含多頭自注意力、前饋網絡、殘差連接和 LayerNorm。- **右側:Decoder 堆疊層**,每層包含 Masked Multi-Head Self-Attention、Encoder-Decoder Attention、前饋網絡等。- **輸入/輸出**:輸入序列 Embedding + 位置編碼,輸出經過線性層和 Softmax 得到預測。""")fig, ax = plt.subplots(figsize=(7, 7))ax.axis('off')# Encoder部分ax.text(0.5, 0.95, "Input Embedding\n+ Pos Encoding", ha='center', va='center', bbox=dict(boxstyle="round", fc="lightblue"))ax.arrow(0.5, 0.92, 0, -0.08, head_width=0.02, head_length=0.02, fc='k', ec='k')ax.text(0.5, 0.82, "N x Encoder Layer", ha='center', va='center', bbox=dict(boxstyle="round", fc="lightgreen"))ax.arrow(0.5, 0.79, 0, -0.08, head_width=0.02, head_length=0.02, fc='k', ec='k')ax.text(0.5, 0.69, "Encoder Output", ha='center', va='center', bbox=dict(boxstyle="round", fc="wheat"))# Decoder部分ax.text(0.8, 0.82, "Shifted Output Embedding\n+ Pos Encoding", ha='center', va='center', bbox=dict(boxstyle="round", fc="lightblue"))ax.arrow(0.8, 0.79, 0, -0.08, head_width=0.02, head_length=0.02, fc='k', ec='k')ax.text(0.8, 0.69, "N x Decoder Layer\n(Masked + Enc-Dec Attn)", ha='center', va='center', bbox=dict(boxstyle="round", fc="lightcoral"))ax.arrow(0.8, 0.66, 0, -0.08, head_width=0.02, head_length=0.02, fc='k', ec='k')ax.text(0.8, 0.56, "Linear + Softmax", ha='center', va='center', bbox=dict(boxstyle="round", fc="plum"))ax.arrow(0.8, 0.53, 0, -0.08, head_width=0.02, head_length=0.02, fc='k', ec='k')ax.text(0.8, 0.43, "Output", ha='center', va='center', bbox=dict(boxstyle="round", fc="lightyellow"))# Encoder Output 到 Decoder Layer 的橫向箭頭ax.arrow(0.55, 0.69, 0.18, 0, head_width=0.02, head_length=0.02, fc='k', ec='k', length_includes_head=True)ax.text(0.67, 0.71, "Context", ha='center', va='bottom', fontsize=10, color='gray')st.pyplot(fig)with tab2:st.header("模塊細節與原理")st.markdown("""### Encoder Layer- **多頭自注意力(Multi-Head Self-Attention)**:每個 token 能關注全局,捕捉長距離依賴。- **殘差連接 + LayerNorm**:防止梯度消失,加快收斂。- **前饋神經網絡(FFN)**:提升非線性表達能力。### Decoder Layer- **Masked Multi-Head Self-Attention**:保證生成時不"偷看"未來 token。- **Encoder-Decoder Attention**:讓 Decoder 能訪問 Encoder 輸出,實現條件生成。- **殘差連接 + LayerNorm、FFN**:同 Encoder。### 位置編碼(Positional Encoding)- 注入序列順序信息,常用 sin/cos 公式。### Mask 機制- Decoder 中用上三角 Mask,防止信息泄露。---**自注意力公式**:
![](https://i-blog.csdnimg.cn/img_convert/ec53b1b37ab5d4293d8f8d25230dcff7.png)with tab3:st.header("自注意力分數計算演示")st.markdown("""下面你可以輸入一組簡單的 token 向量,體驗自注意力分數的計算過程。""")st.markdown("**假設有3個token,每個維度為2**")tokens = st.text_area("輸入token向量(每行一個token,用逗號分隔)", "1,0\n0,1\n1,1")try:X = np.array([list(map(float, line.split(','))) for line in tokens.strip().split('\n')])d_k = X.shape[1]Q = XK = XV = Xattn_scores = Q @ K.T / np.sqrt(d_k)attn_weights = np.exp(attn_scores) / np.exp(attn_scores).sum(axis=1, keepdims=True)output = attn_weights @ Vst.write("**Attention 分數矩陣**")st.dataframe(attn_scores)st.write("**Softmax 后的權重**")st.dataframe(attn_weights)st.write("**輸出向量(加權和)**")st.dataframe(output)except Exception as e:st.error(f"輸入格式有誤: {e}")st.sidebar.title("學習建議")
st.sidebar.markdown("""
- 建議動手畫一畫結構圖,加深理解
- 推薦閱讀原論文和 BERT/GPT 相關資料
- 多做自注意力、Mask 機制的推導練習
""")---![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/76416e86d5804140b3c9af088ac365ba.png)

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

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

相關文章

游戲引擎學習第283天:“讓‘Standing-on’成為一個更嚴謹的概念

如果同時使用多個OpenGL上下文,并且它們都有工作負載,GPU或GPU驅動程序如何決定調度這些工作?我注意到Windows似乎優先處理活動窗口的OpenGL上下文(即活動窗口表現更好),挺有意思的…… 當多個OpenGL上下文…

深度學習讓魚與熊掌兼得

通常,一個大的復雜的模型的loss會低,但是擬合方面不夠,小的模型在擬合方面更好,但是loss高,我們可以通過深度學習來得到一個有著低loss的小模型 我們之前學過,peacewise linear可以用常數加上一堆這個階梯型函數得到,然后因為peacewise linear可以逼近任何function,所以理論上…

如何在 AWS 上構建支持 AVIF 的前端圖片優化方案

一、為什么使用 AVIF 圖片格式? 優勢點 說明 高壓縮率 在相似質量下,AVIF 文件比 JPEG/PNG/WebP 更小,能有效節省帶寬和存儲空間。 更高畫質 即使在低碼率下也能保持清晰細節,減少壓縮帶來的馬賽克或模糊問題。 支持透明度 …

C++中的std::allocator

C中的std::allocator 文章目錄 C中的std::allocator1.std::allocator1.1C中的placement new 和operator new1.2一個custom allocator的實現1.3使用std::allocator_traits實現allocator 1.std::allocator C中的std::allocator默默工作在CSTL中的所有容器的內存分配上&#xff0…

CodeBuddy編程新范式

不會寫?不想寫? 騰訊推出的CodeBuddy徹底解放雙手。 示例 以下是我對CodeBuddy的一個小體驗。 我只用一行文字對CodeBuddy說明了一下我的需求,剩下的全部就交給了CodeBuddy,我需要做的就是驗收結果即可。 1.首先CodeBuddy會對任…

QML學習01(設置寬度、高度、坐標點、標題,信號與槽,鍵盤事件)

QML學習 1、前言2、QML3、QML和QWidget的區別3、QtQuick下的Windows應用4、總結 1、前言 記錄一下QML學習的過程,方便自己日后回顧,也可以給有需要的人提供幫助。 2、QML QML是 Qt 框架中的一種聲明式編程語言,專門用于快速設計和開發用戶…

在VSCode中接入DeepSeek的指南

本文將介紹三種主流接入方式,涵蓋本地模型調用和云端API接入方案。 一、環境準備 1.1 基礎要求 VSCode 1.80+Node.js 16.x+Python 3.8+(本地部署場景)已部署的DeepSeek服務(本地或云端)1.2 安裝必備插件 # 打開VSCode插件面板(Ctrl+Shift+X) 搜索并安裝: - DeepSeek Of…

機器學習-計量經濟學

機器學習 不要事前決定變量關系,關鍵是誰也不知道啊,機器學習學習的模型(那也不是真實的關系啊) 這就是自然學科的好處:只要不斷的優化這個未知的東西(函數),然后在數據上&#xff…

五、Linux賬號與權限管理

1、管理用戶和組賬號 1.1、用戶 1.1.1、用戶的概念及作用 在Linux系統中,用戶(User)指的是可以訪問系統資源的個體實體。每個用戶都有一個唯一的用戶賬號,用于標識和管理其在系統中的活動和訪問權限。 用戶的重要性和功能: 身份認證和訪問控制: 用戶賬號用于身份認證,確…

精益數據分析(61/126):移情階段評分體系構建與實戰案例解析

精益數據分析(61/126):移情階段評分體系構建與實戰案例解析 在創業的移情階段,如何科學評估用戶需求的真實性與緊迫性,是決定后續產品方向的關鍵。今天,我們結合《精益數據分析》中的評分框架,…

完成反射宇宙的最后一塊拼圖:泛型集合

反射,c#的黑科技,一手打造漂亮的,專屬于自己的屬性框 之前分享的: 如何寫一個自定義屬性控件的功能,但是只是對基礎的類型,比如String,bool,int等,但是對list<T>,Vector<T>這種泛型集合類型支持的不是很好,剛好最近重新研究了一下,將這個非常重要的功能完成了. 效…

Redis--基礎知識點--26--過期刪除策略 與 淘汰策略

Redis 的過期策略和淘汰策略是內存管理的核心機制&#xff0c;分別用于處理鍵的自動失效和內存不足時的數據清理。以下是詳細說明&#xff1a; 1 、過期刪除策略&#xff08;Expiration Policy&#xff09; 處理已設置過期時間&#xff08;EXPIRE&#xff09;的鍵&#xff0c;…

第六天——貪心算法——字符串分隔

1. 題目 給定一個字符串 s&#xff0c;我們需要將其劃分為盡可能多的部分&#xff0c;使得同一字母最多出現在一個部分中。 例如&#xff1a;字符串 "ababcc" 可以劃分為 ["abab", "cc"]&#xff0c;但要避免 ["aba", "bcc&quo…

[原創](現代Delphi 12指南):[macOS 64bit App開發]: 注意“回車換行“的跨平臺使用.

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、…

Maven 插件參數注入與Mojo開發詳解

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

擴增子分析|R分析之微生物生態網絡穩定性評估之節點和連接的恒常性、節點持久性以及組成穩定性指數計算

一、引言 周集中老師團隊于2021年在Nature climate change發表的文章&#xff0c;闡述了網絡穩定性評估的原理算法&#xff0c;并提供了完整的代碼。自此對微生物生態網絡的評估具有更全面的指標&#xff0c;自此網絡穩定性的評估廣受大家歡迎。本文將介紹網絡穩定性之節點和連…

人體肢體渲染-一步幾個腳印從頭設計數字生命——仙盟創夢IDE

人體肢體動作數據集-太極拳 渲染代碼 # 初始化Pygame pygame.init()# 設置窗口尺寸 WINDOW_WIDTH 800 WINDOW_HEIGHT 600 window pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) pygame.display.set_caption("動作回放")# 設置幀率 FPS 30 clock pyg…

強化學習入門:馬爾科夫獎勵過程

文章目錄 前言1、組成部分2、應用例子3、馬爾科夫獎勵過程總結 前言 最近想開一個關于強化學習專欄&#xff0c;因為DeepSeek-R1很火&#xff0c;但本人對于LLM連門都沒入。因此&#xff0c;只是記錄一些類似的讀書筆記&#xff0c;內容不深&#xff0c;大多數只是一些概念的東…

騰訊開源實時語音大模型VITA-audio,92mstoken極速響應,支持多語言~

簡介 VITA-Audio 是一個由騰訊優圖實驗室&#xff08;Tencent Youtu Lab&#xff09;、南京大學和廈門大學的研究人員共同開發的項目&#xff0c;旨在解決現有語音模型在流式生成&#xff08;streaming&#xff09;場景下生成第一個音頻令牌&#xff08;token&#xff09;時的高…

測序的原理

Sanger 測序原理 https://v.qq.com/x/page/d0124c0k44t.html illumina 測序原理&#xff1a; https://v.qq.com/x/page/i0770fd7r9i.html PacBio 第三代 SMRT 單分子測序 https://v.qq.com/x/page/r03534cry7u.html Ion torrent 測序原理 https://v.qq.com/x/page/v01754s6r82.…