人工智能

UltraFastBERT:指数级更快的语言建模

mm

语言模型和生成式人工智能因其能力而闻名,是人工智能行业的热门话题。全球研究人员正在提高其有效性和能力。这些系统通常是深度学习模型,在大量标记数据上进行预训练,使用神经网络进行自注意力。它们使用各种层次——前馈、循环、嵌入和注意力——来处理输入文本并产生相关输出。

大多数大型语言模型的前馈层具有最多的参数。研究表明,这些模型仅使用可用神经元的一小部分来执行输出计算。在推理过程中,大型语言模型的前馈层通常只使用可用神经元的一小部分来执行输出计算。

本文介绍了UltraFastBERT,一种基于BERT的框架,它的效果与领先的BERT模型相当,但只使用0.3%的神经元进行推理,特别是在每个层中只使用12个神经元。我们将探讨UltraFastBERT的架构、功能和结果。让我们开始吧。

UltraFastBERT:指数级更快的语言建模介绍

传统上,语言模型使用不同的组件来具备内容生成能力,包括前馈层、循环层、嵌入层和注意力层。这些组件负责在训练过程中学习模式,并最终根据输入文本生成准确的输出。每个组件都有一些参数,而在语言模型中,前馈层占有大部分参数。然而,这些前馈层并不总是利用100%的可用神经元来生成每个输入的输出,这导致了资源的浪费,增加了复杂性、计算时间和计算成本。

UltraFastBERT框架是BERT框架的一个变体,它建立在这样的概念之上:前馈层并不总是利用100%的可用神经元来生成每个输入的输出,这导致了资源的浪费。UltraFastBERT框架使用更快的前馈网络来替换前馈层,从而实现了0.3%的神经元利用率,同时保持了与BERT模型相当的性能,特别是在下游任务中。

假设我们有一个快速前馈网络(FFF)和一个前馈网络(FF),每个网络都有n个神经元,前馈网络的前向传递时间复杂度为O(n),而快速前馈网络的时间复杂度为O(log2n)。这种时间复杂度的差异主要是因为在快速前馈网络中,神经元被组织成一个平衡的二叉树,当输入被提供时,网络仅执行树的一条分支。因此,快速前馈网络仅使用所有神经元来处理少数输入,而没有输入需要超过少数神经元来处理。

前馈神经网络

前馈神经网络是一种最直接的人工神经网络,它仅将信息从输入节点向前传递到输出节点,通过隐藏节点。前馈神经网络的主要特点是没有循环或回路,它们比循环神经网络(RNN)和卷积神经网络(CNN)更简单。前馈神经网络的架构由三个组件组成:输入层、隐藏层和输出层。每个层都由称为神经元的单元组成,每个层都通过权重与其他层相连。

输入层的神经元接收输入并将其转发到下一层。每个输入层的神经元数量由输入数据的维度决定。然后,我们有隐藏层,它们既不暴露于输入也不暴露于输出,它们负责必要的计算。每个隐藏层的神经元对前一层的输出进行加权求和,应用激活函数,然后将结果传递到下一层。最后,我们有输出层,它为给定的输入产生输出。每个层的每个神经元都与下一层的每个神经元相连,使得前馈神经网络成为一个全连接网络。权重用于表示神经元之间的连接强度,网络通过更新权重来学习模式,方法是根据输出中的错误更新权重。

前馈阶段

在前馈阶段,输入被馈送到网络中,然后向前传播。隐藏层计算输入的加权求和,并通过激活函数(如ReLU、Sigmoid和Tanh)引入非线性。这个过程一直重复,直到权重到达输出层,模型做出预测。

反向传播阶段

一旦模型做出预测,它就会计算生成的输出和预期输出之间的错误。然后,错误被反向传播通过网络,网络使用梯度下降优化算法来调整权重,尝试最小化错误。

UltraFastBERT:模型架构和工作原理

UltraFastBERT框架建立在crammedBERT架构之上,UltraFastBERT框架使用crammedBERT框架的所有组件,除了中间层的性质。相反,UltraFastBERT框架用快速前馈网络替换了crammedBERT框架中间层的变压器编码器。UltraFastBERT框架对原始前馈网络进行了以下更改。

UltraFastBERT框架去掉了叶节点和非叶节点之间的区别,方法是使用GeLu激活函数在节点上,并为这些节点提供输出权重,去掉输出偏差。然后,框架将叶大小固定为1。最后,框架允许中间层中并行使用多个快速前馈网络,方法是联合计算中间输出层。框架通过对个别树的总和进行计算,然后将总和作为中间输出层来实现这一点。

干扰

干扰是快速前馈网络的一个重要部分,而这些快速前馈网络本身就是大型语言模型的一个重要组成部分,它们以其异常的加速潜力而闻名。为了了解这种加速潜力,让我们以GPT-3为例,这是最先进的语言模型之一。在GPT-3中,每个变压器层的前馈网络都包含超过49,100个神经元。如果可以训练,快速前馈网络(最大深度为15)可以替换原始前馈网络。引入的快速前馈网络将拥有超过65,000个神经元,但它只会在干扰时使用16个神经元,大约占GPT-3可用神经元的0.03%。

算法和兼容性

UltraFastBERT框架使用快速前馈干扰的递归伪代码算法,该算法在下图中显示。

这里,B表示批次大小,H表示输入层的宽度,M表示列。使用计算矩阵乘法(CMM)方法的另一个主要问题是,它是否会使快速前馈网络与现有的密集矩阵乘法和现有的深度学习框架不兼容。幸运的是,使用CMM不会影响性能或引入不兼容性,尽管它会增加缓存复杂性。

UltraFastBERT:性能和结果

我们将讨论UltraFastBERT框架在微调和干扰任务方面的性能,以分析它与最先进的语言模型相比的表现。

微调结果

以下图表显示了不同模型在GLUE-dev测试数据集上的性能。这里,N表示可用于训练的神经元数量,“平均”表示所有任务的平均分数。

如图所示,UltraFastBERT框架在A6000 GPU上训练了24小时后,能够在GLUE下游任务上保持与原始BERT框架相当的预测性能,达到96%。此外,我们还可以看到,随着快速前馈网络深度的增加,框架的性能会下降,尽管大部分性能下降仅发生在CoLa任务上。如果我们忽略CoLa任务,UltraFastBERT框架将返回大约98.6%的预测性能分数。

干扰结果

在本节中,我们将比较几种前馈网络或快速前馈网络在干扰实现上的性能,这些实现分为三个级别。

在第一级实现中,实现是使用BLAS第一级例程构建的,例如标量-向量积和向量-向量点积。在第二级中,实现使用BLAS第二级例程,例如批量标量-向量积和批量矩阵-向量点积。在第三级中,实现使用非批量BLAS第三级矩阵-矩阵乘法方法,尽管这是可用的最快实现,但由于库不支持计算矩阵乘法的向量级稀疏性,因此对于快速前馈网络不可用。

此外,UltraFastBERT框架使用自定义CUDA或PyTorch内核部署GPU实现。

上表比较了UltraFastBERT框架与其前身BERT框架在前馈层和快速前馈层方面的性能,每列包含快速前馈与前馈实现的相对干扰加速比,当它们使用相同的线性代数例程原语时。

最后的思考

在本文中,我们讨论了UltraFastBERT,一种基于BERT的框架,它建立在这样的概念之上:前馈层并不总是利用100%的可用神经元来生成每个输入的输出,这导致了资源的浪费。UltraFastBERT框架使用更快的前馈网络来替换前馈层,从而实现了0.3%的神经元利用率,同时保持了与BERT模型相当的性能,特别是在下游任务中。UltraFastBERT框架的强大性能证明了LLM可以通过仅参与少量参数来实现强大的性能,因为UltraFastBERT框架仅使用0.3%的可用神经元来实现78倍的加速比。

专业为工程师,心为作家。 Kunal是一名技术作家,对AI和ML有着深厚的热爱和理解,致力于通过其引人入胜和信息丰富的文档来简化这些领域中的复杂概念。