上周完成了 Python 核心特性的深化学习,包括面向对象编程进阶(继承、多态、魔法方法、@property)、函数式编程工具(列表推导式、reduce、装饰器)、Python 数据模型与协议,以及第一个深度学习数据处理脚本的实战编写。本周初步学习 Transformer 架构的完整原理与实现细节,为后续大模型与生成式 AI 的学习奠定核心基础。

一、本周学习目标

  1. 理解 Seq2seq 模型范式:掌握序列到序列模型的应用场景与基本架构
  2. 掌握 Self-Attention 机制:深入理解自注意力机制的核心原理、矩阵计算与多头设计
  3. 吃透 Encoder 架构:学习 Transformer 编码器的完整结构,包括 Multi-Head Attention、残差连接、层归一化与前馈网络
  4. 吃透 Decoder 架构:理解自回归解码器与交叉注意力机制,区分 Autoregressive 与 Non-Autoregressive 解码方式
  5. 理解位置编码:掌握 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 的计算过程可以概括为三个步骤:

  1. 生成 Q、K、V:对每个输入向量,通过三个不同的权重矩阵分别计算出 Query(查询)、Key(键)和 Value(值)向量
  2. 计算注意力分数:每个位置的 Query 与所有位置的 Key 进行点积计算,得到注意力分数(表示该位置对其他位置的关注程度)
  3. 加权求和:对注意力分数进行 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 内部包含两个核心子层:

  1. Multi-Head Self-Attention 层:让每个位置关注整个输入序列
  2. Fully Connected Feed-Forward Network(前馈神经网络)层:对每个位置的向量进行独立的非线性变换

每个子层之后都紧跟 残差连接(Residual Connection)层归一化(Layer Normalization)

(2)Block 内部详细流程

  1. 输入向量序列首先经过 Multi-Head Self-Attention 层处理
  2. 将 Self-Attention 的输出与原始输入向量 相加(残差连接),得到 a + b
  3. 对相加后的结果进行 Layer Normalization
  4. 将归一化后的结果输入 Fully Connected 前馈网络
  5. 再次进行 残差连接(FC 输出与输入相加)
  6. 再次进行 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 有两个关键区别:

  1. Masked Self-Attention:Decoder 的 Self-Attention 需要做 Mask(掩码)处理
  2. Cross Attention(交叉注意力) :Decoder 多了一个 Cross Attention 层,用于关注 Encoder 的输出

(2)Autoregressive Decoder(自回归解码器)

在自回归(Autoregressive,简称 AT)模式下,Decoder 采用逐词生成的方式:

  1. 首先输入一个特殊的 BEGIN 符号作为开始信号
  2. Decoder 输出一个向量,通过 Softmax 计算词表中每个词的概率,选择概率最高的词作为当前输出
  3. 将刚生成的词与之前的输入一起作为下一时刻的输入,继续生成下一个词
  4. 如此循环,直到生成 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 上一层的输出
  • KeyValue 来自 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 的完整工作流程如下:

  1. 输入:原始文本序列(如“我爱你”)
  2. Tokenization:将文本切分为 Token
  3. Input Embedding + Positional Encoding:将 Token 转换为向量并加入位置信息
  4. Encoder:N 个 Block 堆叠处理,每个 Block 包含 Multi-Head Self-Attention + 残差连接 + Layer Norm + FFN + 残差连接 + Layer Norm
  5. Decoder:以 Encoder 输出和 BEGIN 符号为初始输入,通过 Masked Self-Attention + Cross Attention + FFN 逐词生成
  6. 输出:通过 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 的工程实践与延伸学习:

  1. Transformer 代码实现:结合李宏毅课程中的 HW5(Transformer)作业,从零实现一个简化版 Transformer
  2. BERT 与自监督学习:学习 BERT 的基本概念、训练方式(Masked LM、Next Sentence Prediction)及其在下游任务中的应用
  3. Transformer 的竞争者:了解 Mamba 等架构如何尝试改进甚至取代 Transformer
  4. PyTorch 实战:使用 Hugging Face Transformers 库加载预训练模型,完成一个简单的文本生成或分类任务
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐