预训练模型详解
一、主流预训练模型对比
1.1 模型特性总览
| 模型 |
核心改进 |
参数量 |
中文支持 |
竞赛推荐度 |
| BERT |
双向Transformer编码器 |
Base: 110M / Large: 340M |
bert-base-chinese |
基线首选 |
| RoBERTa |
动态Mask + 更大语料 + 去NSP |
同BERT |
roberta-wwm-ext |
强于BERT |
| DeBERTa V2/V3 |
注意力解耦 + 增强型Mask解码器 |
Base/Large/XLarge |
deberta-v3-base |
天花板最高 |
| MacBERT |
MLM as correction + 全词Mask |
同BERT |
macbert-base |
中文优化 |
| ERNIE |
知识增强(实体/短语级Mask) |
Base: 110M |
ernie-3.0-base |
中文知识密集 |
| NEZHA |
相对位置编码 + 全词Mask |
同BERT |
nezha-base-wwm |
中文长文本 |
1.2 选型决策树
是否中文任务?
├── 是 → 是否需要知识增强?
│ ├── 是 → ERNIE / MacBERT
│ └── 否 → RoBERTa-wwm-ext / DeBERTa-v3
└── 否 → 是否追求极致性能?
├── 是 → DeBERTa V3 XLarge
└── 否 → RoBERTa Base → BERT Base
二、BERT架构详解
2.1 核心组件
| 组件 |
说明 |
| Input Embedding |
Token Embedding + Segment Embedding + Position Embedding |
| Transformer Encoder |
Multi-Head Self-Attention + FFN + LayerNorm + Residual |
| [CLS] Token |
句子级表征,用于分类任务 |
| [SEP] Token |
句子分隔符 |
| [MASK] Token |
预训练时的掩码标记 |
2.2 预训练任务
| 任务 |
说明 |
BERT使用 |
RoBERTa改进 |
| MLM |
随机遮蔽15%的Token并预测 |
静态Mask |
动态Mask |
| NSP |
判断两个句子是否相邻 |
使用 |
弃用(无收益) |
| SOP |
判断两个句子顺序是否被交换 |
不使用 |
ALBERT使用 |
三、DeBERTa核心创新
3.1 注意力解耦(Disentangled Attention)
| 维度 |
说明 |
| 传统注意力 |
内容-内容交互:Q_c * K_c^T |
| 解耦注意力 |
三重交互:内容-内容 + 内容-位置 + 位置-内容 |
| 位置编码 |
相对位置编码,而非绝对位置编码 |
| 优势 |
更好地捕捉Token间的相对位置关系,对长距离依赖建模更强 |
3.2 增强型Mask解码器(EMD)
| 维度 |
说明 |
| 问题背景 |
解耦注意力在输出层缺少绝对位置信息 |
| 解决方案 |
在Softmax之前注入绝对位置信息 |
| 效果 |
弥补解耦注意力对绝对位置的忽视 |
3.3 DeBERTa V3改进
| 维度 |
说明 |
| RTD(Replaced Token Detection) |
替代MLM,检测哪些Token被替换 |
| Generator-Discriminator |
生成器替换Token,判别器检测替换 |
| 共享Embedding |
生成器和判别器共享Token Embedding |
| 优势 |
比MLM更高效的预训练信号 |
四、RoBERTa改进要点
| 改进 |
说明 |
效果 |
| 动态Mask |
每个Epoch重新生成Mask模式 |
比静态Mask更优 |
| 去NSP |
去掉Next Sentence Prediction任务 |
NSP无收益甚至有害 |
| 更大语料 |
使用160GB文本语料 |
更强的语言理解能力 |
| 更长训练 |
更多的训练步数和更大的Batch Size |
更充分的预训练 |
| 全词Mask(wwm) |
中文场景下遮蔽完整词而非单字 |
中文任务提升显著 |
| BPE分词 |
Byte-level BPE,词表更大 |
覆盖更多Unicode字符 |
Byte-level BPE详解
| 维度 |
说明 |
| 传统BPE |
基于字符级别构建词表,处理未知词能力有限 |
| Byte-level BPE |
以字节为基本单位构建词表,天然覆盖所有Unicode字符 |
| 词表大小 |
基础词表仅256个字节,通过合并操作扩展到50K+ |
| 优势 |
无需未知词标记,任何语言的文本都能编码 |
| RoBERTa应用 |
RoBERTa使用Byte-level BPE,词表大小50265 |
五、中文预训练模型对比
5.1 MacBERT
| 维度 |
说明 |
| 核心改进 |
用同义词替换[MASK],而非直接用[MASK]标记 |
| MLM as Correction |
预训练任务变为"纠错"而非"填空",更接近Fine-tuning场景 |
| 全词Mask |
中文场景下遮蔽完整词 |
| Ngram Mask |
按Ngram概率遮蔽(1-gram: 80%, 2-gram: 15%, 3-gram: 5%) |
| 优势 |
消除预训练与微调之间的Mask差异 |
5.2 ERNIE
| 维度 |
说明 |
| 知识增强 |
实体级Mask + 短语级Mask,而非Token级Mask |
| 多语言版本 |
ERNIE 2.0 / ERNIE 3.0 |
| 持续学习框架 |
通过多任务持续学习框架增量注入知识 |
| 适用场景 |
知识密集型任务(如实体识别、关系抽取) |
5.3 NEZHA
| 维度 |
说明 |
| 相对位置编码 |
使用相对位置编码替代绝对位置编码 |
| 全词Mask |
中文场景下遮蔽完整词 |
| 优势 |
对长文本和位置敏感任务更优 |
六、预训练模型微调范式
6.1 标准微调流程
1. 加载预训练权重
2. 添加任务特定的分类头
3. 冻结/解冻策略选择
4. 设置分层学习率
5. 训练并保存最优权重
6.2 冻结策略
| 策略 |
说明 |
适用场景 |
| 全参数微调 |
所有参数参与训练 |
数据充足时 |
| 冻结底层 |
只训练顶层和分类头 |
数据较少时 |
| 渐进解冻 |
从顶到底逐步解冻 |
中等数据量 |
| Adapter |
插入小参数Adapter模块 |
多任务场景 |
6.3 分层学习率设置
| 层 |
学习率 |
说明 |
| Embedding层 |
1e-5 ~ 2e-5 |
预训练知识丰富,少动 |
| Transformer层 |
2e-5 ~ 5e-5 |
逐层递增 |
| 分类头 |
1e-4 ~ 5e-4 |
随机初始化,需快速学习 |
七、模型规模与性能权衡
| 模型规模 |
参数量 |
推理速度 |
显存需求 |
性能天花板 |
| Base |
~110M |
快 |
低 |
中等 |
| Large |
~340M |
中 |
中 |
较高 |
| XLarge |
~900M |
慢 |
高 |
最高 |
| 多模型融合 |
N倍 |
N倍慢 |
需进程隔离 |
最高 |
实战建议
| 维度 |
说明 |
| 起步阶段 |
用Base模型快速验证思路,确认数据管线无误 |
| 中期阶段 |
切换Large模型,配合对抗训练和混合池化 |
| 冲刺阶段 |
使用XLarge + 多折 + 多模型融合 |
| Code Submission |
考虑模型蒸馏或Self-Distillation压缩模型 |
八、其他重要预训练模型
ELECTRA
| 维度 |
说明 |
| 核心思想 |
生成器替换部分Token,判别器检测哪些Token被替换(RTD) |
| 与BERT区别 |
BERT只学习被Mask的15%Token,ELECTRA学习全部Token |
| 参数效率 |
在相同计算量下,ELECTRA Small超越BERT Small |
| 竞赛应用 |
适合计算资源有限时,同等参数量下效果更好 |
ALBERT
| 维度 |
说明 |
| 核心改进 |
跨层参数共享 + 嵌入分解,大幅减少参数量 |
| 参数量 |
ALBERT-xxLarge仅235M参数,但效果接近甚至超过BERT-Large |
| SOP任务 |
用Sentence Order Prediction替代NSP |
| 竞赛应用 |
显存受限时可选,但推理速度不比BERT快(层数未减少) |
XLNet
| 维度 |
说明 |
| 核心改进 |
排列语言模型(PLM),自回归方式学习双向上下文 |
| 相对位置编码 |
使用Transformer-XL的相对位置编码和片段循环机制 |
| 与BERT区别 |
BERT的[MASK]标记在微调时不存在(预训练-微调差异),XLNet无此问题 |
| 竞赛应用 |
长文本任务中有优势,但训练资源消耗大 |
| 维度 |
说明 |
| 核心改进 |
稀疏注意力机制,支持4096+长度输入 |
| Longformer |
滑动窗口注意力 + 全局注意力(关键Token) |
| BigBird |
随机注意力 + 滑动窗口 + 全局注意力 |
| 竞赛应用 |
长文档分类、长文本NER等超过512 Token限制的任务 |
九、参数高效微调(PEFT)
LoRA(Low-Rank Adaptation)
| 维度 |
说明 |
| 核心思想 |
冻结原始权重,在Attention层旁路添加低秩矩阵A和B |
| 公式 |
h = Wx + BAx,其中B∈R^(d×r),A∈R^(r×d),r远小于d |
| 秩r |
通常4~16,越大表达能力越强但参数越多 |
| 参数量 |
仅增加0.1%~1%参数即可达到全参数微调效果 |
| 竞赛应用 |
多任务场景下为每个任务训练一个LoRA,推理时切换 |
| 实现 |
peft.LoraConfig + get_peft_model() |
P-Tuning / Prefix Tuning
| 方法 |
核心思想 |
可训练参数 |
| P-Tuning |
在输入前添加可学习的连续Prompt向量 |
Prompt向量参数 |
| Prefix Tuning |
在每层Attention的Key/Value前添加可学习前缀 |
前缀向量参数 |
| Prompt Tuning |
仅在输入Embedding层添加可学习Prompt |
最少参数 |
| P-Tuning v2 |
每层都添加可学习Prompt,效果接近全参数微调 |
适中 |
Adapter
| 维度 |
说明 |
| 核心思想 |
在Transformer层中插入小型瓶颈结构(Down→ReLU→Up) |
| 参数量 |
仅增加2%~5%参数 |
| 优势 |
多任务场景下每个任务只训练一个Adapter,共享主模型 |
| 劣势 |
增加推理延迟(额外前向传播) |
PEFT方法选择
| 场景 |
推荐方法 |
理由 |
| 显存不足 |
LoRA |
参数最少,无推理延迟 |
| 多任务切换 |
Adapter / LoRA |
每任务独立参数,共享主模型 |
| 追求极致性能 |
全参数微调 |
表达能力最强 |
| 快速实验 |
Prompt Tuning |
最少参数,最快训练 |
十、领域自适应预训练(DAPT)
| 维度 |
说明 |
| 核心思想 |
在目标领域的无标注语料上继续预训练通用模型 |
| 适用场景 |
医疗、法律、金融等特定领域,通用模型表现差时 |
| 语料要求 |
至少需要数GB级别的领域语料,太少容易过拟合 |
| 训练方式 |
继续MLM任务,学习率设为1e-5~5e-5,训练1~3个epoch |
| 与任务微调关系 |
DAPT → Task Fine-tuning,两阶段训练 |
| 竞赛经验 |
医疗NER等强领域任务中,DAPT可带来1~3个百分点的提升 |
DAPT实战流程
1. 收集领域无标注语料(如医疗文本、法律文书)
2. 加载通用预训练模型(如bert-base-chinese)
3. 在领域语料上继续MLM预训练(1~3 epoch, lr=1e-5)
4. 保存领域预训练模型
5. 在任务数据上微调(标准流程)