ChatGPT 人工智能 GPT4 伦理 生成式 医疗 监管 安全 机器学习 深度学习 神经网络 计算机视觉 强化学习 模型 算法 应用 开发 研究 工具 平台 框架 数据集 训练 部署 安全 合规 培训 投资 LLM,llm AI,ai,Ai 大模型 大语言模型 制图 生图 绘图 文生图 文生视频 生成式AI AGI 世界模型 sora chatGPT,chatgpt,ChatGpt claude openai Llama deepseek midjourney 红熊猫模型 Red panda,panda Stable Diffusion,StableDiffusion,stable DALL- E 3 DALL E DALL Flux,flux 扩散模型 混元大模型 文心一言 通义千问 可灵 Pika PixelDance 豆包 月之暗面 零一万物 阶跃星辰 搜索增强 MiniMax Talkie Agent prompt fastai LangChain TTS 微调 提示词 知识库 智能体
# 热门搜索 #
搜索
Transformer的无限之路:位置编码视角下的长度外推综述
7843点击    2024-01-16 10:13

在自然语言处理(Natural Language Processing,NLP)领域,Transformer 模型因其在序列建模中的卓越性能而受到广泛关注。然而,Transformer 及在其基础之上的大语言模型(Large Language Models,LLMs)都不具备有效长度外推(Length Extrapolation)的能力。这意味着,受限于其训练时预设的上下文长度限制,大模型无法有效处理超过该长度限制的序列。


文本续写和语言延展是人类语言的核心能力之一,与之相对的,长度外推是语言模型智能进化的重要方向,也是在大模型时代最为高效的将模型的能力迁移到长序列数据的重要方法,对该问题的研究兼具理论价值和应用价值。因此,大量的相关工作持续涌现,在不断扩展语言模型能力边界的同时,也呼唤一篇系统性的综述来对这一领域进行概览。


基于此,哈尔滨工业大学的研究者们从位置编码(Position Encoding, PE)的角度出发,全面地总结了 Transformer 模型在长度外推方面的研究进展,系统地回顾了各种旨在增强 Transformer 长度外推能力的方法,主要包括可外推的位置编码和基于这些位置编码的拓展方法。



论文链接:https://arxiv.org/abs/2312.17044


可外推的位置编码


由于 Transformer 自身具有置换不变性(Permutation Invariance),无法直接捕获每个词在序列中的位置信息,因此使用位置编码将序列中元素顺序信息融入Transformer成为一种常见做法。根据位置编码表示的是序列中元素的绝对位置信息还是相对位置信息,业界将位置编码分为绝对位置编码(Absolute Position Encoding,APE)和相对位置编码(Relative Position Encoding,RPE),其主要区别如下图所示(左图表示 APE,右图表示 RPE)。



考虑到现有研究表明这一分类对模型的外推能力有重要影响,我们根据这一分类来对本节内容进行划分。


绝对位置编码


在原始的 Transformer 论文中,位置编码是通过正弦和余弦函数生成的,这些函数将位置映射到模型的表示空间中。Transformer 的作者猜想这种正弦位置编码可以有效外推,但是后来的研究成果否定了这一猜想。尽管如此,作为 Transformer 的第一个 PE,正弦 APE 对之后的 PE 产生了重大影响。


为了增强 Transformer 模型的外推能力,研究人员要么通过随机位移将位移不变性融入正弦 APE 中,要么生成随位置平滑变化的位置嵌入并期望模型能够学会推断这一变化函数。基于这些思想的方法展现出比正弦 APE 更强的外推能力,但仍无法达到 RPE 的水平。原因之一是,APE 将不同的位置映射到不同的位置嵌入,外推意味着模型必须推断出不曾见过的位置嵌入。然而,这对于模型来说是一项艰巨的任务。因为在广泛的预训练过程中重复出现的位置嵌入数量有限,特别是在 LLM 的情况下,模型极易对这些位置编码过拟合。


相对位置编码


由于 APE 在长度外推上的表现难以令人满意,而 RPE 天然地由于其位移不变性具备更好的外推能力,并且人们普遍认为上下文中单词的相对顺序更重要。近年来,RPE 已成为编码位置信息的主要方法。


早期的 RPE 来自于对正弦位置编码的简单修改,并常常结合裁剪或分箱策略来避免出现分布外的位置嵌入,这些策略被认为有利于外推。此外,由于 RPE 解耦了位置和位置表示之间的一对一对应关系,因此将偏差项直接添加到注意力公式中成为将位置信息集成到 Transformer 中的一种可行甚至更好的方法。这种方法要简单得多,并且自然地解开了值(value)向量和位置信息的纠缠。然而,尽管这些偏置方法具有很强的外推性,但它们无法表示 RoPE(Rotary Position Embedding,旋转位置编码)中那样复杂的距离函数。因此,尽管 RoPE 的外推性较差,但由于其优异的综合性能,成为近来 LLMs 最主流的的位置编码。论文中介绍的全部可外推 PE 如表 1 所示。

 

 

大模型时代的外推方法


为了增强 LLMs 的长度外推能力,研究者们基于现有的位置编码提出了多种方法,主要分为位置插值(Position Interpolation)和随机化位置编码(Randomized Position Encoding)两大类别。


位置插值方法


位置插值方法通过在推理时对位置编码进行缩放,使得原本超出模型训练长度的位置编码在插值后落入已训练位置区间。由于其卓越的外推性能和极低的开销,位置插值方法引起了研究界的广泛兴趣。此外,与其他外推方法不同,位置插值方法已经广泛出现在开源模型中,例如 Code Llama、Qwen-7B 和 Llama2。然而,目前的插值方法仅仅关注 RoPE,如何通过插值使采用其他 PE 的 LLM 具备更好的外推能力仍需探索。


随机化位置编码


简单来说,随机化 PE 只是通过在训练期间引入随机位置来将预训练的上下文窗口与较长的推理长度解耦,从而提高了较长上下文窗口中所有位置的曝光度。值得注意的是,随机化 PE 的思想与位置插值方法有很大不同,前者旨在使模型在训练过程中观察到所有可能的位置,而后者试图在推理过程中对位置进行插值,使它们落入既定的位置范围内。出于同样的原因,位置插值方法大多是即插即用的,而随机化 PE 通常需要进一步微调,这使得位置插值更具吸引力。然而,这两类方法并不互斥,因此可以结合它们来进一步增强模型的外推能力。


挑战与未来方向


评测与基准数据集:在早期研究中,对 Transformer 外推能力的评估来自各下游任务的性能评价指标,如机器翻译的 BLEU;随着 T5、GPT2 等语言模型逐渐统一自然语言处理任务,语言建模所使用的困惑度成为外推的评价指标。然而,最新的研究已经表明困惑度无法揭示下游任务的性能表现,因而亟需专用的基准数据集与评测指标来推动长度外推领域的进一步发展。


理论解释:目前的长度外推相关工作大都是实证性的,尽管有一些解释模型成功外推的初步尝试,但坚实的理论基础仍未建立,究竟有哪些因素影响且如何影响长度外推性能仍然是一个悬而未决的问题。


其他方法:正如本文所述,现有的长度外推工作大多集中在位置编码视角下,但不难理解,长度外推需要系统性设计。位置编码是其中一个关键的组成部分,但绝非唯一的组成部分,更广阔的视野将进一步为这一问题带来激励。


文章来自于微信公众号 “机器之心


AITNT资源拓展
根据文章内容,系统为您匹配了更有价值的资源信息。内容由AI生成,仅供参考
1
RAG

【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。

项目地址:https://github.com/microsoft/graphrag

【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。

项目地址:https://github.com/langgenius/dify


【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。

项目地址:https://github.com/infiniflow/ragflow/tree/main


【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目

项目地址:https://github.com/phidatahq/phidata


【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。

项目地址:https://github.com/TaskingAI/TaskingAI

2
微调

【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。

项目地址:https://github.com/InternLM/xtuner