核心而言,我们都知道 Transformer 具备所有重要特性,并拥有能支持各类应用的有趣结构。在 Transformer 中,其与多层感知机(MLP)的区别在于存在注意力层,而该注意力层实际上发挥着神奇的作用。对于注意力层,我们知道有查询(Query)和键(Key),它们进行内积运算,计算 Softmax 并使用 Softmax 值对前一层嵌入进行重加权。多次执行此操作后,通过预测下一个词元,神奇地产生了很好的结果。

因此,本次讲座的大部分时间将致力于探讨如何理解这一机制。我们主要讨论两篇论文:一篇是已被欧洲会议 2023 接收的《Scan and Snap》,另一篇是我们后续被 CSI Clear 接收的论文《Drama》,旨在深入理解 Transformer。我们从这篇基础论文开始,基本旨在理解单层设置下的注意力机制。

我们总是从非常简单的设置开始,以便理解数学公式和结构,从而更好地掌握多层 Transformer。在单层设置中,我们有一个非常简单的输入输出模型。输入基本上是一组上下文词元 x1 到 xt-1,最后一个词元称为查询,发送给查询并进行自注意力计算。

一旦获得跨多个词元的概率分布或注意力分数,我们就使用这些注意力分数作为权重来计算输出特征。该特征经过归一化、前馈层和 Softmax,用于预测下一个词元 xt+1。这就是模型的基本原理,T 是我们试图用来构建端到端数学结构的公式。

基于此,如果你按字面意思写下来,会发现很多参数,如 WQ、WK 和 U,这使得计算非常复杂。如果尝试计算梯度,会非常混乱。因此,我们实际上采用了两个非常重要的技巧。首先,你要确保使用独立变量对问题进行重新参数化,这对本文及后续更深入理解多层 Transformer 的工作至关重要。

这实际上是将许多变量重新参数化为 y 和 z。其中 y 基本上是顶层解码器权重,z 是自注意力矩阵的成对对数几率。突然之间,动力学变得更容易分析,我们可以得出一些结论。这是主要的第一步,我们可以据此写出 y 和 z 的动力学方程。

我稍后会详细讲解,因为该方程看起来非常复杂。在接下来的几张幻灯片中,在介绍 Drama 之后,我们将有一个更简单的公式,然后将它们结合起来,事情就变得容易多了。我们首先从结论开始,不想先深入细节,而是讨论 Transformer 的特性。

以下是 Scan and Snap 论文的几个主要假设。首先,没有位置编码。我们暂时不讨论位置编码,因为处理起来较难,且已有论文表明即使没有位置编码,仍能获得合理的性能。其次,序列长度趋于无穷大,即拥有很长的序列长度。

第三,这是 Scan and Snap 论文的一个特定假设,即解码器 Y 的学习率大于自注意力层 Z 的学习率。最后,还有一些其他技术假设。在分布方面,我们也有一些假设,假设有一系列从 1 到 k 的序列类别。

对于不同的序列类别,有两种不同类型的词元。一种是称为“独特词元”的词元,仅出现在一个类别中,而不出现在其他类别中。另一种是“常见词元”,出现在多个序列类别中。你可以用数学形式表示:对于独特词元,给定序列索引,该词元序列的概率仅在一个序列类别中大于零。

对于常见词元,它们可能出现在多个序列类别中。基于这些假设,另一个问题是自注意力层的行为如何?以下是主要结论以及 Transformer 动力学的整体图景。首先,我们引入一个关键统计量,称为 CL 标题,即共现概率(来自数据集的概率)与成对注意力矩阵指数之间的乘积。

你想分析 CL 标题的行为。你会发现,对于独特词元,该标题仅在一个类别中非零,因为对应的共现概率仅在一个类别中非零,而在其他类别中为零。因此,你会看到非常明显的模式。但对于常见词元,它们出现在两个序列类别中。

第一个结论是,对于常见词元,你可以分析其动力学,结果显示梯度会将所有常见词元的注意力分数拖拽得越来越小。因此,z 会变得越来越小,因为 z 关于时间的导数小于零。这里的符号表示时间导数,即 z 的时间导数小于零。

因此,随着时间的推移,u 变得越来越小。这对常见词元基本成立,即出现在多个序列类别中的词元。另一方面,你可以证明对于独特词元,其对应的 z(即注意力对数几率)会随时间增长。下图展示了其增长情况。

对于所有这些独特模式,独特词元的注意力分数会上升,并且这种增长……

这种增量也会使最终的注意力分数C随着层数增加而变得更紧密。因此,从这两点可以看出,注意力机制有点像可学习的TF-IDF。如果人们以前在Transformer时代之前从事过自然语言处理工作,可能听说过这种TF-IDF的表述方式,这意味着你想要找到那些具有高频率的词,同时也希望找到具有逆文档频率的词。

第一项指标讨论的是每个类别中非常重要的词,而第二个标准基本上要求模型过滤掉在多个文档中过于通用的标记。例如,在所有文章和所有常见词汇中,它们缺乏信息量,因此在进行文档分类决策时应该抑制它们。另一方面,如果你有针对特定类别的特定标记,那么我们应该给予关注。

例如,如果你谈论体育和梅西,那么梅西对于体育来说是一个非常重要的标记,并且存在连接,你可以利用这一点来进行更好的文档分类。此外,我们实际上可以量化注意力分数的增长率。基本上,ZML是自注意力矩阵的一个元素,这实际上是时间的函数。

给定序列类别和注意力条件概率L的情况下,ZML的增长速度会更快,我们可以解释为什么以及它是如何增长得更快。因此,我们可以得出一个定理,该定理告诉你两个不同标记之间的比率,它们增长了多少以及增长的速度。

该图还显示,如果你拥有与查询具有非常高共现性的不同标记,那么它们的增长速度将远快于那些仅偶然与标记共现但概率不高的标记。因此,在训练过程中,你会看到这种非常高的跳跃。

从某种意义上说,这被称为上下文稀疏性,因为随着时间的推移,你会看到经过归一化后的注意力分数C实际上会变得越来越稀疏。因为赢家通吃效应使得富者愈富,穷者愈穷。

随着时间的推移,你可能会看到一两个标记脱颖而出,这就是为什么你在训练过程中看到注意力变得越来越稀疏的原因。我们称之为上下文稀疏性的原因是,这取决于查询。对于不同的查询,你会看到非常不同的曲线。

对于不同的查询标记,比如查询标记1,会有类似的情况。从不同的查询标记来看,可能会有不同的标记与该特定标记具有高共现性。然后你会看到非常不同的模式,这就是查询依赖的稀疏性。

最后,我们实际上展示了注意力存在两阶段效应。人们可能会根据这张图认为,随着时间的推移,你会看到与查询具有高共现性的标记的增长越来越高,最终你会看到赢家通吃的效应。但实际上并非如此。

在我们的分析中,我们最终将展示存在两个不同的阶段。一个称为注意力扫描阶段,赢家通吃效应就发生在这个阶段。另一方面,第二个阶段称为注意力锁定阶段。

在锁定阶段,一切都会稍微慢下来,最终达到饱和。一旦你看到富者愈富的效应,经过一段时间后,注意力模式就会冻结,变得有点像少数派通吃的局面,但这不像赢家通吃。

这就是Scan and Snap论文所展示的整体画面。基本上这是主要画面,我们有一些不同的模拟来证明这确实是事实。这里是一些用于手术式分析的整体策略。

如果人们感兴趣,这里有一个非常简单的策略来说明如何证明这一点。首先,我们要利用无限序列长度的力量,基本上将所有项转化为包含概率分布的统计项。这是第一步。

第二步,因为我们假设解码器Y的学习率远快于自注意力矩阵Z的学习率,那么在分析解码器的动态时,你可以基本上将自注意力矩阵视为常数。

一旦我们有了那个漂亮的方程,它告诉你梯度反向传播到状态(即注意力层)是如何与输入解码器的数据相关的,然后我们可以将其代入自注意力层,进而分析自注意力层中发生的事情。

这基本上就是如何分析单层Transformer中两层结构的方法。我们进行了一些非常简单的真实实验。例如,在WikiText2上,如果你采用这种学习率结构,那么随着时间的推移,你会在注意力中看到非常稀疏的模式。

如果你在实践中做了很多训练Transformer的工作,你也会看到这种学习模式的变化。这就是Scan and Snap论文非常简单的内容。然后我们讨论了如何改进Scan and Snap,以及如何摆脱这些假设。

我们有令人烦恼的假设,比如没有嵌入向量,没有残差连接。解码器需要比Transformer注意力学得更快,这在实践中从未发生过。此外,我们还有单层分析。

那么,如何摆脱这些限制呢?下一步是引入名为DRAMA的工作。这是我们第二篇后续论文,旨在比之前的论文更好地理解这些动态。在那篇论文中,我们实际上发现了MLP下层和自注意力层之间训练动态的一些非常nice的属性。

我们将它们结合到一个称为修改后的MLP的层中。该层实际上捕捉了两层的动态,同时更加简单。如果你同时考虑自注意力和MLP层,那基本上就是大致思路。

关于Drama模型,我们基本上在Transformer中引入了一层残差连接,并添加了许多符号来分析其内部机制。考虑到此处额外的ResNet连接,这些残差连接在之前的分析中缺失,但现在我们可以将其加回,展示其发挥的作用,并利用其中的非线性激活函数phi。与此前类似论文中直接线性映射到softmax不同,Decoder层引入了非线性,这是我们研究的主要差异。

基于这些设定,我们展示了优美的性质,并引入了嵌入矩阵U。我们假设嵌入向量之间相互正交且不随时间变化,这一假设曾受到审稿人质疑。为此,我们提供了图表证明:在PyTear等模型中,不同层嵌入向量间的相似度确实很低。横轴为训练动态中的小批量,纵轴为余弦相似度。

余弦相似度在0到1之间变化,1表示完美对齐,0表示正交。数据显示,训练过程中余弦相似度并未显著增加,维持在0.03左右,表明即使在不同层之间,嵌入向量也几乎正交。图中每条曲线代表不同层,颜色区分层级,证实了正交假设近似成立,但嵌入动态分析留待后续论文。

基于这些假设,我们发现MLP下层与自注意力层之间存在联合动态。我们可以根据下层权重的幅度计算自注意力,从而在动态分析中忽略自注意力层的训练,直接代入方程。该方程讲述了注意力与MLP下层的共同故事,简化了Transformer动态分析,且无需假设Decoder层训练快于自注意力层。

为了回答学生提出的关于Scan、Snap和Drama对比的问题,我们补充了幻灯片,提出统一的一般公式。共同假设包括:下层权重W和自注意力权重Z均为可训练参数;嵌入U固定且列正交;输入token向量为one-hot列向量以便计算频率。

这些假设在第一层成立,因为token由one-hot表示,但在多层及中间非线性作用下可能不成立。Scan和Snap假设存在L2归一化、激活函数线性,且Z比W学习得快;而Drama设定不同,phi可为恒等或非线性,无归一化,具有更多研究方向。

以下是第一个定理的推导摘要,比论文中的证明更简洁,将在最终版中更新。针对Drama的联合动态验证,我们回到Scan和Snap的线性激活设置,检查预测是否一致。结果显示一致:注意力变得稀疏,且判别性与相干性乘积最高的组件曲线增长最快并率先饱和。

更有趣的是,我们将Drama扩展到非线性激活。如果激活函数是非线性的,情况会如何发展?这为理解Transformer内部机制提供了新的视角,超越了传统线性假设的局限。

之前的扫描步骤论文无法提供这些信息。但实际上,我们可以观察到与非线性激活相对应的更有趣的行为。注意力机制首先会变得更加稀疏,这正是散点图论文所预测的;但同时,在后续的激活中,它又会变得更为密集。这展示了非线性激活与线性激活之间的差异。在线性激活中,注意力只会变得越来越稀疏,直到饱和;而在非线性情况下,后期注意力会重新变得密集。

我们不想深入探讨其中的数学细节,而是首先验证这一理论是否与真实实验一致。我们在两个真实世界的文本数据集 WikiText 2 和 WikiText 103 上训练了多层 Transformer 模型,观察到的曲线与理论预测完全吻合。特别是在第一层,如果使用非线性激活训练单层 Transformer,你会看到注意力先下降然后回升。这与理论绘制的曲线非常相似。

如果进行多层训练,顶层也会观察到类似的现象:注意力先下降再回升,这非常有趣。我们需要理解这种行为的原因,因为它并不直观。对于单层模型,直觉上应该是一次性完成学习,为何后期还要拾取那些不显著的特征?首先,稀疏化是由于与扫描步骤相同的机制:与查询共同出现的 token 会被优先拾取,导致注意力熵降至极低。

一段时间后,注意力分数和熵会上升,因为模型开始拾取那些不显著但在时间上具有韧性的特征。由于使用的是小批量(kilo mini batches),这种下降和回升的过程是必然的。缩放比例可能并不重要,因为可以通过改变学习率来调整。在其他模型的真实实验中也观察到了类似的行为。

我们假设这一属性在多层结构中是有用的。单层模型可以直接一次性学习所有特征,无需这种复杂机制;但在多层结构中,为了学习分层数据表示,这种机制至关重要。我们只能看到顶层的最终标签和底层的最低层 token,中间存在控制数据生成过程的潜在变量,而我们并不知晓其具体运作。

Transformer 的目标是自动学习数据集中的潜在表示。我们假设注意力跳跃式上升是因为模型在此处学习了潜在表示。定理表明,如果在层级中两个 token 非常接近,它们共同出现的概率接近 1;如果相距甚远,概率接近 0。这由共同潜在祖先的高度决定。

这一属性与 Transformer 本身无关,而是分层生成模型的性质。Transformer 的学习机制是先学习高频共同出现的 token,再学习稀疏共同出现的 token。这对于深层和浅层潜在分布都有效。在深层分布中,模型同时学习关联紧密的 token 对,从而隐式构建层级结构,供顶层组合使用。

这避免了学习那些虽然共同出现但不重要的 token 对,因为它们可以通过分层学习间接习得。这解释了 Transformer 为何以这种方式学习特征。另一方面,如果数据由浅层潜在分布生成,层级结构不明显,我们只需……

那里的分布非常直接。那么变压器学习会发生什么?变压器首先会学习出现频率高的标记,比如 m 和 l。但最终,它会学会 m 和 l' 之间的对应关系,对吧?因为这两者仍然有一定的对应关系,尽管可能很弱。基本上,相同的机制,即注意力机制,可以在不知道内部结构的情况下,同时学习深层潜在分布和浅层潜在分布。这基本上为你提供了关于为什么变压器可以在不知道底层分布的情况下做这么多有趣事情的见解。它会自动适应数据的结构。这基本上解释了为什么我们看到注意力先下降然后又上升。

回到图表,你会看到有趣的行为。如果你训练相同的模型,使用相同的数据集,训练这个第一层模型,即单层变压器模型,你会看到非常深、非常有趣的结构。这非常明显。但是,如果变压器的层数变多,即深层变压器,那么在较低层中,它们基本上会下降,但没有回升。而在顶层,仍然存在一种反弹的特性。这种情况的原因也可以用这个理论来解释。

如果你有多个层的变压器,那么你首先学习这些频繁共现的共现关系。一旦你学会了这个,你就不需要再次学习空气和帝国之间微弱的共现关系,因为你不需要学习这两个共现关系。因此,你不再有这种反弹特性。因为这种反弹特性已经被之前的机制解释掉了。这就是为什么在使用多层变压器学习数据时,你不会在较低层看到曲线在下降后反弹。

我认为目前这是我脑海中的一个理论,但我们还没有测试其他可能的解释。好的,我明白了。是的,我不知道有其他论文提出解释这一点。是的,目前,但我的意思是,看看是否有其他替代理论会很有趣。是的,这只是扩展的一种方式。有没有办法生成一些合成层次数据来证明这个理论?

是的,我们确实在一些一次性实验中这样做过。因为这个理论的一个可能含义是,随着时间的推移,你会在不同的变压器层中学习这些潜在变量,这确实符合我们的分析。因为如果我们能生成层次数据,从合成实验中,你可以使用变压器来学习它。你实际上会看到潜在层与变压器的隐藏层之间几乎百分之百的相关性。特别是在前几层,你可以在论文中的表格中看到。

首先,这里的因果关系并不相关。我们不知道因果关系是否会起作用,因为这里我们只分析相关性。没有因果关系。是的,但确实似乎它会先学习强注意力,强相关性。因为如果你看到这两个标记经常发生,那么它们之间可能存在真实的相关性。是的,所以我认为我们之前已经解释过一点。

如果你只用浅层变压器训练数据,你会看到非常清晰的反弹。如果你训练深层变压器,那么低层一旦下降,就不会反弹,因为反弹意味着低层试图学习弱相关的特征。如果这些特征已经被顶层解释掉了,低层就不需要再学习它们了。所以这就是为什么它只下降,从不上升。

我的问题是,如果你在几个 epoch 后解冻它们,比如一个或三个,你认为它会变成什么样?低层会达到相同的水平吗?它会反弹并停留在那里,还是会再次下降,然后高层会怎样?这是一个非常有趣的实验。是的,我建议你可能会看到低层反弹,然后再次下降。实际上,我在某些配置中看到了这条曲线。

这实际上非常有趣。还有其他实验表明,通过改变不同的学习率,你会看到非常不同的训练曲线。显示这种反弹特性的训练曲线具有最高的验证准确率。这意味着这可能是学习数据的正确方式。与其他类型的学习率相比,你可以在论文中查看这些实验。我们还没有展示这一点。

这取决于你如何定义因果关系。因果关系可能意味着如果你扼杀了第一个,第二个就不会发生。但反之则不然,因为它是对称的。如果是这种情况,那么你可能想要设计属性,以强制注意力矩阵也具有相同的属性。这是可能的。是的,我认为这是一个非常好的问题。

我们实际上在实践中尝试了我们的参数化,即 Y 和 Z 参数化。发生的情况是,它仍然可以学习,但性能显然不如原始变压器。所以我们实际上有一个称为 YZ Transformer 的东西,即我们之前展示的 YZ 参数化。你可以实际训练它三层;它确实有效。但是当你训练多层时,它实际上效果不佳。这是因为嵌入的力量。

因为在 YD 变压器中,没有嵌入。嵌入都放在这个 Z 矩阵中。Z 非常大,它是词汇表大小乘以词汇表大小。但是这个巨大的矩阵在实际训练中可能无法很好地训练。在实践中,我们实际上不喜欢训练这个巨大的矩阵,而是训练嵌入以及权重。

基本上是在模仿这个巨大的注意力矩阵。从某种意义上说,这要高效得多。因此,这一方面尚未被理论所解释,但希望未来我们能解释清楚,或者弄清楚嵌入矩阵的注意力动态是什么样的。是的,所以我们基本上必须将其分解为几个部分,然后逐一分析。

我认为这是一个很好的问题,因为我们之所以对第二个快照做出假设,是因为公式有些受限。所以,你确实需要分析两种极端情况:要么一个标记出现在多个类别中,要么一个标记只出现在一个类别中。但实际上,中间情况有很多。比如,一个标记在很多情况下出现,90%属于一个类别,但不在其他类别中占10%。这种情况会发生什么?

戏剧性(Drama)的好处在于,一旦你有了这个公式,这种性质就会自然产生。这种性质取代了常见标记与独特标记的概念。现在,我们有了一个涵盖所有标记的连续谱系。如果这个量的幅度很高,那么它就是独特标记;如果这个量几乎为零,那么它就是常见标记。所以,你在那里有一个谱系。你不再需要那个假设了。这就是公式的好处。

是的,所以你仍然有相干性和判别性。这与快照中的情况类似,但现在它变成了一个自然项,该项不需要特别处理。好的。好的。所以我们在四十分钟内主要覆盖了两篇论文。我想在接下来的二十分钟里,我们将讨论更多的实证工作。因此,我将跳过所有的公式细节。希望人们已经足够了。

是的,我认为这里有很多问题是很好的。通常,理论很难理解,但讨论未来工作可能很有趣。当然,这里未来的工作是进行嵌入反向分析。在这两篇论文中,我们基本上假设嵌入是固定的,并且彼此正交。虽然如果你检查实证结果,这是真的,但这仍然不理想,因为嵌入也应该在训练过程中学习。

但我们没有,我们还没有测试过。我们还没有真正分析过嵌入发生了什么。这有点可惜。但是,下一篇论文将尝试解决这个问题,位置编码也是其中之一。而且,我们还想要讨论潜在概念学习的动态。因为在多层设置中,我们基本上有一个关于这应该如何学习的概念,但没有具体的定理告诉你这个潜在向量是如何随时间学习的。

但这非常棘手,很难处理。好的,所以我要……呃,这是另一个不相关的幻灯片,谈论由Drama产生的一些有趣属性。我要跳过它。所以这是告诉你,MLP层中的一个向量可以编码多种不同的模式。这被称为模式叠加。这实际上已经被许多实证工作观察到。

也被Anisotropic的一篇论文所强调。但在Drama中,我们实际上也可以分析这一点,并表明如果你从头开始训练,遵循训练动态,这确实是可能的。但我要跳过它。好的,让我们进入第二部分,这是基于注意力属性的应用,主要是注意力稀疏性。

为此,我们有一堆论文试图利用稀疏性来使注意力推理更快。所以希望从现在开始,我们谈论的是实证结果,希望观众的认知负担大大减轻。获取非常简单。我们只想保留注意力MLP中的高激活标记,并利用它来加速大模型的推理。

那么,你经验上看到的是,你看到很多头在前向路径中没有被激活,你也看到很多MLP层的激活也没有被激活。这实际上并不好,因为这意味着交叉注意力权重被白白加载。为了解决这个问题,我们提出了所谓的DJW。那篇论文基本上告诉你,如何预测在前向推理期间哪些头没有被激活。

例如,这个头是42,43没有被激活。它基本上在标记上给出均匀分布,而头42和44有非常清晰的模式。它们在分布方面有很清晰的焦点。你如何预测这一点?所以我们实际上学习了一种非常好、非常简单类型的预测器,针对每一层、每个头以及每个激活,关于哪些头和哪些MLP中间层应该被激活。

我们基本上使用它来预测这种上下文稀疏性,并利用它使前向传播更快。这很简单。我要预测它的原因是,如果我们知道在MLP层中只有第二和第六个顶部六个激活会被激活,那么我们只需要加载这两个权重的相应行和列。这种加载要快得多,因为你需要加载的权重数量较少。

我们都知道,在GPU上,将内存加载到缓存是非常慢的,可能需要几百个GPU周期,而与实际计算相比,计算通常只需要几个周期,所以慢得多。所以如果你能加载更少的权重,你实际上会有更快的前向传播速度。

你可以这样做,基本上可以做所有的工程工作,这就是最终的性能。我们实际上可以使这种前向传播比不同的基准测试更快。如果你将其与Hugging Face和Fast Transformers进行比较,它实际上具有更低的延迟。这基本上是一些想法,它与量化兼容,并且特别有用,尤其是在小批量大小的情况下。

是的。我们还有一篇名为H2O的论文,试图利用稀疏注意力进行快速推理。我们都知道,如果你计算注意力,它实际上是n平方。基本上,对于每个新标记,你要计算注意力,你必须遍历所有以前的标记。它是n

但问题是,我们真的需要所有之前的 token 吗?答案其实是否定的。如果我们画出这个分布,看看有多少 token 具有较高的激活值,有多少具有较低的激活值,你会发现注意力分数分布与共现分布非常相似。正如我在之前的幻灯片中所说,这也很好地证实了两者之间的相关性。此外,我们发现如果移除那些获得大量注意力的 token,下游任务的性能会大幅下降。这些频繁出现且在前向传播中获得大量注意力的 token,我们称之为“重击者”(heavy hitters)。

如果在推理中使用这些重击者,性能表现良好;如果移除它们,性能则非常糟糕。因此,自然的算法是只保留重击者,而移除那些注意力分数非常低的 token。这种注意力算法被称为 H2O(Heavy Hitter Rules),本质上是一种局部贪心算法。在每个解码器步骤中,你会累加之前 token 的分数,并移除累积注意力分数最低的 token。你只保留一定预算的 KV 缓存 token,丢弃低于累积注意力分数阈值的 token。

这个想法非常简单,且性能表现优异。你只需保留 20% 的 KV 缓存 token,但在多个基准测试中几乎保持了相同的性能。例如,如果只保留局部 token,性能会大幅下降;但如果只保留高注意力 token,在丢弃超过 80% 的 KV 缓存之前,性能依然很好。这不仅节省了内存,因为不需要保留 KV 缓存,还大大加快了推理速度。

此外,我们还发现它有其他好处,比如能增加模型的创造性,因为它移除了一些可能限制创造性的 token。那么,这些重击者究竟是什么呢?我们进行了进一步分析,这引出了一篇名为《Attention Sink》的论文,也称为 Streaming LM 论文,该论文已被今年的 ICLR 接收。我们主要探讨这些注意力重击者是什么,结果发现许多重击者实际上是 Transformer 中的前几个 token,它们占据了大部分注意力分数,比例高达 50%。

那么,这导致了什么结果呢?我们提出假设:在许多情况下,我们可能不需要注意力机制将概率归一化到 1,但 Softmax 规则强制其总和为 1。因此,模型实际上通过让初始的几个 token 承担多个强注意力分数来应对这一限制。有趣的是,这些前几个 token 的具体内容并不重要,你可以用返回 token替换它们,困惑度依然相似。但如果移除这些前几个 token,模型就会崩溃,困惑度飙升至五千左右,意味着输出变成垃圾信息。

这一发现非常有趣,我们随后发现,如果只保留前几个 token,你就可以与模型进行无限对话,而不受上下文窗口的限制。这对于大型模型的实证分布和部署非常重要。Streaming LM 论文因此引起了广泛关注,其变体已部署在硬件设备和库中。

这是一个非常简单的想法:在生成下一个 token 时,首先保持一个固定长度的 KV 缓存预算。如果生成的 token 超过该预算,则移除中间的 token,但保留最近的 token 和初始 token,并保留它们在缓存中的注意力位置,而不是原始窗口中的位置。这基本上赋予了模型无限对话的能力。

使用 Streaming LM,你可以拥有无限对话,且所有文本都合理。当然,如果不使用 Streaming LM,要么会因为需要保留很长的 KV 缓存序列而耗尽内存,要么如果截断所有之前的 token(包括初始的前几个 token),模型会在前几个 token 超出预算窗口后突然崩溃并输出垃圾信息。

我们在许多不同场景中测试了这一点,发现 Streaming LM 能提供非常稳定的困惑度,这意味着输出非常有意义。同时,它节省了内存,无论上下文窗口如何,随时间保持恒定内存。你只需保持预算并保留前几个 token,就可以永远与大型模型进行对话。这是其有趣的特性之一。

我们还有其他实验,显示模型可扩展至四百万个 token,甚至更多,且困惑度保持不变,这是很好的结果。我们还与其他基线进行了比较,并想了解前几个 token 到底发生了什么。如果将这些前几个 token 视为可学习的,你会发现可学习的 token 实际上做了同样的事情,甚至表现更好。你在开头有一个专门的同步 token(sync token),并保留该同步 token 为零嵌入或可学习嵌入,这分别对应零同步和可学习同步。

同步令牌出现后,困惑度突然变得非常低,你实际上可以与模型进行对话,而不会遇到上下文窗口长度的问题。是的,我们还看到了来自 Meta 的并发工作。有趣的是,我们不同部门之间没有交流,但在提交论文时,我们看到了来自不同团队的非常相似的想法,他们也发现视觉 Transformer 中存在非常相似的结构,这被称为视觉 Transformer 需要寄存器(registers)。寄存器对应于注意力汇聚点(attention sinks)。

当然,这实际上并没有解决长上下文问题。它只是丢弃令牌并保留概率。但是,如果你想进行某种序列操作,比如密码检索,如果对应答案的令牌被丢弃,它将无法给出正确答案。基本上,它是保留概率。这意味着它会给出合理的答案,但可能无法检索到被丢弃的信息。这是基本的局限性。希望未来我们也能做到这一点。

最后,基本上,我们想介绍另一篇论文,他们试图通过微调来解决长上下文窗口问题。这是一种可能的方案。哦,抱歉,这实际上是这篇论文。是的,就是这篇论文。在此之间,有一个流式 HTO(Hierarchical Token Optimization),意味着你想将流式 RM 与 HTO 方法结合起来。如果你考虑流式 RM,它实际上是 HTO 的一种特殊情况。

因为 Transformer 只保留前几个令牌,而 HTO 会根据注意力分数选择令牌。将两者结合,实际上会给你更好的性能。同时,你将保持无限聊天的特性。这是我最近的更新。因此,欢迎使用所有这些改进来实现快速推理。

最后有一种方法,有一篇名为《扩展上下文窗口》的论文。这实际上是一篇一直停留在预印本阶段的论文,因为在发布两天后,我们在 Reddit 上看到人们有更好的想法来解决这个问题。实际上,我说两天,对于这种情况,可能只有三十个小时左右。所以我们决定不提交论文,因为竞争太激烈了。

这实际上是一篇试图通过预训练来扩展上下文窗口的论文。我们都知道,预训练完成后,上下文窗口就不能改变了。例如,对于 Llama 版本模型,上下文窗口是 2K。如果你尝试在 2K 之外使用它,它会突然给你垃圾信息。这就是基本问题。那么,我们如何扩展它呢?我们可以显然通过更长的文本进行微调,但微调需要大量的资源和许多批次。

我们实际上发现,通过改变 Llama 模型中的单个参数,可以使微调更加高效。这实际上非常简单。我们基本上说,我们改变嵌入,即位置嵌入的缩放比例,然后将其缩放回原始大小。例如,如果你的模型是 2K,而你想将模型扩展到 4K,会发生什么?你基本上可以说,好吧,与其做任何其他操作,你只需对每个位置编码,将该位置编码索引除以二。

非常简单,对吧?那么,对于 2K 窗口,它将映射回;对于 4K 窗口,它将映射回 2K。这样,每个位置编码都变成前一层、前一个版本中位置编码的插值。使用这种改变后的 Transformer,你只需用几百个样本来训练模型,突然之间它就表现得非常好。

原因是我们实际上发现注意力函数表现不佳(ill-behaved)。如果你进行插值,它表现相当好。但如果你进行外推,突然之间,对于超出训练范围的窗口,它会给出非常糟糕的分数。这就是为什么我们应该进行插值而不是外推的原因。是的,这就是原因。

如果我们使用这种方法,我们实际上可以训练能够扩展到长上下文窗口的模型,只需不到 1000 步的微调。你可以将其扩展到原始上下文窗口长度的 8 倍。这实际上比仅仅进行硬微调而不改变模型任何部分要高效得多。例如,在这种情况下,200 步就足以将窗口从 2K 扩展到 8K、16K 或 32K。

你只需要大约 200 步,但如果只是进行微调,那你真的需要更多的步骤。你可能需要大约 1000 步,但仍然无法真正扩展到 8K 或扩展到 2.5K。所以,如果在位置编码中进行插值,效率会高得多。是的,而且性能并没有大幅下降。这意味着它在所有基准测试中保持大致相同。

正如我所说,论文发布两天后,你在 Reddit 上得到了更好的东西。竞争就是这样激烈。而且,我们实际上看到更多沿着这个方向发表的论文。我希望人们能从这些见解中受益,这基本上是我最后一次讲座的全部内容。谢谢你的关注。

你说“插值”和“外推”在语言模型中是什么意思?那是什么意思?是的,我的意思很简单。例如,假设窗口是 2K。2K 意味着对于每个令牌,你首先会根据位置分配一个索引。从 0 到 2K 减 1。然后,给定索引,你可以计算它们的位置编码。在这里,我们使用 RoPE。

这就是人们在这些模型中使用的。要计算它,你首先减去这两个位置编码,即位置索引,然后使用 n 减 n 的数值,并将其代入这个方程。你可以根据此计算注意力。是的,这就是你如何使用位置进行位置编码的方式。

我认为第一个问题是关于如何将理论论文中的见解与例如缩放定律以及涌现能力联系起来。

大型语言模型的能力。是的,因为论文中的理论图景,我的意思是,它们并非完全缺席于早期模型。呃,你的意思是,比如如何将两者结合在大模型中?我认为人们已经在使用了,对吧?比如 Siri 是如何扩展的?你知道,当我们训练大得多的模型时,我们会获得更强的涌现能力。

哦,我明白了。好吧,我认为 Siri 确实如此。我的意思是,Siri 实际上是一个深层堆栈。对。所以有一系列主要是经验性的,并试图描述现象。我会说像缩放定律和涌现行为。还有一系列更多是关于总结正在发生的事情。对,所以这个理论肯定非常适用于当前模型,对吧?

例如,根据缩放定律,你可以知道,如果你将模型规模扩大十倍,将数据量扩大十倍,性能会发生什么变化?你基本上会得到一条曲线。这条曲线会告诉你预测接下来会发生什么。对,所以这在许多情况下非常有用,对吧?呃,而对于像这样的理论,基本上,呃,对于我们这里讨论的理论,它更多是从第一性原理出发。

对,从公式化开始,并思考公式化将实现什么样的后果。对,所以这可能更难应用于实际应用。但如果我们做得足够好,那么突然间我们就知道了整个过程的一切。在这个过程中,可能会有许多不同的场景可以适用。所以这是一段非常艰难的旅程,但也许在未来,它可能会产生很强的应用。

是的。那么,你认为从第一性原理到像缩放定律这样的东西,最直接的下一步是什么?是的,我认为对于像缩放定律这样的事情,会发生的情况是,给定所有的理论研究,然后给定理论研究,你可能能够模拟如果我有更多数据会发生什么。对,所以边界看起来会是什么样,那将成为你经验观察到的缩放定律,对吧?

所以在这种情况下,这可能比目前我们拥有的缩放定律更进一步,而那是纯粹经验性的,是的。这是可能的。我认为物理学家在许多不同的场景中已经这样做了,对吧?你可以从第一性原理开始,得出一些方程,然后说,如果你有一千个原子,或者像十的三十二次方个原子,会发生什么?然后你会得出一种更宏观和经验性的定律,并尝试用真实的实验来拟合它,对吧?所以这可能是一个可能的方向。

这个过程确实各不相同。我的意思是,好吧,我会给你个人意见,对吧?所以我从2017年开始做一系列研究,当时是一个非常痛苦的过程,我必须说。是的,所以在这个过程中,你可能会花几个月在一个不可能证明的问题上。即使你证明了它,你也看不到任何好处。你意识到你证明的毫无意义。你不需要证明那个,对吧?所以起初这是一个非常痛苦的过程。

但后来,我的意思是,经过几年的探索之后,我的意思是,人们可能会达到这样一个阶段,你对整体有一个很好的见解,关于粗略的图景,关于系列应该如何进行。然后,有了粗略的图景,你知道定理大致应该如何证明。有些定理,可能有一些定理。你可以粗略地写下来,即使它们是错的。没关系。这些就像错误的定理,但它们大致正确,方向正确。然后通过添加约束、添加条件,并通过做一些类似经验性的验证,你可能会更好地知道这应该是什么样。直到你确定一个既逻辑正确又在经验上有用的论点。对,所以这可能是使理论更加简化的某种方式。

是的,例如,在 Drama 中,对于 Drama 论文,我的意思是,我们提出了这个想法,关于绘制嵌入的核心思想,也许在几天内就完成了。对。所以一旦你推导出那个方程,好吧,好吧,完成了。你明白了。然后我们知道,好吧,肯定有下一步。然后我们可以在那里做更多工作。而所有的工作基本上都对应于那个。对,所以我会说,系列研究基本上不是我的主要推动力。我的意思是,我们还有很多其他工作要做,但是呃,不过已经有一个很好的线索。呃,然后你可以推导定理。你可以思考如何获得好的解决方案。呃,在很短的时间内。是的。

所以我认为如果我们经历那个过程,那么你会尝试。你可以同时具备进行理论工作的能力。你也可以做实验。你也做经验性工作。是的,它是它,这是一种艺术。是的,我会说你必须先尝试几件事。呃,然后一旦你尝试了,然后你意识到,哦,那可能是不正确的,对吧?所以然后你去到不同的假设。这基本上是一个在你的符号结构和现实世界结构之间来回过程,对吧?所以你从现实世界开始,然后得出一些假设,然后你来到符号方面。

看着它并思考我们应该做什么,然后得出好的结论,符号上,如果我们做这些假设,那么也许会使事情更容易。并在符号上思考,好吧,这个符号假设是否有意义,对吧?然后回到实践方面,然后做来回运动,直到你收敛到既在符号上有趣又与现实世界相关的假设。然后你收敛到那里,对吧?随着时间的推移,你在这方面变得越来越好。

好吧,首先是那个显然像 t 趋向于无穷大,对吧?所以那是被采用的那个。我们有合作者,所以第二作者实际上做了许多详细的工作,他首先得出了一种置信界。如果 t 是有限的,我会说好吧,忘掉它,就说 t 趋向于无穷大,因为这基本上将捕捉到图景的感觉。而我们不太关心数学细节,对吧?所以在这种情况下,这似乎是一个好的假设。是的。但我将,我将,但我永远不会假设你的特征是固定的,

对吗?这实际上并不是正确的做法。即使这会让数学变得简单得多,但这基本上会破坏整个物理图景。这不是一个好做法。所以总是需要一种平衡。如果你有好的假设,就去尝试它。但同时,你要确保这个假设不会破坏你想要做的事情。是的,所以对于这一点,

我的意思是,其实我可以给你讲另一个故事,因为对于分层模型,多年来我一直在尝试这方面的研究。我的意思是,从我读硕士开始,如果你查看我的硕士论文,它是关于某些视觉模型的分层表示。那是一篇论文,但没人读过。无论如何,这是一项非常长期的努力。对于卷积神经网络(CNNs),是的,

我们也尝试过。如果你查看一些论文,我必须说这篇期刊论文是我第一篇被接受的进行分层分析的论文。我们之前尝试进行分层分析的所有论文都被拒绝了,因为符号太复杂了。嗯,是的,所以这非常棘手。对于卷积神经网络,是的,肯定存在

分层结构,这也是我的动机之一。因为我最初是研究视觉领域的。我的意思是,如果你查看我的出版物,我最初做一些视觉方面的工作,显然,视觉领域的人对分层表示非常着迷,对吧?所以我们在那里都有这些见解。但我认为卷积神经网络和Transformer的区别在于,Transformer使用

嵌入(embeddings),而嵌入是非常强大的。超级强大。嗯,我认为你可以想到的一点是,对于d维的高维空间,存在有趣的属性,对吧?在高维空间中,你可以将2的d次方数量的向量放入这个空间,并保持它们几乎相互正交。对,但这

实际上是一个非常漂亮的属性。你基本上可以将指数级的内容或对象放入这个有限样本、有限空间中。但如果你做卷积神经网络,那么会发生什么,你本质上是在对概念进行独热表示(one-hot representation)。对,所以你看,也许这个token代表某物。那个token代表某物。这实际上是独热表示。但如果你做独热

表示,你想让它们彼此正交。那么你需要2的D维空间。对。这实际上非常高效。使事情高效的另一个要点是,Transformer还可以执行大量的推理任务。而我认为,推理肯定与嵌入的表示有关。是的。所以我会说,也许一个概念可以由

多个嵌入向量的求和来表示。其中一个向量说它是一个字母,另一个向量说它是首字母。选择单词,比如是小写,对吧?类似这样的东西。这种表示非常有用,因为它实际上被解耦为不同的属性,并且这些属性可能在Transformer的计算中单独计算,对吧?所以

这可能是我们想要分析的下一个方面。