Communications Mining
最新
False
Communications Mining 开发者指南
Last updated 2024年5月17日

高效变换器 I:注意力机制

业务依赖于通信。 客户有需要时可以联系我们。 同事可以相互连接以完成工作。 在 Communications Mining,我们的使命是从根本上改变企业中服务工作的经济学,释放每次交互中的价值,并使服务高效且可扩展。 为此,我们实现了对最先进的 NLP 和 NLU 的大众化访问。

具体来说,Communications Mining 的模型使用称为“变换器”的深度学习架构。 转换器有助于大幅提升 NLU 的性能。 但是,它们也属于高度计算密集型项目 - 无论是训练模型学习新概念,还是使用新概念进行预测。 这个由两部分组成的系列将探讨多种技术,以提高使用这些大型变换器架构的速度并降低计算成本。

这篇文章将:

  • 介绍 NLP 中嵌入模型的简史。
  • 解释为什么变换器的自注意机制具有很高的计算工作负载。
  • 查看对传统变换器架构的修改,这些修改可以在不显着影响性能的情况下提高训练和运行的计算效率。

下一篇文章将介绍可进一步提高效率的其他计算和近似技术。 下一篇文章将:

  • 探索提纯技术,通过训练较小的模型来近似较大模型的性能。
  • 解释高效的微调技术,其中参数更新受到限制。
  • 就何时使用其中每种方法,提供我们的建议。

背景​

在过去的 10 年中,NLP 方法在执行各种任务方面取得了显着进步。 这在很大程度上可以归因于从手动的基于特征工程的方法转向由机器学习驱动的方法。 性能的最大改进要归功于无监督的预训练语义表示学习的进步。 这涉及训练一个映射自然语言序列(例如 单词、句子)转换为表示其语义的向量(数字序列)。 然后,可以使用这些向量执行感兴趣的任务,例如 意图识别、情感分类、命名实体识别等。

词嵌入​

范式转变始于 2010 年代,当时出现了word2vecGmail等词嵌入方法。 这些技术使用大型自然语言数据集,以无监督方式学习单词的嵌入(向量的别称)。 嵌入根据词语经常出现的上下文对语义信息进行编码。 例如,“计算机”一词通常可能与“键盘”、“软件”和“互联网”等词一起出现;这些常见的相邻词包含嵌入的“computer”应编码的信息。

传统的单词嵌入有一个关键的缺点 - 它们是静态的,即给定单词的嵌入始终相同。 例如,考虑“银行”一词,这可能指河边或金融机构;它的嵌入必须对两种含义进行编码。

上下文嵌入​

为了解决这个问题,人们开发了上下文嵌入方法。 根据序列的不同,每个单词都有不同的嵌入(例如 句子、文档)。 这项工作改变了游戏规则;现在很难找到不依赖上下文嵌入的最先进方法。

ELMo是最早流行的上下文嵌入技术之一,该技术涉及使用下一个词预测目标在大型自然语言语料库上预训练递归神经网络 (RNN) 模型。 然后,将此模型的内部表示用作模型(通常是小型模型)的输入,以执行监督任务。 在当时,这种方法在几个任务上都比以前的技术水平有了显着改进。

RNN 逐个处理序列中的每个单词,因此在处理长文档时,它们可能会很慢。 因此, BERTRoBERTa等模型已成为首选方法,它们使用对并行计算更友好的 Transformer 替换了 ELMo 的经常性组件。 这些模型通常使用掩码语言建模目标进行预训练 - 删除序列中的一部分单词,让模型预测缺失的单词。

但是,基于 Transformer 的现代语言模型通常都非常大,其中可能包含数十亿个参数,并且运行时的计算要求非常高。 典型的工作流是:

  1. 在通用的未标记数据集上预训练语言模型。
  2. 在特定于领域的未标记数据集上进一步预训练语言模型。
  3. 使用已标记的数据微调语言模型,以执行相关的监督任务。

尽管第一步通常是一次性成本,但后两个步骤却不是。 虽然计算能力越来越低,但 Transformer 架构却越来越大。 这意味着最先进性能的成本不一定会下降。

因此,本文将介绍一系列技术,以减少计算工作量,同时最大限度地减少对性能的影响。

自注意力机制​

注意:尽管变换器对子词令牌进行操作,但为了使事情更容易理解,本文在全文中引用了子词。

Transformer 架构始于可学习的嵌入层。 每个后续层都使用“自注意”机制构建其内部表示,即每个单词的表示都会查看序列中的每隔一个单词(有关示例,请参见图 1)。 每个自注意力层都包含多个“头”(每个头都有自己的自注意力)。

自注意力机制

假设序列中有 N 个单词。 每个自注意力机制头都有每个单词的 D 维查询向量、键向量和值向量,这些向量是使用前一层 hn-1 的输出计算得出的:


将它们连接在一起,分别构成 NxD 矩阵QKV。 注意力矩阵的计算公式为:



然后,self-attention 层的输出计算方式如下:



通过连接每个头的自注意输出,并通过小型前馈网络将其输入,可以计算出每层的最终输出。

尽管(与 RNN 不同)可以并行完成计算,但图 1 显示,对于包含N个单词的序列,需要执行 N2 次自注意操作。 也就是说,计算复杂性与句子长度成二次方关系。 考虑到现代变换器使用数十个层,每个层都有数十个由数千个维度组成的头,即使对于单个序列,也需要执行大量操作。

当然,有一系列研究旨在通过更简单的自注意力机制来降低这种 N2 复杂性;这是高效 Transformer 架构研究的最大领域。 下面回顾了一些流行的方法;有关更全面的信息,请参阅此调查文件

逐块关注​

减少操作次数的一种方法是限制自注意机制查看的序列中的单词数量。 BlockBERT通过将序列分割为多个块来实现此操作。 在给定的注意力头,块中的注意力机制仅着眼于其中一个块中的单词(有关示例,请参见图 2)。 每一层的每个注意力头都会对注意力机制查看的块进行排列。 这意味着,在经过数十层之后,每个单词的嵌入可能已经包含在整个序列中。 根据模型大小,与 RoBERTa 相比,BlockBERT 的训练速度提高了 12% 到 25%,所需的内存减少了 19% 到 36%,并且在问答任务中几乎表现良好(SQuAD 2.0 上的 F1 分数大约低 0.8 分) )。

BlockBERT 自注意机制仅注意一个块中的单词。

组合多种注意力模式​

类似地, Longformer也限制了自注意机制查看的单词数量。 它通过组合多个简单的注意力模式来实现此目的(有关示例,请参见图 3)。

  • 滑动窗口
    • 仅注意k个相邻的单词。
  • 扩大的滑动窗口
    • 注意每一个单词,最多达到预定义的限制。
  • 全局注意力
    • 在一些预选的位置上,注意整个序列。
    • 在每个位置,请注意那些预先选择的位置。

通过这种注意模式的组合,经过几个层后,每个单词的嵌入可能已经覆盖了整个序列。 特别是在处理长序列时,Longformer 比 RoBERTa 速度更快,使用的内存更少。 令人意外的是,Longformer 在各种任务(问答、共指消解和情感分类)上的表现实际上都优于 RoBERTa。

Longformer 自注意力机制在一些预选的位置结合了滑动窗口、扩大的滑动窗口和全局注意力

大鸟是另一种流行的方法,与长形器非常相似,不同之处在于它使用随机注意模式(即每个表示注意序列中固定数量的随机单词),而不是扩大的滑动窗口。

使用低阶近似​

与目前提出的方法不同的是, Linformer ,它基于自注意力操作处于低阶这一理论结果。 Linformer 沿长度维度将键矩阵和值矩阵( KV )向下线性投影为可以应用完全注意的较短序列(固定长度)(有关示例,请参见图 4)。 与标准的自注意力机制相比,对于短序列,Linformer 的运行速度提高了 1.3 到 3 倍,对于长序列,运行速度提高了 3 到 20 倍。 在各种文本分类任务上,它的性能与 RoBERTa 相当(在某些任务上,性能略好于 RoBERTa)。

Informer 自注意力机制涉及沿长度维度向下投影到较短的序列(在本例中为长度 4),从而可以应用完全注意力

摘要​

这个两部分系列着眼于如何通过探索对流行但计算要求很高的基于 Transformer 的语言建模技术的修改,来提高最先进的 NLP 的效率。 此帖子:

  • 简要介绍了 NLP 中语义表示学习的历史,包括传统的单词嵌入和上下文嵌入模型。
  • 解释了处于 Transformer 架构核心的自注意力机制,以及运行该机制的计算成本较高的原因。
  • 探索了计算效率更高且不影响性能的替代注意机制。

下一篇文章将介绍以下内容:

  • 概述训练小型模型以重现大型模型输出的方法。
  • 如何以参数有效的方式微调语言模型。
  • 我们针对使用不同高效变换器方法的场景提出了建议。

如果您想在公司试用 Communications Mining,请注册试用版观看演示

  • 背景​
  • 自注意力机制​
  • 摘要​

此页面是否有帮助?

获取您需要的帮助
了解 RPA - 自动化课程
UiPath Community 论坛
Uipath 白色徽标
信任与安全
© 2005-2024 UiPath. All rights reserved.