清华开源InfLLM框架,无须训练,扩展大模型上下文长度到1M

欢迎关注我的公众号“ NLP前沿 ”,日更最新论文/博客速读,周更AI领域近一周发生的那些事儿 。欢迎投稿! 行文仓促,有理解错误,欢迎指正


        
          
https://github.com/thunlp/InfLLM  
https://arxiv.org/abs/2402.04617  

      

一张图看框架,如下图,简单总结,历史的上文token,被分为3类,Initial token、Evicted token、Local token,每次解码下一个token的时候,Initial token常驻和一个窗口内的token,Evicted token会分块,检索一部分token出来。如果检索不到,那这个方法就退化为了streaming llm方法。

picture.image

整个流程应该大致上就上述内容,接下来是一些细节的。

中间那部分被称为Evicted token的,如何缓存,如何检索? 位置编码?

考虑到长序列的局部语义一致性,对历史的k,v进行分块存储 检索,而不是以token级存储单元来存储,可以保持性能的同时降低成本。

每个块中选择几个代表性的token用在块表示。每个token可以计算其再局部窗口中的重要性,表示其影响力。计算方法如下:以第m个token为例,使用m的key向量,计算与周围L的q向量的相关性,但是公式的j是1开始的,只往后看,感觉怪怪的。另外就是,原文表示这里只是介绍简单的无须训练的代表向量计算方式,可以通过训练更好的表示模型,留给未来的工作来验证。

picture.image

计算相似度。l_{x}在编码阶段等于块大小,在解码阶段为1,求个和。picture.image

受到之前一些工作的启发,对超出窗口的用相同的位置编码来表示。

原理到这里结束了,贴一张结果图,更多的分析详见开头原文地址。

picture.image

0
0
0
0
评论
未登录
暂无评论