大模型学习 (Datawhale_Happy-LLM)笔记6: Encoder-only PLM
Encoder Only PLM 的产生
Google 选择了对 Transformer 中的 Encoder 层进行优化,通过将 Encoder 层进行堆叠,扩大模型参数,结合预训练任务 (MLM, Masked Language Model) 进一步推动了预训练+微调范式的发展。
BERT
-
简述
Encoder-only 的模型代表 BERT(Bidirectional Encoder Representations from Transformers)是由 Google 2018年基于论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》发布的预训练语言模型。从BERT 的命名上揭示了其核心架构设计与预训练机制的底层逻辑。本质是利用多层 Transformer Encoder 对文本进行双向语义建模,将输入序列转化为包含丰富上下文信息的向量表示 (Vector Representation)。 -
架构
BERT 模型整体主要是由 Embedding、Encoder 及 Prediction_heads 组成:-
Tokenizer (分词器)将输入的文本分词后转换为 input_ids (与句子每个 token 对应的索引)作为 BERT model 的输入
-
Embedding(嵌入)
input embedding = token embedding(词元) + segment embedding(段落) + position embedding(位置) -
Encoder (编码器)
Encoder 块中是对叠起来的 N 层 Encoder Layer,BERT 有两种规模的模型,分别是 base 版本(12层 Encoder Layer,768 的隐藏层维度,总参数量 110M),large 版本(24层 Encoder Layer,1024 的隐藏层维度,总参数量 340M)。通过Encoder 编码之后的最顶层 hidden states 最后经 过 prediction_heads 就得到了最后的类别概率,经过 Softmax 计算就可以计算出模型预测的类别。- 每个 Encoder 层包含两个子层:
- 多头自注意力子层(Multi-head Self-Attention):处理上下文关联
- Intermediate 子层(增强特征非线性表达) :BERT 的 Intermediate 层通过 “线性映射 + GELU 激活” 实现特征的非线性变换与维度调整,是模型捕获复杂语义的关键模块。GELU 的平滑性和自适应门控特性,使其比传统激活函数更适配 Transformer 的深层架构,这一设计在原始论文中被验证,并成为后续预训练模型的标准配置之一。BERT 原始论文《BERT: Pre-training of Deep Bidirectional Transformers》中直接采用 GELU,而该激活函数在《Gaussian Error Linear Units (GELU)》论文中被提出,实验证明其在 NLP 任务中效果优于 ReLU、Swish 等函数。GELU 的计算方式为:
GELU(x)
=
0.5
x
(
1
+
t
a
n
h
(
2
π
)
(
x
+
0.044715
x
3
)
)
\text{GELU(x)}=0.5x(1+tanh(\large\sqrt\frac{2}{\pi})(x+0.044715x^3))
GELU(x)=0.5x(1+tanh(π2)(x+0.044715x3))
(*GELU 的随机正则化并非通过显式添加噪声或丢弃操作,而是通过基于概率的连续激活函数,在数学层面实现了以下效果:- 对输入的概率加权激活,抑制噪声特征;
- 平滑的非线性变换,增强模型对输入扰动的鲁棒性;
- 隐式的集成学习效应,减少神经元的共适应。这种机制使 GELU 在 Transformer 等深层架构中成为兼顾表达能力和泛化能力的优选激活函数,尤其在 NLP 任务中表现突出。*)
- 每个 Encoder 层包含两个子层:
-
Prediction_heads(线性层+激活函数)
- prediction_heads 是由线性层(Linear)、激活函数、线性层组成的结构,通过线性变换 + 激活引入非线性,最后一个线性层输出维度与任务类别数匹配,用于将模型编码的特征映射到任务输出(如分类任务的类别概率等 ),把 Transformer 编码器输出转换为特定任务预测结果 。
- 实际中会根据任务调整 prediction heads
- 分类任务(如情感分析):常是 “线性层 + Softmax”,输出维度等于类别数;
- 问答任务(如 SQuAD ):用两个线性层,分别预测答案起始、结束位置;
- 序列标注(如 NER ):线性层 + CRF(可选),输出各 token 标签概率;
- 预训练阶段(如 BERT 的 MLM ):线性层 + 词表映射(还可能共享嵌入权重 )。
-
BERT 预训练任务(MLM + NSP)
1. MLM(Masked Language Model,掩码语言模型)
通过掩盖输入文本中的部分token,迫使模型根据上下文预测被掩盖的词汇,从而学习语义依赖关系和上下文表示。
1.1. 实现机制
- 掩码策略:
在输入序列中随机选择15%的token进行替换,具体规则如下:
- 80%的概率用[MASK]标记替换(如:“我的[MASK]是苹果”);
- 10%的概率用随机词汇替换(如:“我的书本是苹果”);
- 10%的概率保持原词不变(如:“我的苹果是苹果”)。
这种设计避免模型过度依赖[MASK]标记(训练与推理时的差异),同时通过随机替换和原词保留增强模型的鲁棒性。
1.2. 训练目标:
模型需预测被掩盖token的原始词汇,本质是一个多分类问题(预测词表中概率最高的词)。
1.3. 语义学习效果
-
双向语境理解:MLM允许模型同时利用上下文信息预测目标词,例如:
- 输入:“[MASK]喜欢吃苹果” → 模型需结合“喜欢吃苹果”推断出“人”“他”等主语;
- 输入:“她买了[MASK]和香蕉” → 结合“香蕉”推断出“苹果”“橘子”等并列水果。
-
深层语义表征:通过预测任务,模型被迫学习词汇间的语义关联(如同义词、上下位词)和语法结构(如主谓宾关系)。
-
2. NSP(Next Sentence Prediction,下一句预测)
2.1. 核心目标:
判断两个句子是否存在连续上下文关系,学习文本级别的语义连贯性和逻辑关系。2.2. 训练机制
- 样本构造:
- 正例:从同一文档中选取两个连续句子(如A和B,顺序不变);
- 负例:从不同文档中选取两个句子(如A和C,语义不相关)。
- 训练目标:
模型通过输入句子对(A,B/C),输出“是否连续”的二分类结果(是/否)。
3. MLM与NSP的协同作用
任务 | 关注层面 | 对模型的贡献 | 局限性 |
---|---|---|---|
MLM | 词汇级、局部语境 | 学习词向量的语义关联和上下文依赖,提升token级表征精度。 | 仅建模局部信息,难以捕捉长距离语义依赖。 |
NSP | 句子级、全局语篇 | 学习文本的逻辑连贯性和主题一致性,增强段落级理解能力。 | 负例构造简单(随机选句),可能低估模型真实推理能力。 |
RoBERTa 与 ALBERT 的核心改进:参数效率与训练优化
1. RoBERTa(Robustly Optimized BERT Pretraining Approach
RoBERTa 是 BERT 的直接优化版本,主要通过训练策略改进和超参数调整提升性能,核心创新点如下:
1.1 训练优化
- 更大的批量大小:
从 BERT 的 256 样本/批次提升至 8k 样本/批次,通过梯度累积实现高效训练,实验表明大批次训练能学习更稳定的表征。 - 动态掩码策略:
BERT 对每个样本仅应用一次静态掩码(预训练时固定),而 RoBERTa 在每次训练迭代时重新生成掩码,增强模型对不同语境的适应能力。 - 更长的训练时间:
增加训练步数(如从 1M 步到 3M 步),充分利用大规模语料(如 CC-News、OpenWebText 等)。
1.2 任务简化
- 移除 NSP 任务:
实验证明 NSP 对模型性能提升有限,RoBERTa 仅保留 MLM 任务,专注于词汇级和句子级表征学习。 - 优化文本编码:
使用更密集的文本片段(如连续段落而非随机句子对),并引入字节对编码(BPE)处理未登录词。
1.3. 效果验证
- 在 GLUE、SQuAD、RACE 等基准测试中全面超越 BERT,例如:
- SQuAD 2.0 F1 得分提升 3.9%(从 88.5 到 92.4);
- MNLI 匹配准确率提升 2.3%(从 84.6 到 86.9)。
2. ALBERT(A Lite BERT)
ALBERT 聚焦于参数压缩和训练效率,通过创新性架构设计大幅减少参数量,核心改进如下:
2.1 参数共享机制
- 跨层权重共享:
不同于 BERT 每层参数独立,ALBERT 将所有 Transformer 层的权重共享(仅保留输入/输出层差异),参数量从 110M(BERT-Base)降至 12M,减少约 90%。 - 因式分解嵌入层:
将词嵌入维度 ( E ) 与隐藏层维度 ( H ) 解耦(BERT 中 ( E = H = 768 )),ALBERT 采用 ( E = 128 )、( H = 768 ),通过矩阵分解减少嵌入层参数(从 ( V \times H ) 降至 ( V \times E + E \times H ))。
2.2 增强训练稳定性
- 句子顺序预测(SOP)替代 NSP:
NSP 任务因正例(连续句子)与负例(随机句子)区分过于简单,效果有限。ALBERT 改为预测同一文档中两句子的顺序(正例:A→B;负例:B→A),更聚焦语义连贯性。 - 层归一化优化:
将 LayerNorm 移至自注意力机制前(而非残差连接后),提升训练稳定性。
2.3 效果验证
- 参数量对比:
- ALBERT-Base(12M 参数)≈ BERT-Tiny(14M 参数),但性能远超后者;
- ALBERT-Large(18M 参数)在 GLUE 基准上超越 BERT-Large(340M 参数)。
- 计算效率:
因权重共享,前向传播速度提升约 15%,内存占用减少约 30%。
3. RoBERTa 与 ALBERT 的对比
改进维度 | RoBERTa | ALBERT |
---|---|---|
核心目标 | 优化训练策略,提升模型性能。 | 压缩参数,提高训练/推理效率。 |
参数规模 | 与 BERT 相近(如 Base 版 110M)。 | 显著减少(如 Base 版 12M,仅为 BERT 的 10%)。 |
训练数据 | 使用更多、更丰富的语料。 | 与 BERT 相似(如 Wikipedia + BooksCorpus)。 |
任务设计 | 移除 NSP,仅保留 MLM。 | 用 SOP 替代 NSP,增强连贯性建模。 |
权重共享 | 无 | 跨层共享所有 Transformer 参数。 |
应用场景 | 追求极致性能的任务(如问答、推理)。 | 资源受限环境(如移动端、边缘计算)。 |
4. 后续影响与演进
- RoBERTa 奠定了大规模预训练的标准范式,后续模型(如 GPT-3、XLNet)均采用类似的大规模训练策略;
- ALBERT 开创了参数高效预训练的方向,启发了 T5、DeBERTa 等模型在架构压缩上的创新;
- 两者结合:如 ELECTRA 融合了 RoBERTa 的训练策略和 ALBERT 的参数共享思想,实现性能与效率的平衡。
总之,RoBERTa 和 ALBERT 分别从训练优化和参数效率两个维度突破了 BERT 的局限,共同推动了预训练语言模型向更大规模、更高效率发展。
相关论文引用:
Liu, Y., Ott, M., Goyal, N., Du, J., Joshi, M., Chen, D., … & Stoyanov, V. (2019). RoBERTa: A Robustly Optimized BERT Pretraining Approach. arXiv preprint arXiv:1907.11692.
Lan, Z., Chen, M., Goodman, S., Gimpel, K., Sharma, P., & Soricut, R. (2020). ALBERT: A Lite BERT for Self-Supervised Learning of Language Representations. arXiv preprint arXiv:1909.11942.