当前位置: 首页 > news >正文

【学习笔记】3.1 Encoder-only PLM

参考资料:https://github.com/datawhalechina/happy-llm 

3.1.1 BERT

BERT(Bidirectional Encoder Representations from Transformers)是由 Google 团队在 2018 年发布的预训练语言模型,标志着预训练+微调范式在自然语言处理(NLP)领域的广泛应用。BERT 在多个 NLP 任务上取得了 SOTA(State Of The Art)性能,推动了预训练模型的发展,直到 LLM(Large Language Models)的出现才逐渐被取代。

BERT 继承了 Transformer 的架构,并在此基础上进行了优化,同时引入了两个创新的预训练任务(MLM 和 NSP),以更好地捕捉双向语义关系。

(1)思想沿承

BERT 的核心思想包括:

  1. Transformer 架构

    • BERT 基于 Transformer 的 Encoder 部分,通过堆叠多层 Encoder Layer 来扩大模型参数,提升模型性能。

  2. 预训练+微调范式

    • BERT 采用了预训练+微调的模式,先在海量无监督语料上进行预训练,再针对下游任务进行微调。

(2)模型架构——Encoder Only

BERT 的模型架构主要由以下部分组成:

  1. Embedding 层

    • 将输入的 token 索引映射为嵌入向量。

  2. 位置编码(Positional Encoding)

    • 使用可训练的相对位置编码,而不是 Transformer 的正余弦位置编码。

  3. Encoder

    • 由多层 Encoder Layer 组成,每层包含多头自注意力和前馈神经网络。

  4. 分类头(Prediction Heads)

    • 用于将 Encoder 的输出转换为特定任务的输出,例如分类任务的类别概率。

BERT 的模型架构如下:

  • 输入文本序列经过分词器(tokenizer)转化为 input_ids

  • input_ids 进入 Embedding 层,转化为特定维度的 hidden_states

  • hidden_states 经过 Encoder 块处理。

  • 最终的 hidden_states 通过分类头(prediction_heads)得到任务输出。

BERT 有两种规模的模型:

  • BERT-Base:12 层 Encoder Layer,768 维隐藏层,总参数量 110M。

  • BERT-Large:24 层 Encoder Layer,1024 维隐藏层,总参数量 340M。

(3)预训练任务——MLM + NSP

BERT 的创新之处在于其提出的两个预训练任务:

  1. 掩码语言模型(MLM,Masked Language Model)

    • 随机遮蔽部分 token,要求模型根据上下文预测被遮蔽的 token。

    • 通过这种方式,模型可以学习双向语义关系。

    • 在预训练时,15% 的 token 被随机选择用于遮蔽,其中:

      • 80% 的概率被遮蔽为 <MASK>

      • 10% 的概率被替换为任意一个 token。

      • 10% 的概率保持不变。

    • 这种策略消除了预训练和微调之间的不一致性,并迫使模型学习上下文信息。

  2. 下一句预测(NSP,Next Sentence Prediction)

    • 判断两个句子是否是连续的上下文。

    • 通过这种方式,模型可以学习句子之间的关系,适配句级 NLU 任务。

    • 正样本是连续的句子对,负样本是随机打乱的句子对。

BERT 的预训练使用了 3.3B token 的语料,包括 800M 的 BooksCorpus 和 2500M 的英文维基百科语料。训练时,BERT 使用了 16 块 TPU(BERT-Base)和 64 块 TPU(BERT-Large),训练了 4 天。

(4)下游任务微调

BERT 的预训练-微调范式使得模型能够高效地迁移到各种下游任务:

  1. 输入格式

    • 每个输入文本序列的首部加入特殊 token <CLS>,用于表示整句的状态。

  2. 微调策略

    • 在预训练模型的基础上,使用少量全监督数据进行微调。

    • 对于不同任务,可以修改分类头(prediction_heads)以适配任务需求。

    • 例如,文本分类任务可以直接使用 <CLS> 对应的特征向量进行分类。

BERT 在多个 NLP 任务上取得了 SOTA 性能,成为 NLU 领域的霸主。即使在 LLM 时代,BERT 仍然在某些特定任务上表现出色,尤其是在标注数据丰富且强调高吞吐的任务中。

3.1.2 RoBERTa

RoBERTa 是 Facebook 发布的一个优化版的 BERT 模型,主要在以下几个方面进行了优化:

(1)去掉 NSP 预训练任务

  • 背景:NSP(Next Sentence Prediction)任务被认为过于简单,可能对下游任务微调时没有明显益处,甚至可能带来负面效果。

  • 实验:RoBERTa 设置了四个实验组,结果表明去掉 NSP 任务的组(特别是单文档的 MLM 组)在下游任务上表现更好。

  • 改进:RoBERTa 去掉了 NSP,只使用 MLM(Masked Language Model)任务。

  • 动态遮蔽:RoBERTa 将 Mask 操作放到了训练阶段,即动态遮蔽策略,使每个 Epoch 的训练数据 Mask 位置不一致,更高效且易于实现。

(2)更大规模的预训练数据和预训练步长

  • 数据规模:RoBERTa 使用了 160GB 的无监督语料,包括 BookCorpus、英文维基百科、CC-NEWS、OPENWEBTEXT 和 STORIES,是 BERT 的 10 倍。

  • 训练策略

    • 使用更大的 batch size(8K,对比 BERT 的 256)。

    • 在 8K 的 batch size 下训练 31K Step,总训练 token 数与 BERT 一样是 3.3B,但模型性能更好。

    • 一共训练了 500K Step(约合 66 个 Epoch)。

    • 全部在 512 长度上进行训练,不再采用 BERT 的分阶段训练策略。

  • 算力需求:训练一个 RoBERTa,Meta 使用了 1024 块 V100(32GB 显存)训练了一天。

(3)更大的 BPE 词表

  • 背景:BERT 原始的 BPE 词表大小为 30K。

  • 改进:RoBERTa 选择了 50K 大小的词表来优化模型的编码能力,提升模型对子词的处理能力。

RoBERTa 的影响

  • 性能提升:通过上述优化,RoBERTa 在多个下游任务上取得了 SOTA 性能,一度成为 BERT 系模型中最热门的预训练模型。

  • 预训练的重要性:RoBERTa 的成功证明了更大规模的预训练数据、更长的训练步长和更大的词表大小的重要性。

  • 对后续模型的影响:这些优化策略为后续的 LLM(Large Language Models)的发展奠定了基础。

3.1.3 ALBERT

ALBERT(A Lite BERT)是基于 BERT 架构进行优化的模型,旨在通过减小模型参数量的同时保持甚至提升模型性能。ALBERT 通过优化模型结构和改进预训练任务,成功地以更小的参数量实现了超越 BERT 的性能。虽然 ALBERT 的一些改进思想没有被广泛采用,但其方法和新预训练任务 SOP 仍对 NLP 领域具有重要的参考意义。

ALBERT 的主要优化策略包括以下几个方面:

(1)优化一:将 Embedding 参数进行分解

BERT 等预训练模型具有庞大的参数量,BERT-large 拥有 24 层 Encoder Layer,1024 维隐藏层,总参数量达 340M。其中,Embedding 层的参数矩阵维度为 V×H,其中 V 为词表大小 30K,H 为隐藏层大小 768,导致 Embedding 层参数达到 23M。当隐藏层维度增加到 2048 时,Embedding 层参数会膨胀到 61M,极大增加了模型的计算开销。

ALBERT 对 Embedding 层的参数矩阵进行了分解,让 Embedding 层的输出维度和隐藏层维度解绑。具体方法是在 Embedding 层后面加入一个线性矩阵进行维度变换。ALBERT 设置 Embedding 层的输出维度为 128,然后通过一个 128×768 的线性矩阵将 Embedding 层的输出升维到隐藏层大小。这样,Embedding 层的参数从 V×H 降低到 V×E+E×H,当 E 远小于 H 时,该方法对 Embedding 层参数的优化效果显著。

(2)优化二:跨层进行参数共享

通过对 BERT 的参数进行分析,ALBERT 发现各个 Encoder 层的参数高度一致。因此,ALBERT 提出让各个 Encoder 层共享模型参数,以减少模型的参数量。

在具体实现上,ALBERT 仅初始化了一个 Encoder 层。在计算过程中,虽然仍然会进行 24 次计算,但每一次计算都是经过这一个 Encoder 层。这样,虽然是 24 层 Encoder 计算的模型,但只有一层 Encoder 参数,从而大大降低了模型参数量。ALBERT 通过实验证明,相较于 334M 参数量的 BERT,同样是 24 层 Encoder 但将隐藏层维度设为 2048 的 ALBERT(xlarge 版本)仅有 59M 参数量,但在具体效果上还优于 BERT。

然而,上述优化虽然显著减小了模型参数量并提高了模型效果,但也存在明显不足。尽管 ALBERT 的参数量远小于 BERT,但训练效率仅略微优于 BERT,因为在模型设置中,虽然各层共享权重,但计算时仍需通过 24 次 Encoder Layer 的计算,导致训练和推理速度较 BERT 更慢。这也是 ALBERT 最终未能取代 BERT 的一个重要原因。

(3)优化三:提出 SOP 预训练任务

类似于 RoBERTa,ALBERT 也认为 NSP(Next Sentence Prediction)任务过于简单,无法显著提升模型效果。但与 RoBERTa 直接去掉 NSP 不同,ALBERT 选择改进 NSP,增加其难度,以优化模型的预训练。

在传统的 NSP 任务中,正例由两个连续句子组成,负例则是从任意两篇文档中抽取出的句对,模型较容易判断正负例,无法很好地学习深度语义。ALBERT 提出的 SOP(Sentence Order Prediction)任务改进了这一点。SOP 任务的正例同样由两个连续句子组成,但负例是将这两个句子的顺序反过来。也就是说,模型不仅要拟合两个句子之间的关系,更要学习其顺序关系,从而大大提升了预训练的难度。

例如:

  • 输入:

    • Sentence A:I love you.

    • Sentence B: Because you are wonderful.

  • 输出:1(正样本)

  • 输入:

    • Sentence A:Because you are wonderful.

    • Sentence B: I love you.

  • 输出:0(负样本)

ALBERT 通过实验证明,SOP 预训练任务对模型效果有显著提升。使用 MLM + SOP 预训练的模型效果优于仅使用 MLM 预训练的模型,更优于使用 MLM + NSP 预训练的模型。

通过上述三点优化,ALBERT 成功地以更小的参数量实现了更强的性能。尽管其架构带来的训练和推理效率降低限制了模型的进一步发展,但打造更宽模型的思路仍为众多更强大的模型提供了参考价值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/257567.html

相关文章:

  • react快速开始项目模板
  • MyBatis 的一级缓存导致的数据一致性问题分析
  • PFEIFFER普发ASM340检漏器维护保养手侧
  • 考研408《计算机组成原理》复习笔记,第三章(2)——存储器的ROM、RAM(DRAM和SRAM)、磁盘硬盘
  • 家电 EPS 内衬,重庆制造如何保障家电安全?​
  • 一站式了解RocketMQ如何实现顺序消息
  • Appium+python自动化(三十二)- PageObject+unittest
  • 树莓派超全系列教程文档--(66)rpicam-apps可用选项介绍之视频选项
  • 区块链大讲堂 | 分布式隐私计算友好的零知识证明协议
  • 举出一个异步接口测试的例子
  • 解锁数据潜能——亮数据Web数据集,精准、全面、即时
  • 阿里云获取DASHSCOPE_API_KEY教程,以及配置DASHSCOPE_API_KEY环境变量
  • 【设计模式精讲 Day 12】代理模式(Proxy Pattern)
  • 单片机测ntc热敏电阻的几种方法(软件)
  • 【C++】第十二节——详解list(上)—(list的介绍和使用、模拟实现)
  • 在Neo4j中高效处理字符串数组:完整指南与实践
  • vue | vue-macros 插件升级以及配置
  • Flink SQL解析工具类实现:从SQL到数据血缘的完整解析
  • 6.23 deque | 优先队列_堆排序 | 博弈论
  • Python 数据分析与可视化 Day 5 - 数据可视化入门(Matplotlib Seaborn)
  • 基于springboot+uniapp的“川味游”app的设计与实现7000字论文
  • go channel用法
  • 微算法科技(NASDAQ:MLGO)研发可信共识算法TCA,解决区块链微服务中的数据一致性与安全挑战
  • 拼团系统多层限流架构详解
  • 针对我的简历模拟面试
  • 采集MFC软件的数据方法记录
  • Flutter开发中记录一个非常好用的图片缓存清理的插件
  • HTML语义化标签
  • Unity编辑器扩展:UI绑定复制工具
  • AI绘画工具实测:Stable Diffusion本地部署指