StreamingLLM技术:扩展大型语言模型的上下文限制

2023年11月28日 由 daydream 发表 441 0

大型语言模型(LLM)以其处理长文本序列的能力而闻名。然而,在处理冗长的文章、书籍或持续聊天会话时,这些模型常常会达到它们的上下文限制。


微信截图_20231128111114


当有需要将模型的上下文扩展到更长的序列时,这就构成了一个挑战。当前解决这个问题的方法要么计算上要求高,内存占用多,要么不够精确。


一个突破性的解决方案是StreamingLLM,由Meta AI、麻省理工学院和卡内基梅隆大学的研究人员共同团队开发。这种创新技术可以将一个LLM的上下文扩展到数百万个标记(tokens),而不需要巨大的计算和内存资源,同时保持模型的高质量性能。StreamingLLM即将成为需要处理长序列文本应用的宝贵工具。


LLM和上下文窗口


LLM本质上是设计有固定的上下文长度的,这是由它们的架构和训练方法决定的。例如,流行的LLM Llama-2的上下文大约是4000个标记,相当于大约3000个词。只要与语言模型的交互保持在这一上下文限制内,模型就能维持其高质量性能。然而,这一有限的序列长度限制了其更广泛应用的可能性。


微信截图_20231128113004


解决这个限制的一个潜在方案是创建一个上下文长度更长的模型。然而,这种方法需要修改模型的架构,并重新训练模型,这个过程可能代价高昂,对许多组织来说难以接受。此外,扩展上下文长度会导致成本呈二次方增加,即LLM的上下文增加一倍会导致内存和计算成本增加四倍。


另一种方法是实施滑动上下文窗口。在这种情况下,如果一个模型的上下文是4000个标记,该模型总是被喂食最后的4000-x个标记,其中‘x’是它预期要生成的标记数。


尽管这种技术看起来直观,但它在实际应用中有显著的缺点。


自回归LLM采用了一种称为“KV缓存”的机制以提高效率。这种机制计算并存储先前标记的注意力头的值,使得无需为每个新标记重新计算它们。每个标记的注意力值都依赖于它之前的标记。当上下文窗口被移动时,整个KV缓存必须被重新计算,这显著降低了模型的吞吐量。


另一个解决方案是在滑动窗口的同时保留老上下文和新上下文之间重叠的标记的缓存值。虽然这种方法确实有所改进,但它并非没有缺陷。一旦上下文开始偏离初始设置,模型的质量便开始迅速下降。


注意力汇聚(Attention sinks)


在他们的论文中,研究人员强调了类似GPT-3.5和Llama-2这样的自回归LLM的一个有趣特性:无论这些标记对于语言建模任务的相关性如何,大量的注意力得分都被分配给了初始标记。他们将这些标记称为“注意力汇聚”。


有趣的是,他们观察到,当文本长度超过缓存大小时,模型的困惑度显著增加,主要是由于这些初始标记被排除在外。(困惑度是模型在其预测中的不确定性,较低的值表示更高的精确度)这一发现表明,这些注意力汇聚,无论它们与被预测的标记的距离有多远,都在维持LLM稳定性方面起着关键作用。


微信截图_20231128113058


这种现象背后的原因很直观。鉴于语言建模的自回归本质,初始标记对几乎所有后续标记都是可见的,使它们成为作为注意力汇聚的首选候选。相比之下,后来的标记只对一组有限的后续标记可见。因此,初始标记更容易被训练成为注意力汇聚,从而占据了不成比例的注意力。


因此,当从上下文中移除最初几个标记的注意力值时,由于失去了大量的注意力值,模型的性能开始下降。保留这些注意力汇聚构成了StreamingLLM技术的基本前提,为当前LLM的局限性提供了一个有希望的解决方案。


StreamingLLM的工作原理


StreamingLLM是一个创新性的框架,它允许大型语言模型处理无限长的文本,无需进行微调。这种技术保留了注意力汇聚以保持接近正常的注意力得分分布。当与LLM的对话序列超过了模型的上下文长度时,StreamingLLM保留了注意力汇聚标记的KV缓存,保留四个初始标记就足够了,并丢弃随后的标记以为滑动窗口标记腾出空间。这种方法使模型能够扩展其上下文并稳定其性能,无需重新计算整个KV值。


“引入四个初始标记作为注意力汇聚就足以恢复LLM的性能。”研究人员写道。“相比之下,仅添加一个或两个是无法完全恢复的。我们认为这种模式出现是因为这些模型在预训练期间没有在所有输入样本中包含一致的开始标记。”


在StreamingLLM框架下,KV缓存由注意力汇聚和保留最新标记的滚动KV缓存组成,这些最新标记对于语言建模至关重要。研究人员强调StreamingLLM的多功能性,称:“StreamingLLM的设计是通用的,可以无缝结合到任何使用相对位置编码的自回归语言模型中。”


微信截图_20231128113132


研究人员表示,像Llama-2(70-700亿参数)、Falcon(70-400亿参数)和Pythia(29-120亿参数)这样的LLM可以在StreamingLLM框架下可靠地建模多达400万个标记,甚至更多。这种技术有效解决了其他方法所面临的挑战,提供了快速推断、高质量和低内存要求。


“StreamingLLM首先打破了LLM的预训练窗口大小和其实际文本生成长度之间的联系,为LLM的流式部署铺平了道路。”研究人员写道。


使用注意力汇聚预训练语言模型


研究人员强调,模型过度注意多个初始标记的一个重要原因是缺乏一个专门的汇聚标记来吸收过多的注意力得分。因此,模型无意中将全局可见的标记,主要是初始标记,指定为注意力汇聚。


“一个潜在的补救措施可以是故意包含一个全局可训练的注意力汇聚标记,称作‘汇聚标记’(Sink Token),它将作为不必要注意力得分的存储库。”他们提出。


通过这一洞察力,可以预训练语言模型在流式部署时仅需要一个注意力汇聚标记。唯一的前提是在所有训练样本的开始包含一个额外的可学习标记,以充当注意力汇聚。


为了验证这种方法,研究人员从头开始训练了几个1.6亿参数的语言模型,在训练示例的开头包含了一个单一的注意力汇聚标记。他们的实验表明,在推理时添加这个单一的汇聚标记有效地保持了模型在流式案例中的性能。


“这与普通模型形成对比,后者需要重新引入多个初始标记作为注意力汇聚,以达到相同的性能水平。”研究人员指出。


此外,他们发现,在预训练期间包含一个汇聚标记不会对模型的收敛或在多种自然语言处理(NLP)基准测试中的后续性能产生负面影响。


StreamingLLM的实际应用


该研究论文的作者已将StreamingLLM的代码公开在GitHub上。这个Python库兼容Llama-2,MPT, Falcon和Pythia模型。


此外,还有一个开源实现的StreamingLLM作为Hugging Face变换器库的即插即用替代品,并与Hugging Face平台上的其他模型兼容。


Hugging Face也在密切关注StreamingLLM的发展,并考虑将其集成到他们的变换器库中。这一进展有望为实现StreamingLLM在各种应用中的使用提供增强的工具,标志着语言建模领域的一项重大进展。

文章来源:https://bdtechtalks.com/2023/11/27/streamingllm/
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消