BERT系列算法解读

news2025/1/16 20:20:18

 1.bert训练的方法

        为了训练BERT模型,主要采用了两种方法:掩码语言模型(Masked Language Model, MLM)和下一个句子预测(Next Sentence Prediction, NSP)。

方法一:掩码语言模型(Masked Language Model, MLM)

  • 掩码处理

    • 在训练过程中,随机选择输入句子中15%的词汇,并将它们用特殊标记[MASK]替换。
    • 例如,句子“今天我玩DOTA”可能被处理成“今天[MASK]玩DOTA”。
  • 预测被掩码的词汇

    • 模型需要根据上下文预测被掩码的词汇是什么。
    • 图中展示了BERT模型如何处理输入序列,尝试预测被掩码的词汇,最终通过多分类层输出预测结果。
  • 目标

    • 通过这种方式,模型可以学习到每个词汇在不同上下文中的表示,提高对词汇语义的理解。

方法二:下一个句子预测(Next Sentence Prediction, NSP)

  • 句子对构建

    • 在训练数据中,构建句子对,其中一部分句子对是连续的(即前后两句在原文本中是连续的),另一部分是随机组合的(即前后两句在原文本中并不连续)。
  • 输入处理

    • 对每对句子添加特殊标记[CLS]和[SEP],其中[CLS]标记句子的开始,[SEP]标记句子的分隔。
    • 例如,句子对“赵紧上号准备打排位”和“老师马上点名”会被处理成“[CLS] 赵紧上号准备打排位 [SEP] 老师马上点名 [SEP]”。
  • 预测句子连贯性

    • 模型需要预测两个句子是否应该连在一起。
    • 图中展示了BERT如何处理句子对,通过多分类层输出预测结果,是或否。
  • 目标

    • 通过预测句子对的连贯性,模型能够学习到句子级别的上下文关系,增强对文本的理解能力。

2.ALBERT

论文地址:https://arxiv.org/abs/1909.11942v1

(1)解决的问题

        在自然语言处理(NLP)领域,BERT(Bidirectional Encoder Representations from Transformers)模型的出现标志着预训练技术的革命,极大地推动了该领域的发展。BERT凭借其强大的语言理解能力,在多项任务中取得了前所未有的成绩,确立了“模型越大,效果越好”的普遍认知。然而,这一规律伴随着显著的挑战:大规模模型意味着庞大的权重参数量,不仅对硬件资源,尤其是显存,提出了极高的要求,还导致训练过程异常缓慢,有时甚至需要数月之久,这对于快速迭代和实际应用构成了巨大障碍。

        为了解决上述难题,研究者们开始探索如何在不牺牲过多性能的前提下,打造更为轻量级的BERT模型,即A Lite BERT。这类模型旨在通过优化结构和算法,减少模型的复杂度和参数量,同时保持其强大的表达能力。一个关键的观察是,BERT模型中的Transformer架构中,Embedding层约占总参数的20%,而Attention机制则占据了剩余的80%。这意味着,通过精简或优化这些部分,可以有效减小模型体积。

        ALBERT(A Lite BERT)正是在此背景下应运而生的一个代表。它通过参数共享、跨层权重绑定等技巧大幅减少了模型的参数量,同时保持了竞争力的表现。例如,与原始BERT相比,ALBERT在保持相似性能的同时,显著降低了对计算资源的需求,加快了训练速度,使得模型能够在更短的时间内完成训练,降低了部署门槛,使得更多研究者和开发者能够受益。

        此外,随着技术的进步,如优化器的创新、并行计算技术的发展以及分布式训练策略的优化,即使是大型模型的训练时间也得到了大幅缩减。从过去需要数月的训练周期,到现在某些情况下仅需几分钟,这些进步充分体现了技术革新对于加速NLP模型训练的显著影响。因此,通过不断的模型优化与算法创新,实现更快速、更高效的BERT模型训练已经成为可能,为推动NLP技术的广泛应用奠定了坚实基础。

(2)隐层特征越多,效果一定越好吗?

        图中展示了BERT-large和BERT-xlarge模型在训练过程中的表现对比。尽管BERT-xlarge的隐藏层特征更多、参数量更大,但其在RACE数据集上的准确率(54.3%)低于BERT-large(73.9%)。这表明,模型效果并不一定随着隐藏层特征的增加而提高,合适的模型规模和结构更为重要。

(3)重要参数

        在深入理解自然语言处理(NLP)特别是Transformer模型架构时,几个核心参数扮演着至关重要的角色,分别是E、H和V:

  • E (Embedding Size): 这表示模型在将文本转换为机器可理解的形式时,每个词嵌入向量的维度。换句话说,E定义了词汇表中每个词经过词嵌入层处理后所获得的向量空间的大小。例如,如果E设置为768,那么每个词都将被映射到一个768维的向量中。

  • H (Hidden Layer Size): H是指Transformer模型中隐藏层的维度,特别是在多头自注意力(Multi-Head Attention)和前馈神经网络(Feed Forward Networks, FFNs)等组件处理后输出的向量尺寸。同样地,使用768作为一个常见例子,意味着经过这些层处理后的特征向量也是768维的。这表明,在许多标准Transformer配置中,E和H是相等的,均为768,以此确保模型内部信息传递的一致性和高效性。

  • V (Vocabulary Size): V代表了模型训练所依据的语料库中不同词项的数量。例如,如果我们的字典包含20,000个独特的词或token,则V即为20,000。这个数值直接影响到词嵌入层的初始化和大小,每个词在词嵌入矩阵中都有一个对应的、独一无二的向量表示。

(4)嵌入向量参数化的因式分解

        在自然语言处理(NLP)领域,尤其是在设计高效的Transformer模型时,面对巨大的参数量挑战,研究者们探索了一种创新策略——嵌入向量参数化的因式分解。这种方法巧妙地通过引入一个中介层,将原本单层高维度的嵌入表示分解为两个低维度的步骤,从而在不严重牺牲模型性能的前提下,大幅度减少所需的参数数量。

        具体来说,传统的Transformer模型中,嵌入层直接将词汇表(V)中的每个词映射到一个高维空间(H),导致参数量为V×H。而采用因式分解技术后,这一过程被重构为先通过一个较低维度的嵌入(E)表示每个词,随后再将此低维表示映射至最终的高维空间(H)。这样一来,参数总量从V×H减少到了V×E+E×H。当目标是构建轻量化模型且H远大于E时,这种方法尤其有效,能够在保持模型相对性能的同时,显著减轻硬件负担,加快训练和推理速度。

         上图中展示了嵌入向量参数化对模型性能的影响。结果表明,嵌入向量维度 𝐸的变化对性能有一定影响,但并不显著。在所有参数共享的情况下,尽管参数量减少,模型的平均性能仅略微下降,这表明模型在保持较少参数量的情况下仍能保持较好的性能。

(5)跨层参数共享

       参数共享的方法有很多,ALBERT选择了全部共享,FFN和ATTENTION的都共享。

         结果显示,全部共享(all-shared)的方法在减少参数数量的同时,依然保持了较高的性能。例如,对于嵌入维度为768的ALBERT模型,全部共享方法的平均性能(Avg)为79.8,而未共享的性能为82.3。尽管未共享的方法性能稍高,但参数量显著增加(108M vs. 31M)。这表明参数共享方法,尤其是全部共享方法,可以在保持模型性能的前提下显著减少参数量。

        论文还展示了模型层数和隐藏层特征大小对性能的影响。结果表明,层数和隐藏层特征越多,模型性能越好。例如,层数为24时,模型在多个数据集上的平均性能最高(82.1)。同时,隐藏层特征从1024增加到4096时,模型性能也显著提升。这说明增加层数和隐藏层特征可以有效提高模型性能。

3.Robustly optimized BERT approach

https://arxiv.org/pdf/1907.11692v1

        在持续探索提升自然语言处理(NLP)模型训练效率的过程中,优化训练策略尤其是设计更有效的masking机制成为了研究的焦点。传统上,BERT等模型采用静态masking策略,在输入序列中随机掩盖部分词汇,促使模型学习预测这些缺失部分,以此增强语言理解能力。然而,这种方法存在局限性,其生成的mask模式固定且与真实应用场景可能存在偏差。

        近期的研究工作则聚焦于动态masking技术,这正是某篇论文探讨的核心创新点。与静态masking相比,动态masking在每次训练迭代时依据特定策略灵活调整掩盖模式,旨在模拟更加多样和贴近实际的语言情境。这一变化直觉上看似简单,实则蕴含深刻:通过引入动态性,模型被鼓励学习更广泛和复杂的上下文依赖,从而可能在语言建模能力上实现更显著的提升。

        此外,该研究还揭示了一个有趣的发现:取消BERT原始训练目标之一的**Next Sentence Prediction (NSP)**任务,即判断两个句子是否连续,竟然能带来意想不到的效果提升。NSP任务本意是为了增强模型对句子间关系的理解,但在实际操作中,它的贡献似乎不如预期,并可能引入不必要的复杂性。移除NSP后,模型能够更加专注于核心的语言建模任务,这不仅简化了训练流程,还可能促进了模型性能的优化。

(1)优化点

        首先,增加BatchSize(批处理大小)被认为是提高模型性能的有效方法。其次,使用更多的数据集并延长训练时间也能提升效果。最后,对分词方式进行改进,使英文拆分更细致,从而提高模型在SQuAD、MNLI和SST-2数据集上的性能。总的来看,这些优化措施显著增强了模型的表现。

(2) RoBERTa-wwm

        RoBERTa-wwm是一种针对中文场景优化的预训练语言模型,其中的"wwm"代表"whole word mask",即全词掩码策略。这一策略特别关键,因为它考虑到了中文词语不像英语那样由空格分隔的特点,往往一个词汇由多个字符组成。在预训练过程中,全词掩码会将整个词汇作为一个单位进行掩盖,而非单独遮蔽单个字符,这样能更准确地保留和学习中文词汇的完整性及上下文语境,对于提升模型在中文自然语言处理任务上的性能至关重要。因此,对于面向中文场景的训练任务,采用如RoBERTa-wwm这样的全词掩码模型是极为重要的优化措施。

4.A distilled version of BERT: smaller,faster, cheaper and lighter

        2019年,自然语言处理(NLP)领域见证了模型规模不断膨胀的趋势,学界普遍认同“越大越强”的理念,认为通过增加模型容量可以获得更优的性能表现,体现了一种“大力出奇迹”的学术探索精神。然而,在实际应用层面,这引发了对计算资源、存储需求以及能源消耗的深切关注。工程实践迫切需要找到平衡点:如何在保持模型相对小巧的同时,确保其具备强大的语言处理能力。

       DistilBERT是BERT的一个蒸馏版本,具有更小的模型尺寸、更快的推理速度和更低的成本。

  • 参数减少

    • DistilBERT的参数数量减少了大约40%,主要是为了提高预测速度。
    • 具体参数数量对比:
      • ELMo:180百万参数,推理时间895秒。
      • BERT-base:110百万参数,推理时间668秒。
      • DistilBERT:66百万参数,推理时间410秒。
  • 性能保留

    • 尽管DistilBERT进行了大幅度的模型精简,它仍能保留97%的BERT性能。
    • 在GLUE基准测试中的表现(表1所示):
      • 总体得分:DistilBERT为77.0,BERT-base为79.5。
      • 各子任务得分接近,如MNLI、MRPC、QNLI等任务上DistilBERT表现均较好。

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Removing Smallest Multiples

题目描述: 给你一个集合 S &#xff0c;其中包含前 n 个正整数1, 2 。 您可以对 S 执行以下操作任意次数(可能为零)&#xff1a; #include<iostream> #include<cstring> #include<algorithm> #define int long long using namespace std; int t,n,sum; bo…

2024 中青杯高校数学建模竞赛(A题)数学建模完整思路+完整代码全解全析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024 长三角高校数学建模竞赛&#xff08;A题&#xff09;的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有详尽的建模过…

【真实项目中收获的提升】- 使用MybatisPlus框架 save一条字段中有主键id并且和以前重复会报错吗

问题描述&#xff1a; save一条数据中有主键id并且和以前重复会报错吗&#xff1f; 实际场景&#xff1a; 复制一条数据&#xff0c;修改其中一个字段&#xff0c;想让主键自增直接插入进数据库。 解决方案&#xff1a; 会报错&#xff0c; 直接把插入对象的主键id置为空…

java实现环形链表带哨兵

双向环形链表带哨兵&#xff0c;这时哨兵既作为头&#xff0c;也作为尾。 package com.tfq.arithmetic.linkedlist;import java.util.Iterator;/*** author: fqtang* date: 2024/05/22/8:40* description: 环形链表*/ public class DoublyLinkedListSentinel implements Iterab…

Delphi 程序例子(DPI变化自动感知及显示器相关功能演示)

目录 一、前言 二、Delphi 演示程序&#xff08;D12版本&#xff0c;用D11也都可以&#xff09; 1. 演示程序功能&#xff1a; 2. 程序界面&#xff1a; 3. 程序源代码下载&#xff08;有偿&#xff09;&#xff1a; 一、前言 系列文章&#xff1a; 彻底搞懂 Windows 显示…

数据结构---树,二叉树的简单概念介绍、堆和堆排序

树 树的概念和结构 结构 在我们将堆之前&#xff0c;我们先来了解一下我们的树。 我们的堆是属于树里面的一种&#xff0c; 树是一种非线性结构&#xff0c;是一种一对多的一种结构&#xff0c;也就是我们的一个节点可能有多个后继节点&#xff0c;当然也可以只有一个或者没…

23设计模式—工厂方法

文章目录 0、模式类型1、Factory Method1.1、动机1.2、实现 2、模式定义3、结构4、总结 0、模式类型 "对象创建"模式 通过“对象创建”模式绕开new&#xff0c;来避免对象创建&#xff08;new&#xff09;过程中导致的紧耦合&#xff08;依赖具体类&#xff09;&am…

多线程讲解(详解)

目录 什么是多线程&#xff1f; 为什么要使用多线程&#xff1f; 线程的创建 使用Thread实现 从以上代码我们梳理一下多线程创建步骤&#xff1a; 注意&#xff1a; 小示例 首先&#xff0c;引入依赖 然后&#xff0c;按照我们刚刚说的构建多线程的步骤进行构建&#…

Python实现天气数据采集

Python实现天气数据采集 一、需求介绍二、完整代码一、需求介绍 本次天气数据采集的需求是获取每日的最高温、最低温、风力、风向、天气状况、AQI指数,如图所示,完整代码附后: 本次采集的目标网址是2345天气网: 上图的URL中,beijing是城市名称的缩写,54511即为城市代码…

跨域计算芯片,一把被忽视的汽车降本尖刀

作者 |王博 编辑 |德新 2019年前后&#xff0c;「中央运算单元区域控制」的架构被提出。基于这一趋势&#xff0c;从板级的多芯片&#xff0c;到板级的单芯片&#xff0c;集成度越来越高&#xff0c;跨域计算芯片随之来到聚光灯下。 跨域计算芯片的特点是&#xff0c;与专为智…

java8总结

java8总结 java8新特性总结1. 行为参数化2. lambda表达式2.1 函数式接口2.2 函数描述符 3. Stream API3.1 付诸实践 java8新特性总结 行为参数化lambda表达式Stream Api 1. 行为参数化 定义&#xff1a;行为参数化&#xff0c;就是一个方法接受多个不同的行为作为参数&#x…

如何巧妙利用APP广告变现策略,提升用户参与度并实现盈利增长?

如何巧妙利用APP广告变现策略&#xff0c;提升用户参与度并实现盈利增长&#xff1f; 在竞争激烈的移动应用市场中&#xff0c;APP广告变现已成为开发者重要的盈利模式之一。为了吸引用户使用APP并实现有效的变现&#xff0c;开发者需要采取一系列巧妙的策略&#xff0c;确保…

【Qt问题】QStringLiteral、QString、QLatin1String简单区分

【Qt问题】QStringLiteral、QString、QLatin1String简单区分 最近在看项目代码的时候&#xff0c;一个频繁使用的关键词——“QStringLiteral”&#xff0c;引起了我的注意&#xff0c;关键是我竟然对它非常模糊&#xff0c;这不是一个Qter能够轻易接受的事情。 于是我秉承着…

【kubernetes】多 master 高可用集群架构部署

目录 前言 一、环境部署 二、master02 节点部署 1、拷贝相关文件 2、修改配置文件 3、启动各服务并设置开机自启 4、 查看node节点状态 三、负载均衡部署 1、部署 nginx 服务 1.1 编译安装 nginx 1.2 修改 nginx 配置文件 2、部署 keepalived 服务 2.1 yum安装 ke…

笔记88:LeetCode_134_加油站

前言&#xff1a; 前言1&#xff1a;这个题的题目条件给的不太严谨&#xff0c;题目描述中说“如果存在解&#xff0c;则保证它是唯一的”&#xff0c;通过我的实践&#xff0c;我发现这句话的意思其实是本题的所有样例只有两种情况&#xff0c;无解/有唯一解&#xff1b;而不可…

医院是自建档案室还是档案寄存好呢

医院可以选择自建档案室或档案寄存&#xff0c;具体选择取决于医院的需求和资源。 自建档案室意味着医院会拥有自己的档案空间和设施&#xff0c;可以更方便地管理和保管档案。这种方式可以确保医院对档案的访问和控制有更多的自主权&#xff0c;同时也能够根据医院的需求进行档…

5月23日学习记录

[CSAWQual 2019]Unagi 涉及&#xff1a;xxe漏洞&#xff0c;外来编码xml绕过 打开环境&#xff0c;发现存在文件上传 简单上传一个php 毫无疑问上传失败&#xff0c;说是存在waf&#xff0c;绕过waf才能上传&#xff0c;点击here看看 xml编码&#xff0c;可能存在xxe漏洞&…

Java并发: 锁和同步

在Java并发: 面临的挑战那一篇中我们提到锁和同步是实现并发安全(可见性/原子性)的方法之一。这一章我们来讲讲Java中的锁和同步的各种工具&#xff0c;包括: LockSupportAbstractQueuedSynchronizerJava内置的锁实现 1. LockSupport LockSupport是基于Unsafe的park/unpark实…

57. UE5 RPG 处理AI敌人转向以及拾取物品的问题

在上一篇文章中&#xff0c;我们实现了使用AI行为树控制敌人进行移动&#xff0c;它们可以一直跟随玩家&#xff0c;虽然现在还未实现攻击。但在移动过程中&#xff0c;我发现了有两个问题&#xff0c;第一个是敌人转向的时候很僵硬&#xff0c;可以说是瞬间转向的&#xff0c;…

鸿蒙开发接口应用程序包管理:【ApplicationInfo】

ApplicationInfo 说明&#xff1a; 本模块首批接口从API version 7 开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 开发前请熟悉鸿蒙开发指导文档&#xff1a; gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。…