Alibi位置向量外推性:看起来很长其实还是短

简介: Alibi位置向量外推性:看起来很长其实还是短

image.png

Transformer 模型,因为不像 RNN 序列模型,无法天然就给位置信息加入模型中,这时候就需要我们手动将位置信息给注入到模型里去了。

最  Naive 的方法就是每个位置都当成一个特殊 token,比如位置1是一个 token 有自己 embedding,位置2也有一个...  之后进行学习。但这种方法最大的问题是,无法外推(extrapolation),也就是训练时如果你最长只用到了 512  长度,那么推理时也就只能最长到 512 长度,再往上就位置向量余额不足了。

如果能外推,不光是使用时方便很多,而且也能让训练成本降低很多,因为经典的 Transformer 模型随长度的计算复杂度是 级别的,所以能降低训练长度对效率提升也很大。

已有位置向量外推性探讨

先来梳理一下已有的位置向量(Position Embedding)的各自的外推性,同时也来看看位置信息注入在 Transformer 中的发展脉络。

Naive Learned Position Emebedding

即开头说的,给每个位置当成是一个特殊的  token,从 lookup table 中取 embedding 加和起来。如之前所说一点外推性都没有,即便代表更长长度的  token,比如训练最大到512,但推理时扩展位置向量表到 1024,但对于模型来说 512 以上的位置向量没经过训练,所以扩展了也没用。

image.png

鉴定完毕:毫无外推性!

Sinusoidal Position Embedding

这个和上面 naive 在同一篇论文提出,不同在于不用训练,不过也是直接加和到 token embedding 上去。

首先提出一个好的位置向量的标准:

  • 每个时间步都要有一个独特的 embedding
  • 一句话里面任意两个相同距离时间步之间的向量距离也相同

于是 Transformer 论文作者提出的是下面这个公式

image.png

具体分析可以查看知乎文章,大概思路是通过正弦函数(Sinusoidal functions)来给每个位置向量一个独特编码,同时保留一定性质,和用 bit 表示数字类似。看看大概可视化结果。

image.png

比起需要学习的位置向量,正弦位置向量(Sinusoidal Position Embedding),如要扩展更长的位置向量也很简单,直接公式一套就行。实际实验推理时的外推性,发现大概能比起训练时多推 50 个 token。

鉴定完毕:有一丢丢外推性!

Rotary Position Embedding

苏神提出的方法,具体推导很精彩。

主要对正弦位置向量的改进,但主题思路还是通过绝对位置编码的方式实现相对位置编码。而之前正弦位置向量有些性质不够好,需要解决

  • 正弦位置向量直接和 token embedding 相加,然后用于 attention 运算,不太能利用好它相对距离不变则相对位置向量计算结果也不变的性质;
  • 同时正弦位置向量只在输入 embedding 层加上,高层网络不太能直接感知到位置(虽然有残差连接)

于是  Rotary Position Embedding  通过复数运算推导,将位置向量替换成了一个满足通过绝对编码实现相对位置性质的矩阵,去参与运算。为什么叫  Rotary,因为里面用到了复数运算,而复数乘法在2维坐标轴表示,可看成在做旋转(Rotary)。如下式所示,给绝对位置转换成相对编码。

image.gifimage.png

实现上一个很大的区别是,不是在最下面层加上位置向量,而是每一层都将这个位置信息注入一次,主要是通过影响 q 和 k 的运算。

该方法的外推性就强了很多,推理时比训练时大概能往外推 100多个token。

鉴定完毕:比较好外推性!

T5 Bias Position Embedding

相比之前的方法 T5 bias 在注入位置信息更进一步了:直接在 Attention map 上进行操作。

大致方法为对不同距离 query 和 key 学习一个对应的标量值,然后将这个标量加在 attention score 上(过 softmax 操作之前)。同时不光学习一组这样关系,可以学习多组。

和 Rotary 相同的是,这也是在每层都进行了操作。此外还对长度有一定限制,当超过 128 长度的相对距离后,每个都分配相同的标量值。

对于该方法,论文作者发现它的可外推性就非常强了,在 512 上训练上可以往外额外推 600,在 1024 长度训练可以外推 800 而困惑度(ppl)不衰减。

鉴定完毕:非常好的外推性!但因为中间学习过程,T5 Bias 速度比较慢。

三秒搞懂 Attention with Linear Biases(AliBi)

看完上一小节,发现对于  Transformer 中位置信息的加入,从最开始在底层对 Token Embedding 加和且需要学习开始,到不需要学习,直接在  Attention 计算层面对 Q 和 V 进行操作,再到直接对 Attention Score 进行操作,不断在变化。

而 AliBi 提出的 idea 很简单,特别是看完了 T5 Bias 之后,会发现其实也是直接对 Attention Score 进行操作。不同之处在于,它的 bias 不像 T5 那样靠学出来的,而是给了一个预设。

image.png

如图所示,只是给 attention score 加上一个预设好的偏置矩阵,相当于 q 和 k 相对位置差 1 就加上一个 -1 的偏置。其实相当于假设两个 token 距离越远那么相互贡献也就越低。

当然也不是就直接用这个矩阵一加就行,还是有借鉴 T5 Bias 里,加入了多组 bias. 主要的偏置矩阵都是相同的,不同的只是旁边的 m 系数,可以给 m 当成是一个斜率(Slope)。

论文中 m 系数也是预设好的,作者会根据 head 数来设置一组 m 系数,具体按照头的数量 n 从 的指数差值来进行设置,比如说 8 个头,那么就设置为
M 也可以训练获得,但作者们发现,训练获得的并没有带了的更好的性质。

实验结果与分析

实验结果主要通过在 WikiText-103 数据集上进行的展示,主要对比对象是正弦位置向量。

image.gifimage.png

发现相比起正弦位置向量,ALiBi 在外推性上更加有效,在更短长度文本上训练就能在更长文本上推理获得更好效果。而且不光在 WikiText 数据集,在其他数据集比如 Toronto Books 也能获得相同效果。

除了在多个数据集上的效果展现,作者们还在大模型(13亿参数)大数据大计算量上加入 ALiBi 进行训练,发现同样有效,也证明了该方法的可用性。

实验方面比较遗憾的是,只给 Sinusoidal 方法拎出来对比了,没有对比 Rotary 和 T5 Bias 两个方法,虽然前面有提给两个分别做了些实验。

之后又对 ALiBi 做了一个实验分析,首先提出的是为什么它测试时外推性比较强能带来更好的效果,这里提到一个概念 Early Token Curse。

image.gifimage.png

上图中涉及到两种模型对一句话进行推理计算 PPL 的方法,一种是上面蓝色滑窗(Sliding Window)式,还有一种是下面红色,不重叠(Nonoverlapping)式。

虽然滑窗式能提供更多的背景信息,但需要跑太多次,效率低;而不重叠式虽然不用跑太多次,但却会出现  Early Token Curse 问题,也就是这样切分后每一段前面的 token,看到的背景知识会比较少,比如切分后 sat  虽然前面的上下文信息 ”The big gray cat“ 肯定是有效的,但它看不到。

举个例子,如果推理长度是 1000,那其中就有10%的 token 看到的上下文信息是少于100个token的,而如果用了 ALiBi 方法给推理长度拓展到 2000,那就只有 5% 的 token 看到的上下文信息是少于100个token的。

因此 ALiBi 是一定程度上能解决 Early Token Curse 的问题。
虽然看起来好像 ALiBi 只是加入一个简单的线性偏置,结果却能让模型像人一样,通过看短文本,就能在测试时自动扩展到长文本,那以后都不用考虑太长文本训练了。

但是,真的是这样吗?分析最后给出了一个反转。

作者们却粉碎上面这个想法,因为他们发现,当用滑窗式方法来进行推理,即使当推理时的长度变长,但 ppl 并没有显著提升,这和常识是违背的。

image.png

特别是和实际更大长度训练模型进行对比时,比如说在 512 长度训练的,即使推理长度 1024 可以做,但效果还是没实际在 1024 长度训练过的好。

因此作者给出的解释,ALiBi 看起来外推性非常好,好像能够在比训练时候长非常多的样本上进行推理,但现实是,一旦当image.png 时,还是只能用到image.png 长度的背景信息。

之所以比 Sinusoidal 好,同时为什么 Rotary 还有 T5 Bias 的外推性也比较好,感觉主要跟相对位置编码的性质有关。

所以其实这样看来其实 ALiBi 这些还是没有真正的外推性,还是训练多长,推理就多长,只是因为它用的相对位置向量,所以表面上看起来好像能用很长长度进行推理,但实际还是训练时的长度。

相关文章
|
机器学习/深度学习 算法 Serverless
大模型开发:描述损失函数的作用以及一些常见的损失函数。
损失函数在机器学习中至关重要,用于衡量预测误差、优化模型、评估性能及选择模型。常见类型包括均方误差(MSE)、均方根误差(RMSE)、交叉熵损失(适用于分类)、绝对误差(MAE)、hinge损失(SVMs)、0-1损失、对数似然损失和Focal Loss(应对类别不平衡)。选择时要考虑模型性质、数据特征和优化需求。
1076 3
|
Web App开发 域名解析 缓存
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
本文我们主要为大家介绍在 Ubuntu 20.04 上安装 Node.js 和 npm 的三种不同的方式。
162283 7
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
|
9月前
|
搜索推荐 物联网 PyTorch
Qwen2.5-7B-Instruct Lora 微调
本教程介绍如何基于Transformers和PEFT框架对Qwen2.5-7B-Instruct模型进行LoRA微调。
10352 34
Qwen2.5-7B-Instruct Lora 微调
|
9月前
|
人工智能 JSON API
使用 Qwen 生成数据模型和进行结构化输出
本教程展示如何使用CAMEL框架和Qwen模型生成结构化数据。CAMEL是一个强大的多智能体框架,支持复杂的AI任务;Qwen由阿里云开发,具备自然语言处理等先进能力。教程涵盖安装、API密钥设置、定义Pydantic模型,并演示了通过Qwen生成JSON格式的学生信息。最后,介绍了如何利用Qwen生成多个随机学生信息的JSON格式数据。欢迎在[CAMEL GitHub](https://github.com/camel-ai/camel)上为项目点星支持。
3081 70
|
9月前
|
人工智能 自然语言处理 并行计算
ASAL:Sakana AI 联合 OpenAI 推出自动探索人工生命的系统,通过计算机模拟生命进化的过程
ASAL 是由 Sakana AI 联合 OpenAI 等机构推出的自动化搜索人工生命系统,基于基础模型实现多种搜索机制,扩展了人工生命研究的边界。
338 1
ASAL:Sakana AI 联合 OpenAI 推出自动探索人工生命的系统,通过计算机模拟生命进化的过程
|
11月前
|
数据采集 自然语言处理 文字识别
92页的llama 3.1技术报告,我替你们啃下来了
作者花了半个月时间,认真读完了llama 3.1技术报告,并总结成本文,希望能帮到对这个感兴趣的小伙伴们。
92页的llama 3.1技术报告,我替你们啃下来了
|
11月前
|
机器学习/深度学习 算法 物联网
大模型进阶微调篇(一):以定制化3B模型为例,各种微调方法对比-选LoRA还是PPO,所需显存内存资源为多少?
本文介绍了两种大模型微调方法——LoRA(低秩适应)和PPO(近端策略优化)。LoRA通过引入低秩矩阵微调部分权重,适合资源受限环境,具有资源节省和训练速度快的优势,适用于监督学习和简单交互场景。PPO基于策略优化,适合需要用户交互反馈的场景,能够适应复杂反馈并动态调整策略,适用于强化学习和复杂用户交互。文章还对比了两者的资源消耗和适用数据规模,帮助读者根据具体需求选择最合适的微调策略。
3176 5
|
机器学习/深度学习 人工智能 自然语言处理
Self-Attention 和 Multi-Head Attention 的区别——附最通俗理解!!
Self-Attention 和 Multi-Head Attention 的区别——附最通俗理解!!
956 0
Self-Attention 和 Multi-Head Attention 的区别——附最通俗理解!!
|
存储 人工智能 并行计算
Pai-Megatron-Patch:围绕Megatron-Core打造大模型训练加速生态
Pai-Megatron-Patch(https://github.com/alibaba/Pai-Megatron-Patch)是阿里云人工智能平台PAI研发的围绕Nvidia MegatronLM的大模型开发配套工具,旨在帮助开发者快速上手大模型,完成大模型(LLM)相关的高效分布式训练,有监督指令微调,下游任务评估等大模型开发链路。最近一年来,我们持续打磨Pai-Megatron-Patch的性能和扩展功能,围绕Megatron-Core(以下简称MCore)进一步打造大模型训练加速技术生态,推出更多的的训练加速、显存优化特性。
|
数据挖掘
InsTag:大语言模型监督微调数据标签标注工具
魔搭社区发布了一个名为“InsTagger”的工具,用于分析LLM(大语言模型)中符合人类偏好的监督微调(SFT)数据。InsTagger 是基于 InsTag 方法训练的本地指令标签标注器,用于为符合人类偏好的监督微调数据集中的指令标注描述其意图和语义的标签,从而指导指令的分流或监督微调数据集的分析。