【NLP】大型语言模型,ALBERT — 用于自监督学习的 Lite BERT

  🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

 🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟👋

文章目录

介绍

ALBERT

1.因式分解参数嵌入

2. 跨层参数共享

3. 句子顺序预测

BERT vs ALBERT

结论

资源


介绍

近年来,大型语言模型的发展突飞猛进。BERT 成为最流行、最高效的模型之一,可以高精度地解决各种 NLP 任务。BERT 之后,一系列其他模型随后出现,也表现出了出色的效果。

显而易见的趋势是,随着时间的推移,大型语言模型 (LLM) 往往会变得更加复杂,因为它们所训练的参数和数据的数量呈指数级增加。深度学习研究表明,此类技术通常会带来更好的结果。不幸的是,机器学习世界已经解决了有关法学硕士的几个问题,可扩展性已成为有效训练、存储和使用它们的主要障碍。

因此,最近开发了新的LLM来解决可扩展性问题。在本文中,我们将讨论 2020 年发明的 ALBERT,其目标是显着减少 BERT 参数。

ALBERT

要了解 ALBERT 的底层机制,我们将参考其官方论文。在很大程度上,ALBERT 源自 BERT 的相同架构。模型架构的选择存在三个主要差异,下面将讨论和解释这些差异。

ALBERT 中的训练和微调过程与 BERT 中的类似。与 BERT 一样,ALBERT 在英语维基百科(2500M 单词)和 BookCorpus(800M 单词)上进行了预训练。

1.因式分解参数嵌入

当输入序列被标记化时,每个标记都会被映射到词汇嵌入之一。这些嵌入用于 BERT 的输入。

V为词汇量(可能嵌入的总数),H为嵌入维数。然后,对于每个V嵌入,我们需要存储H值,从而生成V x H嵌入矩阵。实践证明,这个矩阵通常尺寸很大,需要大量内存来存储。但一个更普遍的问题是,大多数时候嵌入矩阵的元素是可训练的,并且模型需要大量资源来学习适当的参数。

例如,让我们以 BERT 基础模型为例:它有 30K 个标记的词汇表,每个标记由 768 个组件嵌入表示。总共需要存储和训练 2300 万个权重。对于较大的型号,这个数字甚至更大。

使用矩阵分解可以避免这个问题。原始词汇矩阵V x H可以分解为一对大小为V x EE x H的较小矩阵。

词汇矩阵分解 

因此,分解不会使用O(V x H)参数,而是仅产生O(V x E + E x H)权重。显然,当H >> E时,该方法有效。

矩阵分解的另一个重要方面是它不会改变获取标记嵌入的查找过程:左侧分解矩阵V x E的每一行以与原始相同的简单方式将标记映射到其相应的嵌入矩阵V x H。这样,嵌入的维数从H减少到E

然而,在分解矩阵的情况下,为了获得 BERT 的输入,需要将映射的嵌入投影到隐藏的 BERT 空间中:这是通过将左矩阵的相应行乘以右矩阵的列来完成的。

2. 跨层参数共享

减少模型参数的方法之一是使它们可共享。这意味着他们都拥有相同的价值观。在大多数情况下,它只是减少了存储权重所需的内存。然而,反向传播或推理等标准算法仍然必须对所有参数执行

当权重位于模型的不同但相似的块中时,共享权重的最佳方法之一就是发生。将它们放入相似的块中会导致前向传播或反向传播期间可共享参数的大多数计算相同的可能性更高。这为设计高效的计算框架提供了更多机会。

上述想法在 ALBERT 中实现,ALBERT 由一组具有相同结构的 Transformer 块组成,使得参数共享更加高效。事实上,Transformer 中存在多种跨层参数共享的方式:

  • 只共享注意力参数;
  • 仅共享前向神经网络(FNN)参数;
  • 共享所有参数(在 ALBERT 中使用)。

不同的参数共享策略

一般来说,可以将所有变压器层划分为 N 个大小为 M 的组,每个组共享其所拥有的层内的参数。研究人员发现,群体规模M越小,结果就越好。然而,减小组大小 M 会导致总参数显着增加。

3. 句子顺序预测

BERT 在预训练时重点关注掌握两个目标:掩码语言建模(MSM)和下一句预测(NSP)。总的来说,MSM 的目的是提高 BERT 获取语言知识的能力,NSP 的目标是提高 BERT 在特定下游任务上的性能。

然而,多项研究表明,与 MLM 相比,摆脱 NSP 目标可能是有益的,主要是因为它的简单性。遵循这个想法,ALBERT 研究人员还决定删除 NSP 任务,并将其替换为句子顺序预测(SOP)问题,其目标是预测两个句子的位置是否正确或相反。

说到训练数据集,输入句子的所有正对都在同一文本段落中按顺序收集(与 BERT 中的方法相同)。对于否定句,除了两个句子的顺序相反之外,原理是相同的。

                                                BERT 和 ALBERT 中正负训练对的组成 

结果表明,使用 NSP 目标训练的模型无法准确解决 SOP 任务,而使用 SOP 目标训练的模型在 NSP 问题上表现良好。这些实验证明 ALBERT 比 BERT 更适合解决各种下游任务。

BERT vs ALBERT

BERT 和 ALBERT 的详细比较如下图所示。

 BERT 和 ALBERT 模型不同变体之间的比较。在相同配置下测量的速度显示了模型迭代训练数据的速度。每个模型的速度值都是相对显示的(以 BERT Large 作为速度等于 1x 的基线)。准确度分数是在 GLUE、SQuAD 和 RACE 基准测试上测量的。

以下是最有趣的观察结果:

  • 由于只有 BERT Large 70% 的参数,ALBERT 的 xxlarge 版本在下游任务上取得了更好的性能。
  • 与 BERT Large 相比,ALBERT Large 实现了可比的性能,并且由于大量参数大小压缩,速度快了 1.7 倍。
  • 所有 ALBERT 模型的嵌入大小均为 128。正如论文中的消融研究所示,这是最佳值。增加嵌入大小(例如增加到 768)可以改进指标,但绝对值不会超过 1%,这与模型复杂性的增加并没有多大关系。
  • 尽管 ALBERT xxlarge 处理单次数据迭代的速度比 BERT Large 慢 3.3 倍,但实验表明,如果训练这两个模型相同的时间,则 ALBERT xxlarge 在基准测试中表现出比 BERT Large 更好的平均性能(88.7% vs 87.2%)。
  • 实验表明,具有较宽隐藏尺寸(≥ 1024)的 ALBERT 模型并不会从层数的增加中获益匪浅。这就是层数从 ALBERT Large 中的 24 层减少到 xxlarge 版本中的 12 层的原因之一。

ALBERT Large(18M参数)随层数增加的性能。图中≥3层的模型是根据之前模型的检查点进行微调的。可以观察到,达到12层后,性能提升变慢,24层后逐渐下降。 

  • 随着隐藏层大小的增加,也会出现类似的现象。将其值增加到大于 4096 会降低模型性能。

随着隐藏层大小的增加,ALBERT Large(上图中的 3 层配置)的性能。隐藏大小 4096 是最佳值。 

结论

乍一看,ALBERT 似乎比原始 BERT 模型更可取,因为它在下游任务上的表现优于它们。然而,由于 ALBERT 的结构较长,因此需要更多的计算。这个问题的一个很好的例子是 ALBERT xxlarge,它有 235M 参数和 12 个编码器层。这些 235M 重量中的大部分属于单个变压器块。然后为 12 层中的每一层共享权重。因此,在训练或推理过程中,算法必须在超过 20 亿个参数上执行!

由于这些原因,ALBERT 更适合解决可以牺牲速度以获得更高准确度的问题。最终,NLP 领域永远不会停止,并且不断向新的优化技术发展。ALBERT 的速度很可能在不久的将来会得到提高。该论文的作者已经提到了稀疏注意力块注意力等方法作为 ALBERT 加速的潜在算法。

资源

  • ALBERT:用于语言表示自监督学习的 Lite BERT

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈谈如何沟通

序言 如果你是对的,就要试着温和地、技巧地让对方同意你;如果你错了,就要迅速热忱地承认。这比为自己争辩有效和有趣的多。——卡耐基【美】 通过上篇文章谈谈如何写作(一),我们了解了如何表达的一些基本的…

【Vue】【uni-app】工单管理页面实现

用的是uni-app的uni-ui拓展组件实现的 功能是对工单进行一个展示,并对工单根据一些筛选条件进行搜索 目前是实现了除了日期之外的搜索功能,测试数据是下面这个tableData.js,都是我自己手写的,后端请求也稍微写了一些,…

jQuery中滑入与滑出

在我们jQuery中为我们封装了许多好玩的东西&#xff0c;让我为大家介绍一下滑入与滑出吧&#xff01; slideUp()滑出 slideDown()滑入 slideToggle()切换滑入滑出 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

【GEE学习日记】GEE下载ERA5指定小时数据

1 背景 ERA5数据集提供了逐小时的气象产品&#xff0c;最近做实验需要用到指定日期的14点的气象数据&#xff0c;所以学习了一下。 我的目的&#xff1a;获取2003年每月5&#xff0c;15&#xff0c;25日 14点的空气温度 2 代码 var roi table.geometry(); // table是我上传…

Word转PDF简单示例,分别在windows和centos中完成转换

概述 本篇博客以简单的示例代码分别在Windows和Linux环境下完成Word转PDF的文档转换。 文章提供SpringBoot Vue3的示例代码。 文章为什么要分为Windows和Linux环境&#xff1f; 因为在如下提供的Windows后端示例代码中使用documents4j库做转换&#xff0c;此库需要调用命令行…

单链表OJ题目——C语言

本篇博客并非提供完整解题思路代码&#xff0c;而是重点阐述在OJ的链表题目中容易被忽视的点&#xff0c;从而让部分读者在出错百思不得解的情况下能快速发现自己的漏洞&#xff0c;高效查缺补漏&#xff0c;本博客支持读者按题搜索&#xff0c;同时也支持读者根据博客内容自行…

【ARM Trace32(劳特巴赫) 使用介绍 5-- Trace32 通过 JTAG 命令获取 DP IDCODE】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 Trace JTAG Command LineTrace32 JTAG 数据发送命令Trace32 JTAG 数据接收命令Trace32 数据访问修饰符 Trace32 IDCODE 脚本实例Trace32 API Trace JTAG Command Line Trace32 JTAG 数据发送命令 JTAG.SHIFTTMS …

QQ录制视频保存到哪了?位置一览,让你轻松找回

现如今&#xff0c;录制视频成为我们日常生活和工作的一部分。qq是中国最流行的社交媒体平台之一&#xff0c;许多用户使用qq录屏功能来记录重要时刻。但是&#xff0c;很多人不知道qq录制视频保存到哪了。本文将深入研究qq录制视频功能&#xff0c;以帮助您了解如何存储和管理…

Haskell添加HTTP爬虫ip编写的爬虫程序

下面是一个简单的使用Haskell编写的爬虫程序示例&#xff0c;它使用了HTTP爬虫IP&#xff0c;以爬取百度图片。请注意&#xff0c;这个程序只是一个基本的示例&#xff0c;实际的爬虫程序可能需要处理更多的细节&#xff0c;例如错误处理、数据清洗等。 import Network.HTTP.Cl…

软件项目验收测试计划

验收测试计划 1.基本信息 2.项目成果及验收要求 2.1项目成果 2.2验收要求 1、满足业务风险控制法律法规要求。 3.验收组织 4.产品交付 5.产品安装 5.1环境要求 5.2数据库配置 5.3程序配置 6.验收测试方案 6.1测试 依据 6.2测试要求 6.3测试方法 6.4测试工作流程 6.5测试通过准则…

C 语言函数

C 语言函数 在本教程中&#xff0c;将向您介绍C语言编程中的函数&#xff08;用户定义函数和标准库函数&#xff09;。此外&#xff0c;您还将学习为什么在编程中使用函数。 函数是执行特定任务的代码块。 假设您需要创建程序来创建一个圆并为其着色。您可以创建两个函数来解…

CopyOnWriteArrayList 源码详解

目录 一. 前言 二. 源码详解 2.1. 类结构 2.2. 属性 2.3. 构造方法 2.4. add(E e) 2.5. add(int index, E element) 2.6. addIfAbsent() 方法 2.7. 获取元素() 方法 2.8. remove(int index) 2.9. size() 三. FAQ 3.1. 为什么CopyOnWriteArrayList没有size属性&…