第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.mzph.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.…