深入理解Transformer的上下文窗口限制与挑战

2024年01月29日 由 daydream 发表 875 0

上下文窗口是Transformer一次可以处理的最大序列长度。随着限制令牌数量(因此也限制了提示大小)的专有语言模型(LLM)的兴起,以及人们对检索增强生成(RAG)等技术的日益关注,理解上下文窗口及其影响的关键概念变得越来越重要,因为在讨论不同模型时经常会提到这一点。


Transformer架构是自然语言处理的强大工具,但在处理长文本序列时有一些局限性。在本文中,我们将探讨影响Transformer模型可以处理的最大上下文长度的不同因素,以及在选择任务模型时是否越大越好。


微信截图_20240129114913


可以在一个Transformer中放入多少个单词?


在撰写本文时,像Llama-2变体这样的模型具有4k令牌的上下文长度,GPT-4 turbo具有128k,而Claude 2.1具有200k!仅从令牌数量来看,很难想象这如何转化为单词;虽然这取决于所使用的分词器,但一个好的经验法则是100k令牌大约相当于75,000个单词。为了更好理解,我们可以将其与一些流行文学作品进行比较:


  • 《指环王》(J.R.R. 托尔金):564,187字,752k令牌
  • 《德古拉》(布莱姆·斯托克):165,453字,220k令牌
  • 《格林童话集》(雅各布·格林和威廉·格林):104,228字,139k令牌
  • 《弗兰肯斯坦》(玛丽·雪莱):78,100字,104k令牌
  • 《哈利·波特与魔法石》(J.K. 罗琳):77,423字,103k令牌
  • 《金银岛》(罗伯特·路易斯·史蒂文森):72,036字,96k令牌
  • 《世界大战》(H.G. 威尔斯):63,194字,84k令牌
  • 《巴斯克维尔的猎犬》(阿瑟·柯南·道尔):62,297字,83k令牌
  • 《丛林之书》(鲁迪亚德·吉卜林):54,178字,72k令牌


总结来说,100k令牌大致相当于一本短篇小说,而200k令牌几乎可以包含整本《德古拉》,这是一部中等长度的作品!要处理像《指环王》这样的大型作品,我们需要向GPT-4发送6次请求,而对Claude 2只需调用4次!


微信截图_20240129114935


是什么决定了上下文窗口的大小?


此时,你可能会好奇为什么有些模型的上下文窗口比其他模型大。


为了理解这一点,让我们首先回顾下图中的注意力机制是如何工作的。最近,已经出现了几种旨在使这一机制更有效的注意力改进和变体,但关键挑战仍然相同。在这里,我们将重点关注原始的缩放点积注意力。


微信截图_20240129114952


从上图我们可以注意到,包含我们注意力分数的矩阵的大小是由传入模型的序列长度决定的,并且可以任意增长!因此,我们可以看到上下文窗口不是由架构决定的,而是由在训练期间给模型的序列长度决定的。


这种计算可能非常昂贵,因为没有任何优化,矩阵乘法通常在空间复杂度上是二次方的(O(n^2))。简单来说,这意味着如果输入序列的长度翻倍,所需的内存量将增加四倍!因此,与在4k序列长度上训练的模型相比,在128k序列长度上训练的模型将需要大约1024倍的内存!


同样重要的是要记住,这个操作对于Transformer的每一层和每个头都会重复,这导致了大量的计算。由于可用的GPU内存还需要与模型的参数、任何计算出来的梯度以及一个合理大小的输入数据批次共享,硬件很快成为训练大型模型时上下文窗口大小的限制因素。


我们可以扩展预训练模型的上下文窗口吗?


在了解了在更长序列长度上训练模型的计算挑战之后,人们可能会试图在短序列上训练模型,希望这将泛化到更长的上下文中。


微信截图_20240129115008


其中的一个障碍是位置编码机制,它使Transformer能够捕捉序列中令牌的位置。在原始论文中,提出了两种位置编码策略。第一种是使用特定于序列中每个位置的可学习嵌入,显然无法泛化到模型训练过的最大序列长度之外。然而,作者假设他们更喜欢的正弦方法可能可以推断出更长的序列;随后的研究已经证明情况并非如此。


在许多最近的Transformer模型中,如PaLM和Llama-2,绝对位置编码已被相对位置编码所取代,例如RoPE,旨在在编码后保留令牌之间的相对距离。虽然这些方法在泛化到更长序列上比之前的方法稍好一些,但当序列长度显著超过模型以前见过的长度时,性能很快下降。


尽管有几种方法旨在完全改变或移除位置编码,但这些需要对Transformer架构进行根本性的改变,并且需要重新训练模型,这是非常昂贵和耗时的。由于许多表现最佳的开源模型在编写时都是从预训练版本的Llama-2衍生出来的,因此如何扩展使用RoPE嵌入的现有模型的上下文长度是一个活跃的研究领域,取得了不同程度的成功。


这些方法中的许多采用某种插值输入序列的方法;缩放位置嵌入,使其适应模型原始上下文窗口的大小。这背后的直觉是,模型应该更容易填补单词之间的空白,而不是试图预测单词之后的内容。


微信截图_20240129115024


其中一种方法,被称为YaRN,能够将Llama-2 7B和13B模型的上下文窗口扩展到128k,而不会显著降低性能!


虽然在所有情况下都适用的明确方法尚未出现,但这仍然是一个令人兴奋的研究领域,具有重大的潜在影响!


更长的上下文窗口总是更好吗?


现在我们已经理解了在较长序列长度上训练模型的一些实际挑战,以及一些克服这一挑战的潜在缓解措施,我们可以提出另一个问题——这额外的努力值得吗?乍一看,答案似乎是显而易见的;向模型提供更多信息应该使其更容易注入新知识并减少幻觉,使其在几乎每一个可想象的应用中都更有用。然而,事情并不那么简单。


微信截图_20240129115043


在2023年的论文《迷失在中间》中,斯坦福和伯克利的研究人员调查了模型如何使用和访问其在上下文窗口中提供的信息,并得出以下结论:


“我们发现,改变输入上下文中相关信息的位置可以显著影响模型性能,这表明当前的语言模型并不能可靠地访问和使用长输入上下文中的信息”。


在他们的实验中,作者创建了一个数据集,对于每个查询,他们有一个包含答案的文档和k - 1个不包含答案的干扰文档;通过改变检索到的不包含答案的文档数量来调整输入上下文长度。然后,他们通过改变文档的顺序来调整输入上下文中相关信息的位置,将相关文档放在上下文的开始、中间或结束位置,并评估预测输出中是否出现任何正确答案。


具体来说,他们观察到所研究的模型在相关信息位于上下文窗口的开始或结束时表现最好;当所需信息位于上下文中间时,性能显著下降。


理论上,Transformer中的自注意力机制使模型在生成下一个词时能够考虑到输入的所有部分,而不管它们在序列中的位置如何。因此,我认为模型关于在哪里找到重要信息的偏见更有可能来自训练数据而非架构本身。我们可以通过检查作者在评估Llama-2系列模型基于文档位置检索的准确性时观察到的结果来进一步探索这个想法,如下图所示。


微信截图_20240129115100


从基本模型来看,我们可以清楚地看到作者对Llama-2 13B和70B模型的结论。有趣的是,对于7B模型,我们可以看到它几乎完全依赖于上下文的结尾;由于大量的无监督微调是在从各种来源抓取的数据流上进行的,当模型有相对较少的参数用于预测不断变化的上下文中的下一个词时,专注于最近的令牌是有道理的!


更大的模型在相关信息位于文本开头时也表现良好;这表明随着参数的增加,它们学会了更多地关注文本的开始。作者推测这是因为,在预训练期间,模型看到了很多来自StackOverflow等来源的数据,这些数据以重要信息开头。我怀疑13B模型在前端加载信息方面的微小优势是否显著,因为两种情况下的准确率相似,而70B模型并未显示出这种模式。


"聊天"模型经过指令调优和基于人类反馈的强化学习(RLHF)进一步训练后,整体表现更好,并且似乎对文本中相关信息的位置变得不那么敏感。对于13B模型来说,这一点更为明显,而70B模型则不太明显。7B模型变化不大,可能是因为它的参数较少。这可能意味着这些模型在更多训练后学会了更好地使用文本其他部分的信息,但它们仍然更倾向于使用最近的信息。考虑到后续训练阶段明显较短,它们并没有完全克服首次无监督训练中的偏差;我怀疑,70B模型可能需要更大、更多样化的后续训练才能展现出与这里观察到的13B模型类似的性能变化幅度。


此外,我对探索用于有监督微调(SFT)的数据集中使用的文本中相关信息位置的研究感兴趣。由于人类在回忆序列开始和结束处的信息时表现得更好,如果在给出的例子中很多都反映出这种行为,也就不足为奇了。


结论


总之,上下文窗口并不是固定的,只要有足够可用的内存,它可以增长到你想要的任何大小!然而,更长的序列意味着更多的计算——这也会导致模型变慢——除非模型已经在类似长度的序列上进行了训练,否则输出可能没有多大意义!然而,即使是具有大上下文窗口的模型,也不能保证它们会有效利用提供给它们的所有信息——真的没有免费的午餐!

文章来源:https://towardsdatascience.com/de-coded-understanding-context-windows-for-transformer-models-cd1baca6427e
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消