【精选优质专栏推荐】
- 《AI 技术前沿》—— 紧跟 AI 最新趋势与应用
- 《网络安全新手快速入门(附漏洞挖掘案例)》—— 零基础安全入门必看
- 《BurpSuite 入门教程(附实战图文)》—— 渗透测试必备工具详解
- 《网安渗透工具使用教程(全)》—— 一站式工具手册
- 《CTF 新手入门实战教程》—— 从题目讲解到实战技巧
- 《前后端项目开发(新手必知必会)》—— 实战驱动快速上手
每个专栏均配有案例与图文讲解,循序渐进,适合新手与进阶学习者,欢迎订阅。
文章目录
- 前言
- BERT 的架构与训练
- BERT 的变体
- 总结
前言
本文分为两部分:
- BERT 的架构与训练
- BERT 的变体
BERT 的架构与训练
BERT 是一个仅包含编码器的模型。其架构如下图所示。
BERT 虽然使用了一系列 Transformer 块,但其关键创新在于训练方式。
根据原始论文,BERT 的训练目标是预测输入序列中被掩码的词语。这被称为掩码语言模型(Masked Language Model,MLM)任务。模型的输入是如下格式的 token 序列:
[CLS] <text_1> [SEP] <text_2> [SEP]其中<text_1>和<text_2>是来自两句不同句子的序列。特殊 token[CLS]和[SEP]用于分隔句子。[CLS]token 作为序列开头的占位符,用于学习整个序列的表示。
与常见的大语言模型(LLM)不同,BERT 不是因果模型。它可以看到整个序列,并且任意位置的输出依赖于左右上下文。这使得 BERT 适用于诸如词性标注等自然语言处理任务。模型通过最小化以下损失函数进行训练:
loss = loss_MLM + loss_NSP其中,第一项是掩码语言模型(MLM)任务的损失,第二项是下一句预测(Next Sentence Prediction, NSP)任务的损失。具体如下:
MLM 任务:<text_1>或<text_2>中的任意 token 都可以被掩码,模型需要识别并预测原始 token,可能出现三种情况:
- token 被替换为
[MASK]。模型应识别该特殊 token 并预测原始 token。 - token 被替换为词表中的随机 token。模型应识别该替换。
- token 未发生变化,模型应预测其未变。
NSP 任务:
模型需要预测<text_2>是否为紧跟<text_1>的真实下一句。也就是说,两句来自同一文档且相邻。该任务是二分类任务,使用序列开头的[CLS]token 进行预测。
因此,训练数据不仅包含文本,还包含额外的标签。每个训练样本包含:
- 一段被掩码的 token 序列:
[CLS] <text_1> [SEP] <text_2> [SEP],部分 token 按上述规则替换 - 区段标签(0 或 1),用于区分第一句和第二句
- 布尔标签,指示
<text_2>是否确实跟随<text_1> - 掩码位置列表及其对应的原始 token
这种训练方法使模型能够分析整个序列,并在上下文中理解每个 token。因此,BERT 在文本理解上表现出色,但并非为文本生成而训练。例如,BERT 可以提取文本中相关部分来回答问题,但无法用不同语气改写答案。这种通过 MLM 和 NSP 目标的训练称为预训练,之后模型可以针对特定应用进行微调。
BERT 的变体
BERT 由 𝐿 层堆叠的 Transformer 模块组成。模型的关键超参数包括隐藏维度大小 𝑑 和注意力头数量 ℎ。原始的 BERT base 模型参数为 𝐿 = 12、𝑑 = 768、ℎ = 12;而 BERT large 模型为 𝐿 = 24、𝑑 = 1024、ℎ = 16。
自 BERT 取得成功以来,多个变体相继被提出。最简单的变体是 RoBERTa,它保持与 BERT 相同的架构,但在分词上使用 BPE(Byte-Pair Encoding)而非 WordPiece。RoBERTa 在更大规模的数据集上进行训练,且使用更大的批大小和更多轮数。此外,其训练仅使用 MLM 损失,不包含 NSP 损失。这表明原始 BERT 模型实际上是“训练不足”的;更充分的训练策略与更多数据可以在不增加模型规模的情况下显著提升性能。
ALBERT是一种更快、参数更少的 BERT 变体,它通过两项技术减少模型规模。第一项是因式分解嵌入(factorized embedding):嵌入矩阵先将输入 token 映射为更小维度的嵌入向量,然后再由一个投影矩阵将其映射为较大维度的最终嵌入供 Transformer 使用。可以理解为:
这里,𝑁 是投影矩阵,𝑀′ 是维度较小的嵌入矩阵,其维度大小为 𝑘。当输入一个 token 时,嵌入矩阵作为查找表返回对应的嵌入向量。模型仍然在较大的维度 𝑑(其中 𝑑 > 𝑘)上运行,但由于添加了投影矩阵,总参数量变为:
𝑑·𝑘 + 𝑘·𝑁 = 𝑘·(𝑑 + 𝑁)
当 𝑘 足够小时,这一参数量相比完整嵌入矩阵 𝑑·𝑁 要小得多。
第二项技术是跨层参数共享(cross-layer parameter sharing)。在 BERT 中,堆叠的 Transformer 模块虽然结构相同,但参数各不相同;而 ALBERT 则强制它们不仅结构一样,而且共享参数。本质上,模型将输入序列在同一个 Transformer 模块中重复处理 𝐿 次,而不是依次通过 𝐿 个不同模块。这样能够显著减少模型复杂度,同时性能仅有轻微下降。
DistilBERT 保持了与 BERT 相同的架构,但通过知识蒸馏进行训练。首先训练一个较大的教师模型达到较高性能,然后训练一个较小的学生模型去模仿教师的输出。DistilBERT 论文指出,该学生模型能以仅 60% 的参数达到教师模型 97% 的性能。
在 DistilBERT 中,学生模型与教师模型拥有相同的隐藏维度和注意力头数,但学生模型的 Transformer 层数减半。学生模型通过匹配自身各层输出与教师模型对应层输出来学习。其损失函数包含三部分:
1.语言模型损失(MLM loss):即 BERT 使用的原始掩码语言模型损失
2.蒸馏损失(distillation loss):学生模型与教师模型 softmax 输出之间的 KL 散度
3.余弦距离损失(cosine distance loss):学生模型每一层的隐状态与教师模型对应层隐状态之间的余弦距离
这三类损失在蒸馏中提供额外指导,使学生模型的性能优于直接独立训练的小模型。
总结
本文介绍了 BERT 的架构与训练方式,包括 MLM 与 NSP 两大训练目标。随后还介绍了几个重要的变体:
- RoBERTa:采用改进训练策略的 BERT
- ALBERT:通过参数因式分解与跨层共享减少模型规模
- DistilBERT:通过知识蒸馏获得更小但高效的模型
这些模型在性能、大小与计算效率之间提供了不同的权衡,适用于各种 NLP 应用场景。