Week9:Transformer 架构的深度学习
上周完成了 Python 核心特性的深化学习,包括面向对象编程进阶(继承、多态、魔法方法、
@property)、函数式编程工具(列表推导式、reduce、装饰器)、Python 数据模型与协议,以及第一个深度学习数据处理脚本的实战编写。本周初步学习 Transformer 架构的完整原理与实现细节,为后续大模型与生成式 AI 的学习奠定核心基础。
文章目录
一、本周学习目标
- 理解 Seq2seq 模型范式:掌握序列到序列模型的应用场景与基本架构
- 掌握 Self-Attention 机制:深入理解自注意力机制的核心原理、矩阵计算与多头设计
- 吃透 Encoder 架构:学习 Transformer 编码器的完整结构,包括 Multi-Head Attention、残差连接、层归一化与前馈网络
- 吃透 Decoder 架构:理解自回归解码器与交叉注意力机制,区分 Autoregressive 与 Non-Autoregressive 解码方式
- 理解位置编码:掌握 Transformer 如何感知输入序列的顺序信息
二、本周学习内容
2.1 Seq2seq 模型概述
Transformer 本质上是一个 Seq2seq(Sequence-to-Sequence) 模型,即输入一个序列,输出也是一个序列,输出的长度由模型自己决定。
Seq2seq 的典型应用场景:
| 应用场景 | 说明 |
|---|---|
| 语音识别 | 将声音讯号转换为文字 |
| 机器翻译 | 将一种语言的文字转换为另一种语言 |
| 语音翻译 | 将声音讯号直接转换为指定语言的文字 |
| 文本到语音合成(TTS) | 将文字转换为语音 |
| 聊天机器人 | 问答与对话生成 |
| 句法分析 | 将句法分析树转化为序列输出 |
| 多标签分类 | 每个对象可能同时属于多个类别,输出类别序列 |
| 目标检测 | 输出检测到的物体序列 |
Seq2seq 模型的基本架构由 Encoder(编码器) 和 Decoder(解码器) 两部分组成。Encoder 负责理解输入序列,将其转化为一组向量表示;Decoder 则基于 Encoder 的输出逐步生成目标序列。
2.2 Self-Attention(自注意力机制)
(1)为什么需要 Self-Attention
在传统的深度学习模型中,处理序列数据时存在明显局限:
- RNN 虽然能处理序列,但难以并行计算,且长距离依赖问题严重
- CNN 只能捕捉局部感受野内的信息,无法直接建模全局依赖
Self-Attention 的核心思想是:让序列中的每个位置都能直接关注到序列中的所有其他位置,动态地生成不同连接的权重。输入一组向量,输出同样数量的一组向量,每一个输出向量都考虑了整个输入序列的资讯。
(2)Self-Attention 的运作原理
Self-Attention 的计算过程可以概括为三个步骤:
- 生成 Q、K、V:对每个输入向量,通过三个不同的权重矩阵分别计算出 Query(查询)、Key(键)和 Value(值)向量
- 计算注意力分数:每个位置的 Query 与所有位置的 Key 进行点积计算,得到注意力分数(表示该位置对其他位置的关注程度)
- 加权求和:对注意力分数进行 Softmax 归一化后,用得到的权重对所有位置的 Value 进行加权求和,得到最终的输出向量
从矩阵角度来看,整个过程可以高效地并行计算。
(3)Multi-head Self-Attention(多头自注意力)
Multi-head Self-Attention 是 Self-Attention 的增强版本。其核心思想是:使用多组不同的 Q、K、V 投影矩阵,让模型从不同的子空间、不同的角度去关注输入序列。
- 每个“头”独立地执行 Self-Attention 计算
- 将所有头的输出拼接起来,再通过一个线性变换得到最终输出
- 在原始 Transformer 中,head 数通常设为 8
多头机制使得模型能够同时捕捉序列中多种不同层面的关系,极大增强了模型的表达能力。
2.3 Encoder(编码器)
(1)整体结构
Transformer 的 Encoder 由 N 个相同的 Block(块) 堆叠而成。每个 Block 内部包含两个核心子层:
- Multi-Head Self-Attention 层:让每个位置关注整个输入序列
- Fully Connected Feed-Forward Network(前馈神经网络)层:对每个位置的向量进行独立的非线性变换
每个子层之后都紧跟 残差连接(Residual Connection) 和 层归一化(Layer Normalization)。
(2)Block 内部详细流程
- 输入向量序列首先经过 Multi-Head Self-Attention 层处理
- 将 Self-Attention 的输出与原始输入向量 相加(残差连接),得到
a + b - 对相加后的结果进行 Layer Normalization
- 将归一化后的结果输入 Fully Connected 前馈网络
- 再次进行 残差连接(FC 输出与输入相加)
- 再次进行 Layer Normalization,得到 Block 的最终输出
(3)残差连接(Residual Connection)的作用
残差连接最早由何恺明等人在 ResNet 中提出。其核心思想是在网络层之间添加跳跃连接(Skip Connection),让信息能够绕过一个或多个层直接传递到后面的层。
数学上,如果 F(x) 表示若干层的变换结果,则残差块的输出为 x + F(x)。这种设计带来两个关键好处:
- 缓解梯度消失:梯度可以通过残差连接直接流回更早的层
- 提升模型表达能力:允许在不损害性能的情况下增加更多层数
(4)Layer Normalization vs Batch Normalization
在 Transformer 中采用的是 Layer Normalization 而非 Batch Normalization。
| 对比维度 | Batch Normalization | Layer Normalization |
|---|---|---|
| 归一化维度 | 对 batch 中所有样本的同一维度进行归一化 | 对单个样本的所有维度进行归一化 |
| 适用场景 | 适用于 CNN 等固定长度的输入 | 更适用于 RNN、Transformer 等变长序列 |
| 特点 | 依赖 batch size,训练与推理行为不同 | 不依赖 batch size,训练与推理行为一致 |
Layer Normalization 的具体步骤是:计算输入向量的均值和标准差,然后用向量中的每个数值减去均值后除以标准差。
2.4 Decoder(解码器)
(1)Decoder 的整体结构
Decoder 的结构与 Encoder 类似,也由多个 Block 堆叠而成。但与 Encoder 相比,Decoder 有两个关键区别:
- Masked Self-Attention:Decoder 的 Self-Attention 需要做 Mask(掩码)处理
- Cross Attention(交叉注意力) :Decoder 多了一个 Cross Attention 层,用于关注 Encoder 的输出
(2)Autoregressive Decoder(自回归解码器)
在自回归(Autoregressive,简称 AT)模式下,Decoder 采用逐词生成的方式:
- 首先输入一个特殊的 BEGIN 符号作为开始信号
- Decoder 输出一个向量,通过 Softmax 计算词表中每个词的概率,选择概率最高的词作为当前输出
- 将刚生成的词与之前的输入一起作为下一时刻的输入,继续生成下一个词
- 如此循环,直到生成 END 符号为止
Decoder 会将自己的输出当作自己的输入,这种自回归方式使得模型能够生成任意长度的序列。
(3)Masked Self-Attention(掩码自注意力)
Masked Self-Attention 是 Decoder 中的核心设计。为什么需要 Mask?
在自回归解码时,预测第 t 个词时不应该看到第 t 个词之后(未来)的信息——否则就相当于“作弊”了。
Mask 的实现方式是在注意力计算时,将未来位置的注意力分数设为 -inf(无穷小),使得 Softmax 后这些位置的权重为 0。具体来说,就是使用一个上三角矩阵作为 Mask,为 1 的位置表示被遮蔽。
此外,Mask 还有一个作用:遮挡 Padding 字符。由于 batch 中每个句子的长度不同,需要用 Padding 补齐,而 Padding 字符不应参与注意力计算。
(4)Cross Attention(交叉注意力)
Cross Attention 是 Decoder 与 Encoder 之间的桥梁。在 Cross Attention 中:
- Query 来自 Decoder 上一层的输出
- Key 和 Value 来自 Encoder 的最终输出
这使得 Decoder 在生成每个词时,都能够“关注”到输入序列中与之最相关的部分。
(5)Non-Autoregressive Decoder(非自回归解码器)
除了自回归解码器,还存在 Non-Autoregressive(非自回归)Decoder。两者的核心区别在于:
| 对比维度 | Autoregressive | Non-Autoregressive |
|---|---|---|
| 生成方式 | 从左到右依次生成,依赖先前结果 | 所有位置并行独立生成 |
| 速度 | 较慢(串行) | 较快(并行) |
| 质量 | 通常更高 | 可能略低 |
2.5 Positional Encoding(位置编码)
Transformer 的 Self-Attention 本身是置换不变的——它不关心输入序列的顺序。为了让模型感知位置信息,需要在输入中加入 Positional Encoding(位置编码)。
在原始 Transformer 中,位置编码使用正弦和余弦函数:
- 对偶数位置使用正弦函数
- 对奇数位置使用余弦函数
- 将位置编码与词向量相加,作为最终的输入表示
Positional Encoding 让模型能够区分“我爱你”和“你爱我”这样顺序不同但词汇相同的句子。
2.6 Transformer 完整架构总结
将以上所有组件整合起来,Transformer 的完整工作流程如下:
- 输入:原始文本序列(如“我爱你”)
- Tokenization:将文本切分为 Token
- Input Embedding + Positional Encoding:将 Token 转换为向量并加入位置信息
- Encoder:N 个 Block 堆叠处理,每个 Block 包含 Multi-Head Self-Attention + 残差连接 + Layer Norm + FFN + 残差连接 + Layer Norm
- Decoder:以 Encoder 输出和 BEGIN 符号为初始输入,通过 Masked Self-Attention + Cross Attention + FFN 逐词生成
- 输出:通过 Softmax 生成目标序列(如“I LOVE YOU”)
三、学习总结
| 维度 | 本周学习内容 | 核心收获 |
|---|---|---|
| 模型范式 | Seq2seq 架构 | Transformer 本质上是 Seq2seq 模型,广泛应用于语音识别、机器翻译、对话生成等任务 |
| 注意力机制 | Self-Attention、Multi-Head Attention | 自注意力让每个位置能直接关注所有位置;多头机制从多个子空间捕捉不同关系 |
| Encoder | Multi-Head Attention + 残差连接 + Layer Norm + FFN | 残差连接缓解梯度消失;Layer Norm 适用于变长序列 |
| Decoder | Masked Self-Attention + Cross Attention + 自回归生成 | Mask 防止“作弊”;Cross Attention 桥接 Encoder 与 Decoder |
| 位置编码 | 正弦/余弦位置编码 | 让 Transformer 感知序列顺序,打破置换不变性 |
核心收获:本周最大的认知升级是理解了 Transformer 为何能成为大模型时代的基石。Self-Attention 机制突破了 RNN 无法并行和 CNN 感受野有限的瓶颈,让模型能够高效地建模长距离依赖;而 Encoder-Decoder 架构又赋予了它处理各种 Seq2seq 任务的通用性。从 GPT 到 BERT,从 T5 到 LLM,几乎所有现代大语言模型都建立在 Transformer 架构之上——理解 Transformer,就是理解当代 AI 的“内功心法”。
四、下周学习计划
根据本周学习进度,下周将进入 Transformer 的工程实践与延伸学习:
- Transformer 代码实现:结合李宏毅课程中的 HW5(Transformer)作业,从零实现一个简化版 Transformer
- BERT 与自监督学习:学习 BERT 的基本概念、训练方式(Masked LM、Next Sentence Prediction)及其在下游任务中的应用
- Transformer 的竞争者:了解 Mamba 等架构如何尝试改进甚至取代 Transformer
- PyTorch 实战:使用 Hugging Face Transformers 库加载预训练模型,完成一个简单的文本生成或分类任务
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)