前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Meta| 提出上下文位置编码:CoPE,解决当前模型「普遍存在的问题」,含GPT-4o!

Meta| 提出上下文位置编码:CoPE,解决当前模型「普遍存在的问题」,含GPT-4o!

作者头像
ShuYini
发布2024-05-31 14:10:12
6010
发布2024-05-31 14:10:12
举报

引言

Attention机制是大模型的核心组件,但该机制并不包含顺序信息,需要进行位置编码。当前位置编码(PE)主要是通过Token计数来定位,这限制了其泛化能力。例如无法针对特定的句子、名词进行定位。以下是在Kimi上测试结果,明显统计错误!

针对该问题,本文作者提出了一种新的位置编码方法——上下文位置编码(CoPE),它可以让大模型(LLMs)中的Token基于上下文进行更灵活的定位,降低语言建模和编码任务的困惑度,从而提高模型性能。

https://arxiv.org/pdf/2405.18719

背景介绍

当前大模型处理的数据源大部分都是有序序列,例如:文本、音频、代码以及事件时间线等。在处理此类数据过程中,信息的排序至关重要。比如在处理文本数据的情况下,位置信息不仅对于解码单词之间的含义至关重要,而且在每个尺度(如句子和段落级别)上都是必需的。

当前的大模型大多都是基于Transformer训练的,而Transformer的核心是Attention机制,但该机制本身并不包含顺序信息,而是将序列视为集合。因此,需要额外的机制来编码位置信息,其中位置编码(Position Encoding, PE)技术就是实现这一目的的一种方法,并且已成为LLMs不可或缺的一部分。

位置编码 (PE)主要原理是为每个位置分配一个嵌入向量,并将其添加到相应的Token表示中。位置编码有两种测量方式:绝对位置编码(Absolute Position Encoding,APE)和相对位置编码(Relative Position Encoding,RPE),其中APE是从序列的开头来对Token进行计数,RPE则从当前Token开始往后计数。

但是,现有位置编码(Position Encoding, PE)方法具备一个共同特点:它们通常使用Token作为计量单位。然而,Token是一个可变的单元,它可能是一个完整的单词、单词的一部分,甚至是一个字符,这取决于所使用的Tokenizer方法。例如,在Byte-Pair Encoding(BPE)Tokenizer方法中,一个单词可以是一个或多个Token,具体取决于单词本身。这种位置的变化在句子中更加显著,因为句子可能包含从十个到数百个Token不等。所以说Token位置并不适合用于通用的位置寻址。

为了能够将位置计量与语义上更有意义的单位(例如单词或句子)联系起来,需要考虑文本上下文。但这在当前的 PE 方法中是不可能的,因为位置寻址是独立于上下文计算的,然后与上下文寻址合并。本文作者认为位置和上下文寻址的分离是核心问题,因此提出了一种将上下文和位置寻址集成在一起的PE方法,称之为上下文位置编码(Contextual Position Encoding, CoPE)

CoPE

上面主要介绍了先前PE算法的局限性,有的小伙伴可能并没有一个直观的感受。下面带大家看一个例子。

下图中展示了一个简单的单词统计任务「给定两段话,其中一段话中会出现“Alice”、“book”等单词,另外一段话中都是指代表示并没有出现这两个单词,让模型来统计第二段话中“Alice”、“book”等词出现次数」。对于有能力的 LLM 来说,这应该是小菜一碟,但是令人惊讶的是,GPT4 和 Llama-2 70B Chat 都未能完成这项任务,具体回答结果如下:

看到这里,我自己其实也不相信,结果在文心一言、Kimi上都遇到此类问题:

这项任务对于PE 来说具有挑战性的原因是,模型需要关注最后一句而忽略前一句。一个句子中的Token数量差异很大,导致标记位置不精确。然而,如果用句子数量而不是Token数量来衡量位置,那么这项任务就会变得很容易,因为这么模型才会关注到正确的内容。

标准的位置编码方法都是基于Token位置来计算,例如Relative PE方法。为了能够解决该问题,本文作者提出了上下文位置编码(Contextual Position Encoding, CoPE)方法。

具体来说:CoPE 首先使用上下文向量来确定要计数的Token。具体来说,将当前Token作为请求向量,并使用其Key向量为每个先前Token计算一个门值(Gate Value)。然后,聚合这些门值门值(Gate Value)以确定每个Token相对于当前标记的相对位置,如下图所示。

与Token位置不同,此上下文位置可以取分数值,因此不能分配特定的嵌入向量。相反,CoPE通过插入分配给整数值的嵌入来计算位置嵌入。与其他 PE 方法一样,这些位置嵌入随后被添加到Key向量中,因此请求向量可以在Attention操作中使用它们。由于上下文位置可以根据不同的查询和层而变化,CoPE允许模型同时以多种单位测量距离。这意味着CoPE能够灵活地适应不同的上下文,为大型语言模型提供了一种更加动态和上下文相关的处理序列数据的方法。

实验结果

为了验证CoPE的有效性,本文作者将其应用于几个toy任务:计数、选择性复制和 Flip-Flop 任务,在这些任务中它的表现优于基于 token 的 PE 方法,尤其是在域外泛化的情况下。

为了测试现实世界的适用性,在维基百科文本上使用语言建模任务,结果显示 CoPE 也能带来更好的性能。在代码上进行训练时也观察到了同样的性能提升。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AINLPer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 背景介绍
  • CoPE
  • 实验结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档