系列文章目录
文章目录
- 系列文章目录
- 前言
- 零、预训练模型
- 一、Encoder-Decoder的代表:T5
-
- [1.1 T5 的核心思想](#1.1 T5 的核心思想)
- [1.2 T5 的流水线](#1.2 T5 的流水线)
- [1.3 模块一:输入处理与任务前缀 (Input & Task Prefix)](#1.3 模块一:输入处理与任务前缀 (Input & Task Prefix))
-
-
- 任务统一示例:
- [关键技巧:任务前缀(Task Prefix)](#关键技巧:任务前缀(Task Prefix))
-
- [1.4 模块二:嵌入层 (Embedding Layer)](#1.4 模块二:嵌入层 (Embedding Layer))
- [1.5 模块三:Encoder 堆叠 (Encoder Stack)](#1.5 模块三:Encoder 堆叠 (Encoder Stack))
-
-
- [3.1 自注意力层 (Self-Attention)](#3.1 自注意力层 (Self-Attention))
- [3.2 前馈神经网络 (FFN)](#3.2 前馈神经网络 (FFN))
- [3.3 归一化层 (RMSNorm)](#3.3 归一化层 (RMSNorm))
-
- [T5 对比原始Transfomer](#T5 对比原始Transfomer)
- [二、术语表 - T5](#二、术语表 - T5)
- 三、Encoder-only的代表:BERT
-
- [3.1 BERT 的核心思想](#3.1 BERT 的核心思想)
- [3.2 BERT 流水线](#3.2 BERT 流水线)
- [BERT 的开创性](#BERT 的开创性)
- [四、术语表 - BERT](#四、术语表 - BERT)
- 总结
前言
零、预训练模型
- 根据
Transformer的组件选择,预训练模型分为 三大流派:
Transformer 架构
Encoder 部分
Decoder 部分
Encoder + Decoder
BERT 系列
Encoder-Only
GPT 系列
Decoder-Only
T5/BART 系列
Encoder-Decoder
擅长:理解
任务:分类、匹配、抽取
擅长:生成
任务:写作、对话、续写
擅长:转换
任务:翻译、摘要
一、Encoder-Decoder的代表:T5
1.1 T5 的核心思想
T5 模型
核心思想:大一统 Text-to-Text
模型结构:Encoder-Decoder
预训练任务:Span Corruption + C4 数据集
所有任务都是文本生成
任务前缀区分任务类型
Encoder 编码输入
Decoder 生成输出
RMSNorm 归一化
遮蔽 15% Token
预测被遮蔽部分
多任务混合训练
1.2 T5 的流水线
T5的流水线可以看作一条双向加工线:
-
前半段(Encoder):理解输入文本。
-
后半段(Decoder):生成输出文本。
-
加前缀 + Tokenizer 2. Embedding 3. Encoder 堆叠 4. Cross-Attention 5. LM Head 6. Softmax 输入文本
Input IDs
向量序列
上下文表示
Decoder 堆叠
Logits
输出文本
1.3 模块一:输入处理与任务前缀 (Input & Task Prefix)
- 作用:告诉模型"要做什么任务",并把文字变成 ID。
- 操作:
- 添加前缀 :根据任务添加字符串前缀(如
"summarize: ")。 - Tokenizer:将文本切分为 Token,映射为 ID。
- 添加前缀 :根据任务添加字符串前缀(如
- T5 特色:没有固定的 [CLS]/[SEP],全靠前缀区分任务。
python
# 示例
input_text = "summarize: 今天天气真好"
# Tokenizer 处理后
input_ids = [564, 123, 456, 789, ...] # 形状:(2, 10)
- 这也是
T5最革命性的贡献:Text-to-Text(文本到文本) - 核心观点:所有 NLP 任务都可以看作"输入文本 → 输出文本"的转换。
任务统一示例:
| 任务类型 | 传统做法 | T5 做法(Text-to-Text) |
|---|---|---|
| 情感分类 | 输出标签(0/1) | 输入:"classify: 这产品真好" 输出:"positive" |
| 机器翻译 | 专用翻译模型 | 输入:"translate English to French: Hello" 输出:"Bonjour" |
| 文本摘要 | 专用摘要模型 | 输入:"summarize: [长文章]" 输出:"[短摘要]" |
| 问答系统 | 检索 + 匹配 | 输入:"question: 谁是美国总统?context: [文章]" 输出:"拜登" |
关键技巧:任务前缀(Task Prefix)
- 为了让模型知道当前要做什么任务,
T5在输入前加了一个**"指令前缀"**。
"classify:"→ 告诉模型要做分类。"translate English to German:"→ 告诉模型要做翻译。"summarize:"→ 告诉模型要做摘要。
1.4 模块二:嵌入层 (Embedding Layer)
- 作用:把 ID 变成向量。
- 操作:
- 查表,将每个 ID 映射为 dense vector。
- T5 特色 :
- 无绝对位置编码:T5 不 像 BERT/GPT 那样在 Embedding 上加 位置向量。
- 权重共享:输入 Embedding 和输出 LM Head 通常共享同一套权重(节省参数)。
- 形状变化: 2 2 2 维 → 3 3 3 维
python
# 内部操作
embeddings = nn.Embedding(vocab_size=30000, embedding_dim=512)
x = embeddings(input_ids) # 形状:(2, 10, 512)
1.5 模块三:Encoder 堆叠 (Encoder Stack)
作用 :理解输入文本的深层语义。通常由 N 个 Encoder Block 串联而成(T5-Base 是 12 层)。
每个 Encoder Block 包含三个子模块:
3.1 自注意力层 (Self-Attention)
- 功能:让每个词都能看到句子里的所有其他词(双向)。
- T5 特色 :相对位置偏差 (Relative Position Bias) 。
- 不在输入加位置编码,而是在计算 Attention 分数时,加上一个基于"相对距离"的可学习偏置。
- 公式:
Attention(Q, K, V) = softmax(QK^T / √d + Bias) * V
- 形状 :输入
(2, 10, 512)→ 输出(2, 10, 512)
3.2 前馈神经网络 (FFN)
- 功能:非线性变换,提取特征。
- 结构 :
Linear -> ReLU -> Linear(T5v1.1 后用 GeGLU)。 - 形状 :输入
(2, 10, 512)→ 中间(2, 10, 2048)→ 输出(2, 10, 512)
3.3 归一化层 (RMSNorm)
- 功能:稳定训练。
- T5 特色 :Pre-Norm 结构 + RMSNorm 。
- Pre-Norm:先 Norm 再 Attention/FFN(残差连接在外)。
- RMSNorm:只除以均方根,不减均值,计算更快。
- 公式:
RMSNorm(x) = (x / RMS(x)) * γ
- 形状 :输入
(2, 10, 512)→ 输出(2, 10, 512)
python
# Encoder Block 伪代码
def encoder_block(x):
# Pre-Norm + Self-Attention
x = x + Attention(RMSNorm(x))
# Pre-Norm + FFN
x = x + FFN(RMSNorm(x))
return x
Encoder 最终输出 :(B, L_in, D) → (2, 10, 512),称为 Memory 或 Context。
T5 对比原始Transfomer
| 特性 | 原始 Transformer | T5 | 为什么? |
|---|---|---|---|
| 位置编码 | 正弦绝对位置编码 | 相对位置偏差 (Relative Bias) | 更好地处理长序列,泛化性更强 |
| 归一化 | LayerNorm (Post-Norm) | RMSNorm (Pre-Norm) | 训练更稳定,计算更快,少参数 |
| Embedding | 输入输出独立 | 权重共享 (Tying) | 减少参数量,正则化效果 |
| 激活函数 | ReLU | GeGLU (T5v1.1) | 表达能力更强 |
| 任务输入 | 固定结构 | 任务前缀 (Task Prefix) | 统一所有任务为 Text-to-Text |
二、术语表 - T5
| 术语 | 英文 | 简要解释 | 本节重点 |
|---|---|---|---|
| Text-to-Text | Text-To-Text | 将所有 NLP 任务统一为文本生成任务的思想。 | T5 核心理念 |
| Encoder-Decoder | Encoder-Decoder | 包含编码器和解码器的完整 Transformer 架构。 | T5 的模型结构 |
| RMSNorm | Root Mean Square Layer Norm | 一种简化的层归一化方法,不减去均值。 | 替代 LayerNorm,计算更快 |
| Span Corruption | Span Corruption | 预训练任务,遮蔽连续片段让模型预测。 | T5 的预训练方式 |
| C4 数据集 | Colossal Clean Crawled Corpus | T5 预训练使用的超大规模清洗文本数据集。 | 750GB 网页文本 |
| 任务前缀 | Task Prefix | 输入文本前的指令字符串,指定任务类型。 | 如 "translate:", "summarize:" |
| 多任务学习 | Multi-Task Learning | 同时训练多个任务,提升模型泛化能力。 | T5 预训练策略 |
| 迁移学习 | Transfer Learning | 预训练学到的知识迁移到下游任务。 | 预训练 → 微调 |
| 交叉注意力 | Cross-Attention | Decoder 关注 Encoder 输出的注意力机制。 | 连接编码器和解码器 |
| 下游任务 | Downstream Tasks | 预训练后具体应用的任务(如分类、翻译)。 | 微调阶段 |
三、Encoder-only的代表:BERT
3.1 BERT 的核心思想
BERT
架构创新
Encoder-Only
堆叠12/24层
双向注意力
预训练任务
MLM 掩码语言模型
NSP 下一句预测
训练范式
预训练 Pre-training
微调 Fine-tuning
迁移学习
3.2 BERT 流水线
输出层
编码层
输入层
Tokenizer
句子级
Token 级
原始文本
Input IDs
Embedding 层
Token + Segment + Position Emb
Encoder Layer 1
Encoder Layer 2
...
Encoder Layer 12
任务类型?
取 CLS 向量
取每个 Token 向量
Prediction Head
Softmax
输出结果
BERT 的开创性
BERT是NLP发展史上的一个分水岭:- 架构上:证明了
Encoder-Only在理解任务上的优越性。 - 任务上:发明了
MLM和NSP,实现了双向语义学习。 - 范式上:确立了预训练 - 微调的主流地位。
- 架构上:证明了
四、术语表 - BERT
| 术语 | 英文 | 简要解释 | 本节重点 |
|---|---|---|---|
| Encoder-Only | Encoder-Only | 只使用 Transformer 编码器部分的架构。 | BERT 的架构 |
| 预训练 - 微调 | Pre-training + Fine-tuning | 先在大数据学通用知识,再在小数据学具体任务。 | BERT 确立的范式 |
| 掩码语言模型 | MLM (Masked LM) | 随机遮蔽词让模型预测,学习双向语义。 | BERT 核心任务 1 |
| 下一句预测 | NSP (Next Sentence Pred) | 判断两个句子是否连续,学习句间关系。 | BERT 核心任务 2 |
| 词片分词 | WordPiece | 基于统计的子词切分算法(如 playing -> play + ##ing)。 | BERT 的分词方式 |
| 分类符 | [CLS] Token | 放在句首的特殊 token,代表整句语义。 | 用于分类任务 |
| 分隔符 | [SEP] Token | 放在句尾,分隔句子 A 和句子 B。 | 用于句对任务 |
| 高斯误差线性单元 | GELU | BERT 使用的激活函数,比 ReLU 更平滑。 | 激活函数选择 |
| 相对位置编码 | Relative Position Emb | 表示词与词之间的相对距离,而非绝对位置。 | 改进版 BERT 使用 |
| SOTA | State Of The Art | 当前最佳性能。 | BERT 发布时在 11 个任务上达到 SOTA |
总结
- T5 的流水线是一个高度模块化、标准化的系统:
- 输入:文本 + 前缀 → ID。
- Embedding:ID → 向量(无位置编码)。
- Encoder:双向理解 → 上下文记忆。
- Decoder:单向生成 + 交叉关注 → 生成表示。
- 输出:向量 → 词表概率 → 文本。