Meta AI Research(FAIR)的科学家兼高级经理田雨东博士,致力于研究学习优化及理解新网络。他曾担任Generation3和OpenGo项目的负责人,并于2018年荣获2021年ASML杰出论文奖荣誉提名,2013年SML PR荣誉提名,以及2022年CGU杰出论文奖。他于2013年至2014年在Go的搜索领域工作,并于2013年在卡内基梅隆大学机器人研究所获得博士学位。他已被任命为Neural和A St的负责人。今天,他将谈谈最近关于Transformer的研究成果,以及如何理解Transformer及其在语言模型中的应用。
好的,谢谢介绍。我们要开始了吗?好的,是的。那么,让我们开始吧。感谢大家来到这里听我的演讲,特别感谢Hing照顾我。我左腿有点受伤,不能做太多工作,但感谢大家帮忙处理并恢复。今天,我将讨论多层Transformer中神秘的注意力机制,以及模型中更好的影响力解释。
众所周知,大语言模型(LLM)无处不在。我们知道可以使用LLM进行内容创作、代理、编译器等等,很多事情。如果你查看Twitter上的新闻,或者像C News或Calculator这样的平台,你也会看到许多不同的场景。每次LLM出现重大突破时,实际上都会影响许多不同的场景,人们真的很喜欢看到这一切不断发生。
那么,如果我们思考如何为LLM社区做出贡献,我认为我们可能想要研究的一件事是Transformer。众所周知,现代LLM都在其骨干网络中使用Transformer,以预测下一个标记或执行不同类型的任务。在Transformer中,关键组件之一是注意力机制。
这里展示的是2017年由著名论文《Attention Is All You Need》中提出的线性Transformer。在那篇论文中,他们使用了编码器-解码器框架。他们首先对句子进行编码,然后用不同的语言解码句子,以便进行机器翻译任务。在这种架构中,会发生的情况是,你拥有这种注意力机制。
你拥有查询(query)和键(key),然后对于每一个输入到Transformer的新标记,它将基本上关注所有之前看到的标记,并使用这些信息来基本上等待当前标记的嵌入。对于编码器-解码器架构,编码器端同时关注两侧;而对于仅解码器架构,你只关注之前看到的标记。
这种注意力机制在这里发挥了魔力,基本上可以将不同的特征组合到标记中,并将上下文特征组合到当前标记中,使得当前标记实际上传达标记中的语义信息。如果你将它们堆叠在多层中,最终它将学习所有高级概念,并使用这些高级概念来预测下一个标记或执行许多不同的任务。
注意力中一个有趣的组件是稀疏性。稀疏性实际上无处不在。这是我们今年在顶级论文中的一项工作,我们试图首先观察稀疏性,然后利用这种稀疏性来基本上提高LLM中前馈网络的吞吐量。
在这次演讲中,我们将首先涵盖如何利用注意力中的稀疏性,理解注意力稀疏性,其次是如何在不同的应用中利用它。第一部分是理解注意力机制,我们将讨论两篇我们致力于理解Transformer中注意力机制的论文。第二部分讨论应用,利用注意力稀疏性使影响力传播更快或更高效,特别是对于长形式和长上下文生成。
让我们从第一部分开始。我们总是从简单的事情开始。对于理论分析,很难理解当前形式下的整个Transformer架构,因为它有很多组件,非常复杂。你可以做的是从单层设置开始。我们有一堆上下文标记和一个查询标记,然后经过S层注意力层后,你基本上将这些标记组合在一起,然后进入归一化,最后进入解码器并预测下一个标记。这是一个非常简单的设置。
这篇论文已被欧洲会议接收。首先,即使在这种设置下也很复杂,我们试图将整个简化为两个非常简单的参数。一个是y,称为解码器参数,即自注意力层之后的所有参数;另一个是z,即S注意力矩阵中的参数。如果我们这样做,动力学变得更容易分析,并且我们有这种动力学公式。
看起来有点疯狂,对吧?所有这些都看起来很复杂,但没关系。我将告诉你今天演讲的高层信息,你不需要经历所有细节。如果你感兴趣,可以随时查看论文中的细节。我们还做出了主要假设:首先,我们不放置位置编码,我们假设所有上下文标记可以互换,并且我们还假设序列长度T趋于无穷大。
此外,我们假设解码器的学习率比注意力层的学习率快,这个假设我们将在第二部分中去除。我们还有其他技术假设,假设某些分布结构。我们假设有一堆下一个标记类别,每个类别对应不同的上下文标记分布。我们可以将这种下一个预测视为分类问题,对于每个类别,你将输出不同的标记作为下一个标记。
鉴于所有上下文标记的下一个标记分布也非常不同,在这种分布中,我们将看到两个……
有两种不同的标记,一种称为“独特标记”,这些标记仅出现在一个序列类别中,而不出现在其他序列类别中。另一种称为“常见标记”,它们出现在多个序列类别中。因此,这两种标记在训练动态中将面临不同的命运。
我们定义了一个名为 C 阶量的量,它包含两个组成部分:一是建模查询标记与上下文标记之间的共现概率;二是 Z 分量,即标记 M 与标记 M 之间注意力逻辑的注意力。初始时,C 阶量呈现长尾分布,高频标记得分高,低频标记得分低,其余标记得分为零。
训练后,常见标记的注意力得分会下降并被抑制,因为它们同时出现在两个序列类别中,对于区分任务类别帮助不大。相反,独特标记的得分会上升。这表明自注意力机制类似于一种可学习的 TF-IDF 算法。
TF-IDF 是自然语言处理早期使用的术语,旨在去除在所有文档中高频出现的常见标记,同时强调在特定序列类别中具体出现且频率较高的标记。自注意力机制正是如此运作,并能提供更细粒度的过滤控制。
如果某个标记在一个类别中高频出现且极具独特性,其注意力得分增长速度快于其他独特标记。我们证明了所有注意力得分的增长率,并指出共现概率越大的标记增长越快,且可以界定这种增长率。
这种动力学导致上下文稀疏性的产生,其模式取决于查询标记的类型。上下文稀疏性在下文的应用中至关重要。回顾驱动注意力模式增长的 B 值,我们发现其经历两个阶段:初期为注意力扫描阶段。
在注意力扫描阶段,B 呈对数增长,其指数相对于 BN 线性增长,注意力速度加快。随后,当所有标记都变得独特时,进入注意力快照阶段,B 呈线性增长,其指数呈指数或对数速率增长。
这意味着注意力模式在初期增长,随后在某处停止,难以进一步加速。注意力模式变得日益稀疏并冻结,但永远不会变成“独热”编码。我们在线性解码器的自注意力层中刻画了这种结构,并通过真实实验验证了这一点。
这篇名为“扫描与快照”的论文提出了一些令人困扰的假设,如没有残差连接、没有嵌入向量,且编码层需比自注意力层更快学习。为了解决这些问题,我们近期发表了后续论文。
后续论文放宽了许多假设,并对多层注意力进行了定量分析。我们找到了一个联合动力学模型,结合了 MLP 层和自注意力层。自注意力现在带有残差连接,并包含 MLP 层和归一化层。
我们通过分析修改后的层,能够分析多层 Transformer 的多层行为。在简单的设置中,输入 X 经过自注意力层,通过残差连接进入 MLP 层,并包含归一化层和 Softmax 注意力机制。
我们证明了在此场景下,MLP 层和自注意力的下层动力学存在不变量动力学。这意味着进行积分后,自注意力得分与权重随时间的某种变换相关,且针对不同注意力机制会有不同的表达式。
两者均为方阵,对于XP而言,CM等于所有T选项求和的平方,类似但仍有必要进行某些修正,因为有些项需要抵消掉。好吧,这很好。在这种情况下,我们在存在残差连接的情况下得出了一个良好的分析,并且不需要假设顶层比同一注意力块中的底层收敛得更快,也没有对某些分布做出假设。
既然有了这个结论,首先我们需要验证这是否真的成立,特别是对于自注意力机制中的Softmax而言,因为在Softmax中你会看到一堆假设,所以这个假设看起来并不那么自然。我尝试了多个合成示例,如下所示。这是一个合成示例,基本上你设置输入模式X的分布,并检查预测的SE注意力分数是否与在真实设置中实际运行动态时的真实SE分数相同。
你会发现相关性实际上非常高,几乎达到100%,这意味着它实际上是有效的。如果你基本上取出表达式中的两个分量并比较相关性,你会发现相关性较低,这意味着你需要将这两者结合起来才能获得100%的相关性。这意味着该表达式确实捕捉到了某些重要的东西。
一旦你有了这种公式,即Drama公式,你基本上可以将顶层注意力与MRP的底层结合起来,从而可以做很多事情。现在我们有了新工具,首先我要看看这是否能恢复我们之前的结果。在我们的ScannerSnap论文中,我们说自注意力变得稀疏,然后变稠密,或者反过来,这在Drama中可能有所不同,它们相互竞争,这很糟糕。
首先我想说,我想展示在Drama中,这仍然与之前的结果相同。一旦你有了之前的表达式,操作很简单:我们知道这是自注意力属性,那么当我们写下MP公式时,我们知道自注意力基本上可以用MP的动态来替换的另一个项。这实际上引导你得出以下动态。
基本上检查这些动态是否给出了你想要的稀疏性。对于线性情况,我们知道它实际上与之前的注意力分析相同。在线性情况下,Delta M实际上是常数,因为它们是线性的,而这个Delta M实际上是两个项的乘积,一个是共现,另一个是判别性。这基本上对应于常见令牌与唯一令牌,正如我们之前的分析所示。
此外,还将之前的分析扩展到更连续的谱系,这很好。在这种情况下,我们基本上可以证明两个令牌之间存在某种表达,这种表达基本上告诉你V的一个分量趋向于无穷大,而其他分量保持有限。基本上最终你会看到随时间推移的“赢者通吃”现象。
这比我们要之前的分析要清晰得多,只需几行证明,事情就变得非常清晰,而不是大量的复杂分析。所以这是一个很好的公告,优于ScannerStep。这也是一些可视化结果,如果我告诉你只有一个分量会增长,其余分量保持有限,这里就是视觉证明。
一个分量趋向无穷大,而R分量保持有限。这就是在合成数据中学习注意力机制和注意力动态时实际发生的情况,你会看到非常简单且一致的分析结果,与理论理解和分析相符。好的,那么对于非激活情况会发生什么更有趣的事情呢?
这是我们真正想看到的,因为这是我们引入Drama框架的动机。现在我们要有一个更清晰的公式,我们可以使用该公式分析以前分析无法触及的内容。在这种情况下,我们可以实际上表明动态变得不同了。你有了这个,而不是拥有恒定的Delta M,你实际上有一个不动点。
那个不动点在某些情况下是稳定的。一旦有了这个,然后加上exp(v^2)/2,那么会发生什么?结果是动态变得不同了。它变成注意力首先变得稀疏,然后变得稠密。这实际上很有趣。
因为如果你检查这个动态,去掉这个exp,你就知道它会收敛到Mu,Mu是你想在数据中学习的一种模式。这种模式会有多个分量,有些分量对应于与你的查询高共现的令牌,有些其他分量不与你的查询大量共现。
如果你观察整个共现曲线,Mu是以从小到大的一种固体方式形成的,你会看到单个分量收敛得非常快。你不会在这里看到任何红色,红色意味着非常高的迭代次数。所以这实际上收敛得非常快,但这个小分量实际上收敛得非常慢。
所以你会在这里看到红色,红色对应于较高的迭代次数。所以你会看到起初注意力之所以更快,是因为你基本上只学习与查询大量共现的分量,你看到了这一点,事情变得很快。但为什么它再次变得稠密呢?
我的意思是所有的小分量,非共现分量,它们后来会赶上。所以一旦你训练它很长时间,它就会开始慢慢赶上,这就是为什么注意力随时间推移变得稠密。这基本上就是为什么你会看到这种竞争的原因。人们说哦,好的,这是合成示例,那么真实示例呢?
这里是真实示例,我们在Text8和Text103上训练带注意力机制的Transformer,然后你会看到非常清晰的这种曲线。SC稍微停滞一下,然后再次上升。这发生在一层、两层、五层以及十层上。这里的唯一区别是,在十层上……
底层结构(紫色和蓝色部分)显示出反弹行为受到了一定程度的抑制,虽然抑制幅度不大,但顶层仍保持这种反弹特性。我们还检查了所有预训练模型,包括Piscia和Al opt等,这些模型同样提供了所有的中间检查点。由于存在这些检查点,我们可以逐一查看,观察是否呈现出相同的行为模式。
我们发现这种相似行为确实持续存在,特别是在检查底层稳定秩时。在之前的分析中,MLP的底层与张量结构相关联。当注意力机制变快时,低秩也会降低。因此,我们希望看到这种秩在不同结构中表现出反弹行为,这体现了理论与实践的一致性。
我们还证明了两个组件之间存在收敛率差异,一个是稀疏的,另一个是非稀疏的。实际上,我们证明了这两个组件的收敛率与实际幅度的指数成正比,并取该指数的幂。这提供了一些指导意义。
接下来要探讨的是,为什么会出现这种稀疏属性?这是一个非常有趣的问题。我的理解是,在线性情况下,注意力会变得稀疏;但在非线性情况下,它首先会变得密集。能否提供更直观的理解,说明其内部机制?
好的,这张图解释了原因。目标向量μ是一个驻点,对应数据中的某些模式。μ是一个高维向量,其每个条目对应于该token相对于查询的相关性。其中一些组件与查询高度相关且具有显著区分度,它们是模式的主要成分。
还有一些其他模式与查询有一定的共现,并具有一定的区分能力。这些顶部组件实际上很弱,接近于零但非零。它们包含两个不同的部分。对于每个token,首先是在给定查询下的概率,这基本反映了共现情况。
其次,这一项告诉我们给定token和μ时输出的区分度。G代表反向传播梯度。这一项可能为零,意味着该token出现在不同类别中。在这种情况下,即使该token与查询频繁共现,其重要性也不大。
同时,你可能希望某些token既高频共现,又具有高区分度。这意味着G的值很高,无论是正高值还是负高值(低负值)。这在某种程度上可以衡量每种token的区分能力与共现能力的乘积。
如果将其视为线性注意力,可以看出这是线性特征的一个特性:线性特征越高,该token越有价值。μ实际上与该数据成正比。我们稍微调整一下,以免引起混淆。
我们还表明,如果μ的分量较高,收敛速度就快。例如,在求解方程时,紫色部分显示出极高的快速收敛率。经过100到1000个方程后,只有少数分量上升,其余分量保持在极低水平,这就是它变得稀疏的原因。
在1000左右时,你看到注意力熵快速增加,但由于这部分已经收敛,它会保持在那里。而稀疏分量则会慢慢赶上。一旦赶上,注意力熵会再次上升。这就是注意力变得稀疏和密集的机制。
还有其他问题吗?如果没有,我将继续下一页。有人问,这种属性现在展示出来了,但它有什么用呢?在一个层中,我们不需要这种属性,因为它只会减慢训练速度。
如果你将一切视为线性分类器,你会看到很强的特征和很弱的特征。对于线性分类器来说,最佳选择是让权重与特征的有用性成正比。你不想完全消除小的分量,而是希望权重也能捕捉输入特征的所有属性。
我们在论文中讨论的是,这种属性在一个层中可能无用,但在多个Transformer层中对于学习数据的分层表示是有用的。原因是如果数据是分层生成的,从类标签y开始,该标签将分层生成代表该类图式的所有潜在变量。
最简单的情形如ImageNet,假设这是一个人类类别。y等于0意味着这是人类。基于此,我们会生成所有潜在变量,如头部、面部、微笑和表情等。你需要填充这些分层潜在变量以生成实际的人类图像。
所有这些潜在变量都是隐藏的,你看不到它们,也没有标签,你需要自己在训练中推断出来。你假设数据存在分层结构,然后可以证明这种分层结构有助于模型学习。
这种结构导致令牌之间产生非常强的共现关系,因为它们在层级上非常接近。然而,令牌 M 和 A' 之间的共现率会很低,如果它们的共同潜在祖先层级很高,你可以证明这种情况确实存在,实际上有明确的表达式。如果 H 很小而 A 很大,意味着层级结构非常庞大,且它们的共同潜在祖先在层级上非常低,那么这种共现率几乎为 1,这意味着令牌 M 和 R 之间的共现率会非常高。根据我们之前的分析,注意力机制会尝试迅速将这两个令牌组合在一起,这是非常好的。
这也同样有利于其他层级结构的学习。例如,如果你想学习一个具有非常深层潜在分布的分布,注意力机制会在较低的层级上将这两个令牌结合起来,从而形成某种低层级结构的表示。一旦拥有这种中间表示,由于它们的共同祖先层级很低,它们也会频繁共现。因此,自注意力机制会将它们分组,并自下而上地逐步构建整个层级结构。
自注意力机制之所以推迟那些不直接相关的令牌之间的关联,是因为它们可能属于两个不同的低层级结构。你不希望立即连接 M 和 A',因为如果这样做,你将无法学习到层级结构,而是学到 M 和 A' 之间某种虚假的相关性,这不利于学习数据的真实表示。注意力机制通过减缓非直接相关令牌之间的关联速度,赋予了你学习正确表示的优势。
这就是为什么注意力机制中存在一种延迟或推迟的结构。你首先学习具有高共现率的两个令牌之间的共现,然后才学习与查询令牌共现率较低的令牌。我们之所以最终学习具有局部共现率的两个令牌,是因为我们希望拥有一个对所有分布都不变的算法。当你拥有数据时,你并不清楚数据分布是浅层的还是深层的。
如果是浅层模型,你最终需要学习 M 和 A' 之间的关联,即使它们只有局部共现。在这种情况下,你需要训练模型很长时间,直到注意力机制最终能够捕捉到 M 和 A',你仍然能学到数据。但同时,你也希望同样的机制能在深层层级结构中起作用。在这种情况下,它仍然有效,因为这两个令牌会学习得更快,在关联 M 和 A' 之前,它们会被更快地学习。
因此,自注意力机制可以在两种场景下适用,而无需知道数据分布中哪一部分是浅层或深层。基本上,这总结了 Drama 框架,我已经花了很多时间讲解。我们还有很多未来工作,例如如何处理嵌入向量。在这里,我们假设嵌入向量是相似的,因此我们希望处理近似正交的设置。
我们还希望形式化地表述多层 Transformer 的混合。在之前的分析中,我们进行了定量分析,说明了在我们分析的单层设置中给定机制会发生什么。我们尝试将其应用于多层,看看它是否真的能解释很多事情,但这将是一项繁重的工作。
我们还发现了一些其他有趣的结构,其中之一称为“神经元超叠加”。一个神经元可以被多个令牌组合激活。例如,一个神经元可以被两个完全不同的短语激活,但它们都表示在同一个神经元中。这非常有趣,但理论上可以证明,相同的嵌入实际上可以将两个不同短语的两种不同表示包含在一起,它们在 MPS 的较低层级组合成相同的权重向量。
这也很有趣,可以在分析中看到。我没有足够的时间涵盖这一点,但如果你感兴趣,欢迎查看我们的预印本,那里有很多有趣的组成部分。好了,第一部分到此结束,主要是对注意力的理解,有很多系列、理解和方程。第二部分更多是关于应用,即我们如何利用张量的稀疏性来使推理更快。
这部分是与其他人合作的,关于如何在不同场景下利用容量。第一个称为“稀疏”论文,该论文基本上专注于推理速度,试图通过利用上下文稀疏性来确保推理更快。我们做的是,你知道你将输入发送到多层 Transformer,然后每次发送输入时,你都需要计算所有的注意力头、计算 MPS 和隐藏节点,并再次计算注意力头,直到你遍历所有层。这实际上非常慢。
之所以慢,是因为大多数时候它是内存绑定的。你必须首先加载所有的 Wq、Wk 矩阵,然后为不同的头计算注意力。你知道,虽然 GPU 内存通常很大,例如 A100 是 80GB,但缓存要小得多,A100 的缓存通常只有 40MB。如果你能把所有内容放入缓存并计算,实际上会快得多,只需要几个 CPU-GPU 周期。
但是,当你从内存加载到缓存时,需要等待几千甚至几百个内存周期,这花费的时间更长。因此,你会看到许多关于稀疏注意力的论文,这些论文宁愿重新计算反向传播过程中的所有内容,也不愿从内存中加载所有内容。这实际上是非常有趣的权衡,旨在使计算更快。在这里,我们也在做同样的事情,我们基本上说我们只……
我们希望加载期望的参数集。对于注意力机制,如果我们能预测出哪些部分实际上被使用了,例如在前馈网络中,我们只加载这些 W 矩阵对应的行和列。同样,在 MLP 层中,我们只加载下层 MLP 的行和列,这样我们就知道,例如只有神经元 2 和神经元 6 需要被计算,我们可以基本上忽略其他所有神经元,因为我们预期在值设置的情况下输出为零。在这种情况下,我们可以节省大量的内存加载,这将基本带来更高的效率。
由于存在稀疏性,我们可以通过设计基于相似性的预测来实现这一点。我们从一个评估集开始,例如几千个 token,然后将它们送入注意力机制和 Transformer 中,记录哪些注意力头被激活,哪些 MLP 节点被激活。我们将这些数据记录为训练数据,给定数据输入和注意力激活情况,我们可以训练一个分类器或进行近似最近邻搜索。我们使用分类器来预测哪些 MLP 神经元将被激活,然后执行该分类,只加载会产生非零分量或非平凡分量的内存,从而使事情变得更快。
这就是 Dju 的基本思想。D 的目标首先是展示它将带来更快的 U 生成,延迟变得显著降低。与现有的 Hugging Face 实现或 F-transform 实现相比,最终结果保持不变。如果你结合 D,对于大型模型中的各种指标,你基本上拥有相同的性能。此外,我们还展示了 D 可以与现有的量化和压缩技术相结合。例如,W4A16 意味着对权重使用 4 位量化,对激活值使用 16 位量化,这将进一步提高延迟方面的速度,并且与现有的 DJ 方法兼容,你在不同指标上仍能看到相同或甚至略好的性能。
这是我们拥有的论文之一,我们最近也在研究长序列生成的挑战。对于长生成,首先意味着序列非常长,因此你需要大量内存来存储所有先前的序列 KV 缓存;其次,它非常慢,因为众所周知,Transformer 的注意力计算相对于之前的长度是二次方的。我们需要解决方案来解决这两个问题。此外,我们还面临超出先前窗口的问题爆炸,这是 PIN SE PR 模型(如 Llama 2)中出现的另一个问题。Llama 2 具有 4K 的上下文窗口,如果上下文长于 4K,困惑度实际上会突然变得极高或无穷大,而不是逐渐下降。在这种情况下,我们如何找到补救方法,使生成非常平滑以获得良好结果?
首先,让我们谈谈如何减少生成 token 时的内存使用。在推理过程中,自注意力机制的工作原理是:你有这些 token,然后必须计算这些 token 与所有先前 token 之间的自注意力。这实际上是二次复杂度的原因。但问题是,我们真的需要存储所有先前 token 吗?答案是否定的。如果你检查自注意力的统计信息,你会看到这种曲线。该曲线基本上衡量共现性和注意力分数。首先,这两者高度相关,这与我们的先前分析一致;其次,你会发现大多数注意力分数被分配给一个非常小的 token 子集。大多数 token 实际上没有收到任何注意力,只有少数 token 收集了大量的注意力分数,这些被称为“Cheer”(或重要 token)。
我们发现,如果在推理过程中去除这些 Cheer,准确性会大幅下降。这意味着它们在维持不同指标和 AR 的准确性方面非常重要。自然的问题是,也许我们只保留这些重要的 Cheer,去除所有其他注意力和先前生成中的 token。确实如此,我们发现一个非常简单的方法有效。例如,在生成时,监控这些 token,如果它们在先前生成过程中的注意力分数非常低,在某个时刻将它们完全去除,这称为“Very Local”算法。
其操作非常简单:一旦生成新 token,你保留它们的注意力,并监控先前 token 获得的注意力。对于每个先前 token,如果注意力分数非常小(在求和意义上),你就将其去除,只维护固定大小的 KV 缓存。事实证明,这种方法效果相当好。如果你只保留 20% 的先前 token,在许多不同场景中仍能维持非常高的指标。这里我们使用的是 Llama 而非 Llama 2,因为发布论文时 Llama 2 尚未存在,我们使用 Llama 来评估该方法是否有效。
结果显示,如果使用 Cheer 方法,即使只使用 20% 的先前 token 并丢弃 80% 的其他 token,分数仍能保持,这令人印象深刻。你可以想象,如果有 1000 个 token,你只使用其中的 200 个,性能仍与使用全部时相似。我们还在两种不同的 GPU 上进行了测试,一个是 T4,另一个是 A100。你会发现我们的方法称为 H2O,由于使用更少的内存和更少的计算,实际上提供了更高的吞吐量。
为了获得性能而进行计算,效果其实相当不错。这是我们被今年NeurIPS接收的论文,虽然得分很高,但遗憾的是没有获得AO Spotlight。我认为它本应获得AO级别的Spotlight。此外,该方法还兼容条件生成,同时能生成重复率更低且更具创造性的句子。这很有趣,因为通过剔除不相关的词元,可以为生成更优质的词元释放更多空间。这可用于生成故事,我们还有后续关于流式处理的工作。
这里有一个问题:既然我们拥有这些数据及其良好的统计特性,但它们究竟位于何处呢?经过可视化处理后,我们发现它们实际上集中在前几个词元中,这非常有趣。这启发了我们“流式自回归搜索”(Streaming ARS)的想法。与其使用全注意力机制,我们可以只保留前几个被称为“注意力汇”(attention sinks)的词元。
通过保留前几个词元,我们可以在不降低复杂度得分的情况下继续生成新词元,这就是流式自回归搜索。这非常好,因为它结合了两种方法的优势:你可以使用全注意力机制,虽然较慢,但在窗口外生成时能提供极高的容量;也可以使用窗口注意力,虽然不具备二次方复杂度,但在移出原始词元场后,只要保留前F个词元并生成后续词元,就能兼顾低复杂度和高容量得分。
基本曲线显示,我们的流式自回归搜索(红色曲线)即使在输入长度极高(如四百万词元)时,容量依然很低,而之前的方法则给出极高的复杂度得分。你也可以使用窗口注意力,它提供相当的完整性,但带有重新计算(Re-computation)的窗口注意力比我们的方法慢得多。
让我检查一下能否播放视频。这段视频展示了我们的方法如何实现大型语言模型生成的无限流式处理,而其他方法效果不佳:要么耗尽内存,要么生成垃圾内容。看来连接有些问题,让我再试一次。现在可以了,你可以看到我们可以持续流式传输有意义的句子。
其他方法之所以失败,是因为如果一直使用全注意力机制,必须存储越来越长的上下文,最终内存会崩溃;或者生成完全无意义的内容。在这里,性能崩溃了,出现了随机乱码,因为失去了初始的词元同步。而在我们的项目中,关键组件是维持生成的质量,保留该关键组件,系统就能正常工作。
最后,我想谈谈如何扩展训练模型的窗口。正如我之前提到的,对于P模型,如果我们一直生成直到超出其上下文窗口,系统就会崩溃。可以使用不同的补救措施来解决这个问题。之前的流式RMS方法保留前几个词元即可工作,但问题是,如果使用全注意力机制,如何解决这些问题呢?
我们实际上有另一种方法来解决这个问题,称为位置插值(Positional Interpolation)。我们观察到一种可能的解释是,注意力函数在上下文窗口内表现良好,是有界的(小于1且大于-1)。但一旦超出这个窗口,函数会变得疯狂,这是外推的问题。外推时函数行为异常,而内推则误差更小。
因此,如果我们想生成4K长度的句子而不是2K,与其进行外推,我们可以缩小4K句子中的位置编码,使其仍适应2K的窗口。只需在代码库中进行一行简单的缩放更改,系统就能正常工作。我们展示了只需不到1000步的微调,模型就能很好地外推到超出预训练上下文窗口的长度。
例如,一旦使用位置插值,我们可以轻松地将Llama 1模型默认的2K上下文窗口扩展到32K。在32K中,窗口更高,困惑度更低。这只需很少的微调步骤(不到200步)即可将上下文窗口从2K扩展到32K。改变位置表示方式的简单开关引发了这一有趣现象。
我们还表明,在更大的基准测试中性能保持不变。在所有基准测试中,经过插值到更长的上下文窗口后,模型仍能提供合理的性能。虽然略有下降,但其余组件表现良好。这篇论文在Hugging Face上非常受欢迎,我们已经看到许多基于不同P模型使用此技术及其改进版本的插值模型被微调。
这篇论文发布两天后,Reddit上有人讨论了一种更改进的技术。如果你感兴趣……
好的,那基本上就是我所有的幻灯片了。如果你有更多问题,请告诉我,我们也可以在后续的讨论中进一步交流。感谢大家的关注。谢谢,谢谢。一个小时的演讲,是的,他分享了很多来自理论研究的信息给我们。现在可能是提问时间了。我先问一个问题。你提到了使用量化技术的模型压缩方法。
这不仅仅是为了压缩,还能提高速度。是的,速度主要是推理速度。没错,这是针对推理速度的。我认为整个第二部分都是关于使用固定模型进行推理,或者进行微调。你认为如果模型被压缩,速度自然会提高吗?
情况并非如此自然。通常,如果压缩没有做好,实际上进行推理时需要花费更多的时间。如果你考虑不同的推理方式,比如量化,你所做的是将每个权重量化到某个簇中。首先进行一些聚类,得到权重的某种中心点。
然后,你不再存储实际的浮点数,而是存储量化后的数字,可以用8位或4位表示。在这种情况下,你必须首先为每个权重进行检索,从你的字典中检索这些量化数字并加载到内存中,然后计算注意力机制或MP分数。
这基本上需要矩阵乘法,然后得到实际的数字,再进行前向传播。这里面有很多内部组件。如果你没有正确执行这些步骤,速度会比原始方法慢得多。但是,已经有很多包可以用来做这件事。如果你愿意使用它们,通常他们会先在内存中通过非常高效的方法进行实时解压缩,然后使用现有的技术进行前向传播。
关于Llama,我们有几个版本。7B是最小的,还有5B。这些模型之间的本质区别是什么?它们在性能上有很大差异。这是第一个问题。第二个问题,你认为模型比较对Llama重要吗?
好的,第一个问题是关于性能差异。当然存在明显的性能差异。差异有多大?我认为这取决于你的任务。对于7B模型,在特定任务上表现其实相当不错。例如,你可以将该模型应用于不同的子任务。
我们实际上有工作尝试使用7B模型来生成故事大纲,并评估故事大纲。对于7B和13B模型,它们表现良好。但是,如果你想生成故事的实际内容,因为其中可能包含许多组件,那么你可能需要70B的模型。
70B模型会有更多的内容,并且包含更多样化的组件。所以,如果你有很专业的需求,我建议先尝试小模型。如果你有更多样化的需求,那么较大的模型肯定更好。
是的,因为有很多关于模型比较的研究。你认为如果模型变小,性能会持续下降吗?不可能。我建议尝试将70B模型压缩到30B左右。你拥有的模型越大,潜力就越大,压缩带来的提升也越明显。
我已经看到一篇名为SPQR的论文,他们基本上可以将34B模型压缩到单个GPU中。然后你可以使用单个GPU来驱动3B或30B模型,这已经是很了不起的事情了。你可以尝试这种方式,这样你可能会获得更高的提升。
还有一个关于计算机视觉鲁棒性的问题。Transformer的鲁棒性如何?实际上,它并不鲁棒。最近有一个名为“攻击”的网站。这是一个非常简单且有趣的现象。
这是一项非常近期的工作,来自卡内基梅隆大学,我也在Google看到了相关内容。实际上还有另外两位Google的研究人员,但由于公司不希望他们发表攻击性论文,所以没有列出他们的名字。你可以查看这篇论文,他们展示了非常漂亮的攻击模式来攻击现有的算法。
他们基本上是在大型模型的提示符后添加一个后缀,突然模型就会给出不良内容。这非常令人印象深刻。让我看看是否有例子。我认为这个例子可能已经不再有效,因为他们已经修复了大型模型中的这个问题。但如果你运行他们的代码生成新的模式,也许仍然有效,我不确定。
你可以看到,生成一个毁灭人类的逐步计划。通常,如果你问这些问题,GPT-4不会给出任何答案,它会说抱歉,我是大型模型,无法提供毁灭人类的内容。但是,如果你添加一些随机内容作为后缀,突然GPT-3.5或2.5就会给出所有答案。
这在某种程度上非常严重,因为它破坏了结构,打破了这种安全护栏。它给出了本应不安全的内容。我认为还有很多研究空间,因为这是第一篇此类论文。在以前,Ian Goodfellow曾凭借攻击论文获奖,通过改变几个像素就能攻击AC系统。
现在同样的事情再次发生。我预计会看到很多后续研究。首先,这些攻击遵循非常奇怪的模式,你有一堆随机标记,突然就起作用了。人们会说这很容易过滤掉,你可以设置一些简单的检查,比如检查这些是否是良好的句子,如果没有良好句子就报警。
这很容易被过滤掉。但我想象未来攻击者会通过添加空格来攻击输入,并且仍然有效,它会随机给出答案。这也是可能的。我认为如果你想在这方面工作,还有很多空间。
谢谢你的演讲。我对Transformer的学习策略或动力学非常感兴趣,特别是你提到的两点。
我有一个问题,关于你是否研究过谱半径(Spectral Radius)或稳定性年龄与你的研究之间是否存在联系?我注意到在这些方面有很多相变(phase transition)现象。好的,谢谢,我认为这是一个很好的问题。我认为边缘混沌(Edge of Chaos)或稳定性基本上是在分析当学习率很大时的情况。如果你使用较大的学习率,结果是你可能会摆脱具有尖锐极小值(sharp minima)的区域,转而进入具有更平坦极小值(flat minimum)的区域。所以,我会说这两项工作没有直接联系,但未来可能会有联系。因为如果你考虑边缘混沌和稳定性,你是将整个函数视为高维函数来处理,你并不真正知道这个函数对应什么。而在我们的分析中,我们打开了Transformer的黑箱,指出这个黑箱的动力学对应于网络的一种特定架构。因此,边缘混沌与注意力机制之间可能存在联系,这是真的,但我们尚未从这个角度去思考,未来可能会有这方面的联系。
我还有关于稀疏性(sparsity)的问题,你在应用部分提到可以减少密度,从而减少参数数量。是的,我认为直接使用稀疏性来减少参数数量是可能的。我想人们思考这个想法已经有一段时间了。如果事物是稀疏的,为什么一开始不稀疏呢?答案是这很棘手,因为在开始时需要大量的参数来探索所有不同的方向,然后它才会变得稀疏。这与彩票假设(Lottery Ticket Hypothesis)有关,这是一篇著名的论文,曾被评为AAAI的最佳论文之一。大概几年前,它指出你在网络参数中有很多彩票可以抽取,每个参数代表数据中的一个可能方向。一旦开始训练,一些彩票就变成了“幸运彩票”,因为它们恰好很好地拟合了数据,这些彩票会大幅增长,从而成为网络的一个子集,基本上对于预测下一个标记或类别非常有用。但在之前,你并不真正知道哪一个是幸运的,你需要有足够的参数来进行抽取,一旦开始训练,其中一些就会变得有用。实际上,这也承认在我们之前的当前正在进行的研究中,我们将会有相关的研究,虽然不会很快,但会有这方面的后续研究。
谢谢。如果没有更多问题,让我们表示感谢。