【Datawhale2603】happy-llm task04 Encoder-Decoder预训练

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 零、预训练模型
  • 一、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 的流水线可以看作一条双向加工线
  1. 前半段(Encoder):理解输入文本。

  2. 后半段(Decoder):生成输出文本。

  3. 加前缀 + Tokenizer 2. Embedding 3. Encoder 堆叠 4. Cross-Attention 5. LM Head 6. Softmax 输入文本
    Input IDs
    向量序列
    上下文表示
    Decoder 堆叠
    Logits
    输出文本

1.3 模块一:输入处理与任务前缀 (Input & Task Prefix)

  • 作用:告诉模型"要做什么任务",并把文字变成 ID。
  • 操作:
    1. 添加前缀 :根据任务添加字符串前缀(如 "summarize: ")。
    2. 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 特色
    1. 无绝对位置编码:T5 像 BERT/GPT 那样在 Embedding 上加 位置向量
    2. 权重共享:输入 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),称为 MemoryContext

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 的开创性

  • BERTNLP 发展史上的一个分水岭:
    • 架构上:证明了 Encoder-Only 在理解任务上的优越性。
    • 任务上:发明了 MLMNSP,实现了双向语义学习。
    • 范式上:确立了预训练 - 微调的主流地位。

四、术语表 - 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 的流水线是一个高度模块化、标准化的系统:
  1. 输入:文本 + 前缀 → ID。
  2. Embedding:ID → 向量(无位置编码)。
  3. Encoder:双向理解 → 上下文记忆。
  4. Decoder:单向生成 + 交叉关注 → 生成表示。
  5. 输出:向量 → 词表概率 → 文本。
相关推荐
石工记2 小时前
OpenClaw AI 助手 Docker Compose 一键部署文档(MacBook Pro 2020 专属版,可下载)
人工智能·docker·容器
Lab_AI2 小时前
京博控股集团科研管理的智慧创新之道
人工智能·项目管理·电子实验记录本·仪器管理·科研管理·研发数字化
QBoson2 小时前
量子启发 AI 破解 PDE 难题:QIDNNF 让流体、波动力学模拟更稳更准
人工智能·量子计算·深度神经网络
AaronZZH2 小时前
规范驱动开发(SDD):AI时代的软件工程新范式
人工智能·驱动开发·软件工程
你好helloworld2 小时前
claude code安装部署
人工智能
Oscar的参数2 小时前
在 Windows 上部署 龙虾OpenClaw:基于 WSL2 的详细教程
人工智能·windows·深度学习·ai·语言模型
zhouping@2 小时前
Java学习笔记day04
java·笔记·学习
OpenCSG2 小时前
LTX-2.3:开源AI视频生成的新标杆,一个模型同时生成视频和音频
人工智能·开源·音视频
小超同学你好2 小时前
Transformer 12. LLaMA 架构介绍以及与 Transformer 架构对比
人工智能·语言模型·transformer·llama