当前位置: 首页 > news >正文

LLM 位置编码及外推

RoPE

https://zhuanlan.zhihu.com/p/629681325

PI

位置插值(POSITION INTERPOLATION)显著改善RoPE的外推能力。你只需要对PT(pretraining)模型fine-turing最多1000步就能实现。PI是通过将线性的缩小了输入位置的索引使其匹配原始上下文窗口大小,而不是外推超出训练的上下文长度(超出训练的上下文长度,会导致attention score的爆炸性高分,破坏了分数)。不用PI在PT模型上fine-turning长文本,即使训练1万步,能有效扩展的窗口长度也十分有限。

扩展后的模型在长文本任务中有较好的性能,困惑度没有上升,在原来长度的任务中困惑度略有下降(实验中下降了2%)。

在这里插入图片描述

考虑使用2048上下文窗口长度预训练的Llama模型。左上角是LLM模型的正常用法:输入位置指数(蓝点)在预训练范围内。右上方显示长度外推,其中模型需要操作未见位置(红点),最高可达4096。左下角展示了位置插值,我们将位置索引(蓝色和绿色点)本身从[0,4096]缩小到[0,2048],以迫使它们驻留在预训练的范围内。

RoPE的外推能力有限,理论上,使用2048长度训练的模型,如果输入3000的长度,它就无法使用0位置的信息,但可以使用2900位置的信息,但实际上,如果答案就在2900位置处,也无法得到。
在这里插入图片描述
左:一个拟合的注意力评分函数(红色),形式为公式(1), $d = d_{model}/n_{head} = \frac{4096}{32} = 128 $(LLaMA 7B设置)。圆点为待拟合的随机输入点,红色曲线为最小二乘法拟合的分数函数,其近似在[−1,1]内。右:虽然拟合函数在[0,L]内似乎有很好的边界,其中L = 2048,但在这个区域之外,它可能会超过8000,导致注意力计算出现灾难性问题。请注意,这里我们根本没有挑选:几乎每个从[0,L]内随机生成的输入点集合中学习的曲线都有外推问题。

a ( s ) = R e [ ∑ j = 0 d 2 − 1 h j e i s θ j ] (1) a(s)=Re[\sum^{\frac{d}{2} -1}_{j=0} h_j e^{is \theta_j}] \tag{1} a(s)=Re[j=02d1hjeisθj](1)

位置插值公式:

f ′ ( x , m ) = f ( x , m L L ′ ) f^{'}(x,m)=f(x, \frac{mL}{L^{'}}) f(x,m)=f(x,LmL)

f f f 是RoPE的位置函数, x x x m m m位置的embedding向量, L L L 是原来的上下文窗口长度, L ′ L^{'} L是扩展的窗口长度

passkey retrieval

这是一种测试扩展后窗口的有效长度,即一个token可以注意多远。

在这里插入图片描述

12345可以被替换成任何其他的词。

PS: 为了将7B, 13B和33B模型扩展到8192上下文窗口大小,我们使用32个A100 gpu和64个全局批处理大小

在这里插入图片描述

对原始2048窗口的模型使用FT,发现训练10000步的时候,只有效扩展到了2560的长度,但是使用PI,训练200步的时候就能扩展到我们想要的窗口长度(实验中有抖动,步数多了有效窗口长度反而变短)。

ALiBi

ALiBi(Attention with Linear Biases)不为token嵌入添加位置嵌入(相比其他位置编码),而是用一个和query, key之间的距离成比例的一个“惩罚项”来偏置query-key的attention score。

效果:可以加快11%的训练速度,以及减少11%的内存使用。

使用ALiBi,LM可以在短序列上进行训练,在长序列上推理。
在这里插入图片描述

m叫做坡度(slope)

按照论文中的描述,其做法是:

在这里插入图片描述

例如,8个heads的时候,m的取值为:

1/2, 1/4, 1/8, 1/16, 1/32, 1/64, 1/128, 1/256

如果是16个heads,则m的取值为:

1/sqrt(2), 1/2, 1/(2*sqrt(2)), 1/4, …, 1/256

相当于追加了一半的1/sqrt(2)到原来的8个head的每个m的取值。

扩展到一般情况就是:

对于n个head的话,m的取值就是 2 − 8 n 2^{\frac{-8}{n}} 2n8

2 − 8 1 , 2 − 8 2 , 2 − 8 3 . . . 2 − 8 n 2^{\frac{-8}{1}},2^{\frac{-8}{2}},2^{\frac{-8}{3}}... 2^{\frac{-8}{n}} 218,228,238...2n8, 这样的m个坡度了。

在这里插入图片描述

NTK ALiBi

  • 针对ALiBi位置编码在长文本中注意力视野有限的问题,提出了基于ALiBi编码的两种插值方法:内插值和NTK-ALiBi插值。
  • 实验表明:无需微调情况下,插值方法能够有效扩大ALiBi编码的注意力视野,提高长文本上的任务效果

NTK-ALiBi插值

  • 频域:RoPE编码或ALiBi编码其共同点,都是将位置空间编码为频域空间,其中三角函数(RoPE)或偏置项(ALiBi)的系数,即为频域值。

  • NTK-RoPE插值:NTK-RoPE位置编码的改进,在于保持分辨率的情况下(高频),实现了频域空间缩放(低频),从而实现位置空间的插值。

  • NTK-ALiBi插值:受NTK编码的启发,我们也可以对ALiBi的频域空间进行缩放,实现NTK-ALiBi的位置插值。改进后的偏置项系数为:

    • m h = 1 2 8 h / H ∗ a ( h − 1 ) / ( H − 1 ) m_h = \frac{1 }{ 2^{8h/H} * a^{(h-1)/(H-1)}} mh=28h/Ha(h1)/(H1)1
    • b = a 1 / ( H − 1 ) b = a^{1/(H-1)} b=a1/(H1), 则有: m h = b / ( 2 8 / H ∗ b ) h m_h = b / (2^{8/H} * b)^h mh=b/(28/Hb)h
    • NTK改进后可以实现高频分辨率不变,低频视野放大的效果
    • 注:通常可以将缩放系数a设为:a = 推理长度 / 训练长度
  • 解释:NTK-ALiBi的公式看起来可能有些难懂,但核心思想与苏建林大佬所说的“高频外推,低频内插”相同。下面从两种情况考虑:

    • h=1时,视野较小,为高频情况。m_h = 1 / 2^(8/H),与原始偏置系数相同,相当于直接外推,因此是高频外推。高频视野分辨率不变。
    • h=H时,视野较大,为低频情况。m_h = 1 / {2^8 * a},在原始偏置基础上缩减了a倍,等价于对位置进行了内插值,因此是低频内插。低频视野变大a倍。

参考

https://zhuanlan.zhihu.com/p/632780188

NTK-ALiBi:通过插值实现大模型ALiBi位置编码的长文本外推

http://www.lryc.cn/news/161945.html

相关文章:

  • 第3章_瑞萨MCU零基础入门系列教程之开发环境搭建与体验
  • AI在医疗保健领域:突破界限,救治生命
  • centos7安装kubernets集群
  • 【多线程】线程安全与线程同步
  • 指针权限,new与delete,类与对象,函数模板,类模板的用法
  • Unity——脚本与序列化
  • NJ求职盘点
  • 01卡特兰数
  • 若依前端vue设置子路径
  • Vue中使用pdf.js实现在线预览pdf文件流
  • 态、势、感、知与时空、关系
  • D. Paths on the Tree
  • CocosCreator3.8研究笔记(九)CocosCreator 场景资源的理解
  • 大数据课程L1——网站流量项目的概述整体架构
  • 提升数据库安全小技巧,使用SSH配合开源DBeaver工具连接数据库
  • 信息安全技术概论-李剑-持续更新
  • java项目基于 SSM+JSP 的人事管理系统
  • 【Node.js】—基本知识点总结
  • Leetcode.174 地下城游戏
  • python实现adb辅助点击屏幕工具
  • 智能合约安全分析,针对 ERC777 任意调用合约 Hook 攻击
  • nodejs 爬虫 axios 异步爬虫 教程 【一】
  • Swift学习笔记三(Dictionary 篇)
  • javax.mail 遇到501 mail from address must be same as authorization user 的問題
  • 【Python】网络编程
  • 客户端开发常用框架
  • 数据分析综述
  • 区块链技术与应用 - 学习笔记2【密码学基础】
  • 制作Linux发行版安装镜像:复刻centos镜像安装ISO
  • 【复习socket】每天40min,我们一起用70天稳扎稳打学完《JavaEE初阶》——29/70 第二十九天