大模型专题:长上下文系列(一)

大模型专题:长上下文系列(一)

YaRN: Efficient Context Window Extension of Large
Language Models [ICLR’25] [PDF]

整体概述

YaRN是Yet another RoPE extensioN method的缩写,是对旋转位置编码(RoPE)的一种改进,目的是让LLM在推理阶段可以处理比训练阶段更长的文本。

问题背景

考虑到训练资源,LLM往往在较短的context窗口下进行预训练,然而,现在的很多下游任务往往需要更长的context窗口,比如把一篇PDF甚至一本书塞进LLM,让它利用ICL能力回答问题。因此如何通过少量微调(或不进行微调)动态扩展上下文窗口成为一个重要的研究课题。

不能扩展的重要原因出在位置编码上,以目前广泛使用的旋转位置编码RoPE举例,如果训练时context窗口为4096,那RoPE只能编码0~4095的相对位置信息,此时把推理时的context窗口扩展为8192,那4096~8191的相对位置信息是LLM从未见过的,因此会出现高PPL。

最开始的解决思路是Position Interpolation(PI),有两篇同期工作:[1]
[2]。思路比较简单,单纯改索引,公式如下,比如推理时是8192,那么新的位置索引 i ′ = i × 4096 8192 i'=\frac{i\times4096}{8192} i=8192i×4096,2变成了1,但同时1也变成了0.5,这个也是LLM没见过的,但通过微调LLM可以较好地泛化过去,工作 [1] 用几十亿的数据微调后取得了较好效果。PI相较于RoPE的编码改变
PI这种插值方式太简单粗暴了,对于嵌入的所有维度而言都一样,没有考虑它们在周期上的差异:
RoPE
文中称PI为"blind" interpolation method,而YaRN为"targeted" interpolation method,那么是如何targeted的呢,让我们继续看下去~

具体方法

YaRN在正式介绍自己方法之前,回顾了先前的一些方法,包括"NTK-aware"、“NTK-by-parts"和"Dynamic NTK”。

NTK-aware

在RoPE中,维度索引 i i i越大, θ i \theta_i θi越小,则周期越大,频率越小。对于周期小的维度,直接内插会使相邻位置的区分度变小。NTK-aware改变这一问题的思路是高频外推、低频内插。为什么高频做外推?举个例子,1200在周期小的维度里可能和1000值相同,但周期大的维度(大于1200)里就没有和它相同值的position,此时应该做内插,而低频做内插也基本不破坏区分度。NTK-aware用如下公式实现高频外推、低频内插:
m ( β λ ) 2 i d \frac{m}{(\beta\lambda)^{\frac{2i}{d}}} (βλ)d2im
其中 λ 2 i d \lambda^{\frac{2i}{d}} λd2i i i i很小时趋近于1,等价于 m β 2 i d \frac{m}{\beta^{\frac{2i}{d}}} βd2im,即高频外推。在最低频,即 i = d − 2 2 i=\frac{d-2}{2} i=2d2时,有
m ( β λ ) 2 i d = m β 2 i d s , s = L ′ L \frac{m}{(\beta\lambda)^{\frac{2i}{d}}}=\frac{m}{\beta^{\frac{2i}{d}}s}, s=\frac{L'}{L} (βλ)d2im=βd2ism,s=LL
可以求得 λ = s d d − 2 \lambda=s^{\frac{d}{d-2}} λ=sd2d

对于最高频,单纯外推;对于最低频,单纯内插;中间频率是外推和内插的结合。

NTK-by-parts

PI和NTK-aware都是"blind"内插法,因为所有维度被等价处理。NTK-by-parts是把维度按照波长区分开来:

  • 如果波长比上下文长度小得多,此时单纯外推
  • 如果波长等于或大于上下文长度,此时只做插值,不做任何外推(不像以前的“NTK-aware”方法会在中间频率既内插又外推)
  • 两者之间的维度可以兼而有之,类似于“NTK-aware”插值

以下公式中 d d d代表索引 i i i ∣ D ∣ |D| D代表维度数 d d d
在这里插入图片描述
在这里插入图片描述
新的 θ d ′ \theta_d' θd
在这里插入图片描述
可以认为,NTK-by-parts是NTK-aware的加强版,用波长和上下文长度的关系设立了两道分割线,NTK-aware也是两道分割线,但一个在最左,一个在最右,不如NTK-by-parts的针对性强。实验表明,NTK-by-parts无需微调,效果优于NTK-aware。

Dynamic NTK

思想很简单,就是在生成本来就在原窗口内的文本时( < L <L <L),不需要NTK,此时把 s s s设为1即可。
在这里插入图片描述

YaRN

终于到YaRN了~

YaRN发现,除了用插值这些方法,在softmax操作里引入一个温度系数也可以降低扩展上下文时的困惑度,而且这个温度系数不受数据样本、token位置的影响。
在这里插入图片描述
在这里插入图片描述
这个公式不是推出来的,是根据PPL(w/ NTK-aware)和温度系数的曲线拟合出来的。
在这里插入图片描述

实验结果

待更…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值