LLM上下文长度扩展方案:Position Interpolation

6 篇文章 1 订阅

前言

在这里插入图片描述
题目: Extending Context Window of Large Language Models via Positional Interpolation
论文地址:Extending Context Window of Large Language Models via Positional Interpolation

1. 预备知识

由于PI是基于旋转位置编码RoPE进行改进,而RoPE几乎是现在主流大模型的标配,因此在这一部分简单介绍一下RoPE。这部分没有太多的推理过程,网上相关的推导有很多,这里就不重复了。

RoPE的本质是想基于绝对位置来编码相对位置。具体来说,RoPE首先通过一个变换函数来对query和key向量进行变换:
在这里插入图片描述
然后再计算二者间的内积:
在这里插入图片描述
RoPE试图找到一种变换来让最终计算的内积中包含两个位置之间的相对距离 m − n m - n mn。RoPE提出的解决方案是:
在这里插入图片描述
具体来说,针对 m m m位置的向量 x m x_m xm,其变换方式为:
在这里插入图片描述
其中 θ i = b − 2 ( i − 1 ) / d ( b = 10000 ,   i = 1 , 2 , 3 , . . . , d / 2 ) \theta_i = b^{-2(i - 1) / d}(b=10000,~i=1,2,3,...,d/2) θi=b2(i1)/d(b=10000, i=1,2,3,...,d/2)。最后,变换后的两个向量求内积然后取实部即为注意力计算结果。

在代码编写过程中,实际使用的计算方式为:
在这里插入图片描述
将RoPE中每个位置的向量每两两一组放在复平面上:
在这里插入图片描述
可以发现其本质就是将每两个维度旋转与当前位置有关的角度,进而让两个不同位置间的内积存在相对位置项。

2. PI

假设模型当前能够接受的最大长度为 L L L。事实上,RoPE是可以处理超过训练时长度的输入,也就是直接扩大可处理的长度,然后不做任何处理,即直接外推。然而,由于模型在训练期间从未见过长度超过 L L L的输入,因此当输入长度大于 L L L时,模型性能将急剧下降。

一些论文提出可以通过给模型喂一些长度大于 L L L的输入来微调模型,进而逐步将原始窗口长度扩大。实验结果如下:
在这里插入图片描述
实验结果证明,即使经过10000多个step的训练后,窗口长度增加的幅度仍然特别小,有效上下文窗口的增加幅度仅从2048增加到2560,这种代价是不可接受的

为了解决这个问题,Position Interpolation被提出。PI的思想很简单:假设当前长度 L = 2048 L=2048 L=2048,虽然 f ( x m , m ) f(x_m, m) f(xm,m)中的位置索引不能超过2048,但 m m m可以为小数,于是PI提出可以将超出预设长度 L L L的位置通过缩放因子缩放到 L L L以内。令扩充后的长度为 L ′ L^{'} L,则缩放因子被定义为 S = L ′ L S=\frac{L^{'}}{L} S=LL

接着,PI将RoPE的变换函数改写为以下方案:
f ′ ( x m , m ) = f ( x m , m S ) f^{'}(x_m, m) = f(x_m, \frac{m}{S}) f(xm,m)=f(xm,Sm)

m m m变成了 m S \frac{m}{S} Sm,本质上是线性缩小了每个位置每个维度上的旋转角度。值得注意的是,重新调整位置索引的方法不会引入额外的权重参数,也不会以任何方式修改模型架构。这使得它在实际应用中具有很强的适应性,属于即插即用的框架。在调整位置编码方式后,PI需要进一步使用 L ′ L^{'} L长度内的样本对模型进行简单少量微调以达到最佳性能。

3. 实验

作者将LLaMA-7B, LLaMA-13B, LLaMA-33B和LLaMA-65B从2048的原始长度扩充16倍到32768。PI微调1000步,直接外推则是微调10000步。

部分实验结果如下:
在这里插入图片描述
可以发现相比于直接外推,PI能在更短的微调步骤下实现更低的困惑度。

此外,作者还研究了PI微调步数和困惑度之间的关系:
在这里插入图片描述
实验结果表明,直接将模型不微调从2048扩充4倍到8192,模型也能保持较好的性能,并且在微调200步后性能显著提升

  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cyril_KI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值