【人工智能99问】BERT的原理什么?(23/99)

发布于:2025-08-14 ⋅ 阅读:(15) ⋅ 点赞:(0)

BERT详解

一、概述

BERT(Bidirectional Encoder Representations from Transformers) 是由Google在2018年提出的预训练语言模型,其核心思想是通过双向Transformer编码器学习通用语言表示,并通过“预训练+微调”模式适配下游自然语言处理(NLP)任务。BERT的出现彻底改变了NLP领域的范式,推动了“预训练模型主导下游任务”的趋势,大幅提升了文本分类、问答、命名实体识别等任务的性能。

二、BERT的结构

BERT的结构基于Transformer的Encoder部分,整体可分为输入表示层多层Transformer编码器两部分。

2.1 整体架构

BERT的基础结构是堆叠的Transformer Encoder层,具体层数和隐藏层维度因版本而异:

  • BERT-Base:12层Transformer Encoder,隐藏层维度768,12个注意力头,总参数约110M。
  • BERT-Large:24层Transformer Encoder,隐藏层维度1024,16个注意力头,总参数约340M。

所有Transformer层共享输入表示的维度,且每层包含相同的核心组件。

2.2 输入表示层

BERT的输入需转换为三维向量(Token Embedding + Segment Embedding + Position Embedding),以同时编码词汇、句子边界和位置信息。

(1)Token Embedding
  • 输入文本首先通过分词工具(如WordPiece)拆分为子词(Subword)Token,例如“embeddings”可能拆分为“em”+“#bed”+“dings”。
  • 每个Token映射到一个固定维度的向量(如768维),构成Token Embedding。
(2)Segment Embedding
  • 用于区分输入中的不同句子(如句子对任务),用两个标记(0和1)分别表示第一句和第二句的Token,对应不同的嵌入向量。
  • 若输入为单句,所有Token的Segment Embedding均为0。
(3)Position Embedding
  • 由于Transformer是无顺序的,需通过位置嵌入编码Token的顺序信息。BERT采用可学习的位置嵌入(而非Transformer原论文的正弦余弦函数),支持最长512个Token的位置编码。
(4)特殊符号
  • [CLS]:位于输入开头的特殊Token,用于聚合整个序列的语义(如分类任务的输出)。
  • [SEP]:用于分隔句子对的特殊Token(如“句子A [SEP] 句子B”)。

2.3 Transformer Encoder层

每层Transformer Encoder包含两个核心模块,均采用残差连接层归一化

  1. 多头自注意力(Multi-Head Self-Attention)
    • 将输入向量分为多个子空间(“头”),并行计算注意力,捕捉不同维度的语义关联(如语法、语义依赖)。
    • 注意力公式: A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V,其中 Q , K , V Q,K,V Q,K,V分别为查询、键、值矩阵。
  2. 前馈神经网络(Feed-Forward Network)
    • 对每个Token的向量进行非线性变换,公式: F F N ( x ) = m a x ( 0 , x W 1 + b 1 ) W 2 + b 2 FFN(x) = max(0, xW_1 + b_1)W_2 + b_2 FFN(x)=max(0,xW1+b1)W2+b2(含ReLU激活)。

三、BERT的核心原理

BERT的成功依赖于“预训练+微调”的两阶段模式,通过预训练学习通用语言知识,再通过微调适配具体任务。

3.1 预训练阶段:学习通用语言表示

预训练通过两个无监督任务让模型学习双向上下文信息,训练数据为BooksCorpus(约8亿词)和Wikipedia(约25亿词)。

(1)Masked Language Model(MLM)
  • 随机掩盖输入中15%的Token,让模型预测被掩盖的Token:
    • 80%概率用[MASK]替换(如“我爱[MASK]”→预测“中国”)。
    • 10%概率用随机Token替换(如“我爱[MASK]”→改为“我爱苹果”,模型需识别“苹果”是错误的)。
    • 10%概率不替换(保持原Token,避免模型依赖[MASK]符号)。
  • 作用:迫使模型学习双向上下文(需结合前后文预测Token),区别于单向模型(如GPT仅从左到右建模)。
(2)Next Sentence Prediction(NSP)
  • 输入句子对(A, B),50%概率B是A的真实下一句,50%概率B是随机句子,模型需判断B是否为A的下一句。
  • 作用:让模型学习句子间的逻辑关系(如因果、递进),支持问答、自然语言推理等任务。

3.2 微调阶段:适配下游任务

预训练完成后,冻结大部分参数,仅调整输出层以适配具体任务,无需重新训练整个模型:

  • 分类任务(如情感分析):用[CLS]的输出向量接全连接层预测类别。
  • 序列标注任务(如NER):用每个Token的输出向量接分类层预测标签(如“人名”“地名”)。
  • 句子对任务(如问答):用[SEP]分隔问题和段落,通过Token级输出定位答案区间。

四、BERT的使用场景

BERT凭借强大的双向语义理解能力,广泛应用于各类NLP任务:

任务类型 具体场景举例 BERT的作用
文本分类 情感分析、垃圾邮件检测、新闻分类 通过[CLS]向量捕捉整体语义,输出分类概率
序列标注 命名实体识别(NER)、词性标注(POS) 为每个Token输出标签,捕捉局部上下文依赖
问答系统 SQuAD数据集、智能客服问答 定位段落中与问题匹配的答案区间(start/end)
自然语言推理 判断句子间关系(蕴含/矛盾/中立) 学习句子对的逻辑关联,输出推理结果
文本生成辅助 摘要生成、机器翻译 提供上下文语义表示,提升生成内容的准确性
语义相似度计算 句子查重、推荐系统中的文本匹配 编码句子向量,通过余弦相似度计算相似性

五、BERT的优缺点

5.1 优点

  1. 双向上下文理解:MLM任务让模型同时关注左右上下文,优于单向模型(如GPT)或半双向模型(如ELMo)。
  2. 强迁移能力:预训练+微调模式大幅降低下游任务的标注数据需求,小样本场景下性能显著提升。
  3. 统一架构适配多任务:无需为不同任务设计专用结构,仅调整输出层即可,简化工程落地。
  4. 特征表示鲁棒性:通过多层Transformer和残差连接,能捕捉从局部到全局的多层次语义。

5.2 缺点

  1. 训练成本高:预训练需海量计算资源(BERT-Large训练需数千GPU小时),对中小团队不友好。
  2. 输入长度限制:最大输入长度为512 Token,长文本(如文档级任务)需截断或分段处理,可能丢失上下文。
  3. NSP任务争议:后续研究(如RoBERTa)发现NSP任务对性能提升有限,甚至可能引入噪声。
  4. 推理速度较慢:多层Transformer的自注意力计算复杂度为 O ( n 2 ) O(n^2) O(n2)(n为Token数),实时性要求高的场景需优化。

六、BERT的训练技巧

为提升BERT的训练效率和性能,实践中常用以下技巧:

  1. 学习率调度:采用“线性预热+线性衰减”策略(如预热10%步数,之后线性下降),避免训练初期参数震荡。
  2. 批次与硬件优化
    • 大批次训练(如BERT-Base用256序列/批次)需配合梯度累积(Gradient Accumulation)。
    • 使用混合精度训练(FP16/FP32)降低显存占用,加速训练。
  3. 正则化
    • 对注意力权重和前馈网络加入Dropout(概率0.1),防止过拟合。
    • 权重初始化采用Xavier初始化,稳定训练过程。
  4. 数据增强:预训练阶段通过同义词替换、随机插入/删除Token等方式扩充数据多样性。
  5. 长文本处理:对超512 Token的文本采用滑动窗口截断,或保留首尾关键片段。

七、BERT的关键改进与变体

BERT的成功催生了大量变体,针对其效率、性能或适用场景进行优化:

变体模型 核心改进 优势
RoBERTa 取消NSP任务,增大训练数据量和步数,动态Mask 性能优于BERT,验证了NSP的非必要性
ALBERT 跨层参数共享,因式分解词嵌入,简化NSP为SOP 参数减少75%,训练速度提升,适合资源受限场景
SpanBERT 预测连续片段(Span)而非单个Token 增强对短语和实体的理解,提升NER、问答性能
ELECTRA 用“替换检测”任务(RTD)替代MLM,生成对抗训练 训练效率提升4倍,小模型性能接近BERT-Large
BERT-wwm 全词Mask(对完整词的所有子词同时Mask) 增强对完整词汇的语义捕捉,中文任务性能提升
DistilBERT 知识蒸馏压缩BERT,保留60%参数 推理速度提升2倍,性能损失仅1-2%

八、实例说明:BERT处理句子对分类任务

以“情感分析(判断句子对是否表达相同情感)”为例,说明BERT的结构和原理:

步骤1:输入处理

  • 输入句子对:“我喜欢这部电影 [SEP] 这部电影很精彩”(标签:相同情感)。
  • 分词后序列:[CLS] 我 喜 欢 这 部 电 影 [SEP] 这 部 电 影 很 精 彩 [SEP]
  • 生成嵌入向量:
    • Token Embedding:每个子词的预训练向量。
    • Segment Embedding:第一句(含[CLS]和第一个[SEP])为0,第二句为1。
    • Position Embedding:按Token位置(0到n-1)添加可学习位置向量。
    • 最终输入向量 = Token Embedding + Segment Embedding + Position Embedding。

步骤2:Transformer Encoder编码

输入向量经过12层Transformer Encoder(BERT-Base):

  • 每层通过多头自注意力捕捉Token间关联(如“喜欢”与“精彩”的语义呼应)。
  • 前馈网络对每个Token的向量进行非线性变换,增强特征表达。
  • 残差连接和层归一化确保训练稳定,避免梯度消失。

步骤3:预训练任务的作用

  • MLM预训练:若训练时“精彩”被Mask,模型需结合“喜欢”“电影”等上下文预测“精彩”,学习正向情感关联。
  • NSP预训练:模型学习到“这部电影很精彩”是“我喜欢这部电影”的合理后续,强化句子对的逻辑一致性。

步骤4:微调输出

  • [CLS]的最终输出向量(聚合了整个句子对的语义)。
  • 接全连接层和Softmax,输出“相同情感”或“不同情感”的概率。
  • 通过标注数据微调全连接层参数,保留预训练的Transformer参数,快速适配任务。

九、总结

BERT通过双向Transformer和创新的预训练任务,奠定了现代预训练语言模型的基础。尽管存在训练成本高、长文本处理受限等问题,但其“预训练+微调”模式已成为NLP的标准范式。后续变体(如RoBERTa、ELECTRA)进一步优化了效率和性能,推动NLP技术在实际场景中广泛落地(如智能客服、内容审核、机器翻译等)。理解BERT的结构和原理,对掌握后续预训练模型的演进至关重要。


网站公告

今日签到

点亮在社区的每一天
去签到