欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > YaRN论文解读

YaRN论文解读

2025/2/25 12:41:18 来源:https://blog.csdn.net/qq_43592352/article/details/145657647  浏览:    关键词:YaRN论文解读

论文标题:YaRN: Efficient Context Window Extension of Large Language Models

论文地址:https://arxiv.org/abs/2309.00071

论文发布时间:2023-08-31

本篇论文所提出的算法 YaRN,被 Qwen2.5 在外推拓展方面使用。

Abstract

旋转位置嵌入(RoPE)无法在超出其训练的序列长度上进行泛化。

论文提出了 YaRN(Yet another RoPE extensioN method,另一种 RoPE 扩展方法),一种计算高效的方法来扩展此类模型的上下文窗口,所需的标记数量比以前的方法少 10 倍,训练步骤少 2.5 倍。

Introduction

目前 Decoder Only 结构的大模型,在扩展长上下文能力上的主要限制来自于位置编码。想办法通过少量微调 (或不进行微调) 动态扩展上下文窗口是目前研究的重点。

最初的 Transformer 使用绝对位置编码(正余弦),后来改进为可学习的绝对位置编码(Embedding)。目前通用的位置编码是相对位置编码,RoPE。后续很多的工作,如 NTK、Dynamic NTK,基本上都是基于 RoPE 的改进。

包括本篇文章提出的 YaRN。

YaRN 在对不到 0.1% 的原始预训练数据进行微调后,在上下文窗口扩展中达到了最先进的性能。同时,通过与称为 Dynamic Scaling 的推理时间技术相结合,Dynamic-YaRN 允许 2 倍以上的上下文窗口扩展,无需任何微调。

Background and Related Work

旋转位置编码

RoPE 是老生常谈了,就不介绍了。

在实际坐标中,可以使用以下函数表示 RoPE

f W ( x m , m , θ d ) = ( c o s m θ 1 − s i n m θ 1 0 0 ⋯ 0 0 s i n m θ 1 c o s m θ 1 0 0 ⋯ 0 0 0 0 c o s m θ 2 − s i n m θ 2 ⋯ 0 0 0 0 s i n m θ 2 c o s m θ 2 ⋯ 0 0 0 0 0 0 ⋯ c o s m θ l − s i n m θ l 0 0 0 0 ⋯ s i n m θ l c o s m θ l ) W x m f_{W}\left(x_{m}, m, \theta_{d}\right)=\left(\begin{array}{ccccccc} cos m \theta_{1} & -sin m \theta_{1} & 0 & 0 & \cdots & 0 & 0 \\ sin m \theta_{1} & cos m \theta_{1} & 0 & 0 & \cdots & 0 & 0 \\ 0 & 0 & cos m \theta_{2} & -sin m \theta_{2} & \cdots & 0 & 0 \\ 0 & 0 & sin m \theta_{2} & cos m \theta_{2} & \cdots & 0 & 0 \\ 0 & 0 & 0 & 0 & \cdots & cos m \theta_{l} & -sin m \theta_{l} \\ 0 & 0 & 0 & 0 & \cdots & sin m \theta_{l} & cos m \theta_{l} \end{array}\right) W x_{m} fW(xm,m,θd)= cosmθ1sinmθ10000sinmθ1cosmθ1000000cosmθ2sinmθ20000sinmθ2cosmθ2000000cosmθlsinmθl0000sinmθlcosmθl Wxm

位置插值

给定一个是用 RoPE 做预训练的大语言模型,通过以下方式修改 RoPE:

f W ′ ( x m , m , θ d ) = f W ( x m , m L L ′ , θ d ) f_{W}'\left(x_{m}, m, \theta_{d}\right)=f_{W}\left(x_{m}, \frac{m L}{L'}, \theta_{d}\right) fW(xm,m,θd)=fW(xm,LmL,θd)

其中 L ′ > L L'>L L>L 是超出预训练限制的新上下文窗口。利用原始的预训练模型和修改后的 RoPE 公式,可以在减少几个数量级的 token 上进一步微调语言,实现上下文窗口扩展。

原理就是“抽象的拉抻”,把原来训练好的 L 个窗口大小的输入长度,通过加因子变长。(比如原长度为 1000,除以 0.8,就变成 1250。)

为了方便介绍后续方法,重写并简化为以下一般形式:

f W ′ ( x m , m , θ d ) = f W ( x m , g ( m ) , h ( θ d ) ) f_{W}'\left(x_{m}, m, \theta_{d}\right)=f_{W}\left(x_{m}, g(m), h\left(\theta_{d}\right)\right) fW(xm,m,θd)=fW(xm,g(m),h(θd))

因此对于 f W ′ f_{W}' fW g ( m ) = m / s g(m)=m / s g(m)=m/s h ( θ d ) = θ d h(\theta_{d})=\theta_{d} h(θd)=θd

Methodology

高频信息丢失——“NTK 感知”插值

为了解决在插值 RoPE 嵌入时丢失高频信息的问题,提出了 “NTK-aware” 插值,NTK 感知插值不是将 RoPE 的每个维度均等地缩放一个因子 s ,而是通过减少高频和增加低频来将插值压力分散到多个维度。可以通过多种方式获得这样的变换,但最简单的是对 θ 的值进行更改:

g ( m ) = m g(m)=m \quad g(m)=m

h ( θ d ) = b ′ − 2 d / ∣ D ∣ , h\left(\theta_{d}\right)=b^{\prime-2 d /|D|}, \quad h(θd)=b2d/∣D,

b ′ = b ⋅ s ∣ D ∣ ∣ D ∣ − 2 b'=b \cdot s^{\frac{|D|}{|D|-2}} b=bsD2D

b b b 是常数,通常会给个固定值,如 32k。

与 PI 相比,这种方法在扩展非微调模型的上下文大小方面表现得要好得多。这种方法的一个主要缺点是,鉴于它不仅仅是一个插值方案,某些维度会略微外推到“越界”值,因此使用 “NTK 感知” 插值进行微调会产生不如 PI 的结果。此外,由于“越界”值,理论比例因子 s 并不能准确描述真实的上下文扩展比例。在实践中, scale 值 s 必须设置为高于给定上下文长度扩展的预期 scale 。

没太理解为什么会越界,改造后的 b ′ b' b 不应该比原来的 b b b 小吗?

相对局部距离丢失 - “NTK-by-parts” 插值

因为 λ d = 2 π θ d = 2 π b 2 d ∣ D ∣ \lambda_{d}=\frac{2 \pi}{\theta_{d}}=2 \pi b^{\frac{2 d}{|D|}} λd=θd2π=2πbD2d,所以作者打算抛开辐角不谈,从波长的角度理解位置编码。作者提出两个观点:

  1. 给定上下文大小 L ,有一些维度 d 的波长长于预训练期间看到的最大上下文长度 ( λ > L ) (\lambda>L) (λ>L) ,这表明某些维度的嵌入在旋转域中分布不均匀。
  2. 当以更小的 b ′ b' b 拉伸所有 RoPE 维度时,辐角更小,波长更大,所有 token 都彼此更接近,两个向量旋转量较少的点积更大。这种缩放严重损害了 LLM 理解其内部嵌入之间的小关系和局部关系的能力。

所以作者提出如果波长 λ 远小于上下文大小 L ,则不进行插值;如果波长 λ 等于或大于上下文大小 L ,只想插值并避免任何外推;介于两者之间的维度可以同时具有两者,类似于 “NTK-aware” 插值。

因此,在原始上下文大小 L 和波长 λ 之间引入比率 r = L λ r=\frac{L}{\lambda} r=λL

为了定义不同插值策略的边界,引入了两个额外的参数 α , β 。

函数 r 定义为
γ ( r ) = { 0 , i f r < α 1 , i f r > β r − α β − α , o t h e r w i s e . \gamma(r)= \begin{cases}0, & if r<\alpha \\ 1, & if r>\beta \\ \frac{r-\alpha}{\beta-\alpha}, & otherwise. \end{cases} γ(r)= 0,1,βαrα,ifr<αifr>βotherwise.

动态缩放 - “动态 NTK”插值

传统的比例因子:在整个推理周期中,嵌入层是固定的,比例因子 s = L ′ / L s=L' / L s=L/L,其中 L ′ L' L 是扩展上下文大小的固定数量。

动态比例因子:在每次前向传递中,位置嵌入会更新比例因子 s = m a x ( 1 , l ′ / L ) s=max (1, l' / L) s=max(1,l/L),其中 l ′ l' l 是当前序列的序列长度。

YaRN

最后,除了“NTK-by-parts” 插值技术,在注意力 softmax 之前的 logits 上引入温度 t,将注意力权重的计算修改为 s o f t m a x ( q m T k n t ∣ D ∣ ) softmax\left(\frac{q_{m}^{T} k_{n}}{t \sqrt{|D|}}\right) softmax(tD qmTkn)

对于 LLaMA 和 Llama 2 模型,推荐以下值: 1 t = 0.1 l n ( s ) + 1 \sqrt{\frac{1}{t}}=0.1 ln (s)+1 t1 =0.1ln(s)+1

最终汇总得到 YaRN 方法。YaRN 方法在微调和非微调场景中都超越了所有以前的方法。由于其占用空间小,YaRN 允许与修改注意力机制的库直接兼容,比如 Flash Attention2。

Experiments

实验部分略。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词