当前位置:   article > 正文

【论文速读】CoPE,基于上下文的位置编码,《Contextual Position Encoding: Learning to Count What’s Important》_contextual positional encoding

contextual positional encoding

论文链接:https://arxiv.org/html/2405.18719v2

个人理解,Transformer 架构的位置编码,是解决注意力机制缺乏序列信息的问题,但是以往的位置编码是基于Token级别的,所以LLM难以建立句子级别的更高层次的序列信息,也就很难关注到句子的概念。
本文的基于上下文的位置编码,解决了这个问题。

在这里插入图片描述

摘要

本文提出了一种新的位置编码方法,称为上下文位置编码(Contextual Position Encoding, CoPE),它允许位置信息根据上下文条件进行调整,通过模型确定的特定标记来递增位置。这种方法使得位置编码能够更普遍地应用于关注序列中的第i个特定词、名词或句子等。CoPE通过解决选择性复制、计数和Flip-Flop任务,在这些任务中流行的基于标记的位置嵌入失败,并且在语言建模和编码任务中降低了困惑度

解决的问题

  • 大型语言模型(LLMs)中的注意力机制是关键组件,它允许序列中的标记相互交互,但本身不包含顺序信息。
  • 现有的位置编码(PE)方法使用标记计数来派生位置,无法泛化到更高级别的抽象,例如关注第i个句子。
  • 现有的PE方法将位置和上下文编码分离,这限制了它们在处理基于上下文的位置信息时的能力。

方法概述

  • CoPE首先使用上下文向量确定要计数的标记,通过计算当前标记作为查询向量时,每个先前标记的门值。
  • 然后,CoPE聚合这些门值来确定每个标记相对于当前标记的相对位置。
  • CoPE不是使用固定的嵌入层来转换位置值,而是通过插值整数位置分配的嵌入来计算位置嵌入。
  • 这种上下文位置可以是小数,允许模型同时以多种单位(如标记位置、句子位置)来度量距离。
  • CoPE在多个任务上进行了测试,包括玩具任务和真实世界的语言建模任务,在这些任务中它表现出比现有基于标记的PE方法更好的性能。

直接看文章的图1,可以对文章方法有快速直观的认识。
在这里插入图片描述
图1在文章中展示了上下文位置编码(CoPE)的工作原理,并将其与标准的位置编码方法(如相对位置编码,Relative PE)进行了对比。下面是对图1的详细解释:

上下文位置编码(CoPE)的工作原理:

  1. 门值计算:CoPE首先根据上下文计算门值(gates)。这是通过使用当前标记的查询向量(query vector)和先前标记的键向量(key vectors)计算点积,然后应用sigmoid函数来实现的。门值决定了哪些标记在计算位置时应被考虑。

  2. 累积求和:接着,CoPE使用这些门值来确定每个标记相对于当前标记的位置。这是通过在当前标记和目标标记之间的门值上进行累积求和来实现的。

  3. 位置插值:与基于标记的位置编码不同,CoPE的位置值可以是小数,因此不能直接分配嵌入向量。CoPE通过对最接近的整数值的嵌入向量进行插值来计算位置嵌入。

  4. 注意力计算:最后,CoPE使用这些位置嵌入来调整注意力权重,使得查询向量可以在注意力操作中使用它们。

CoPE与标准位置编码的对比:

  • 相对位置编码:在传统的相对位置编码中,位置是基于标记的索引来计算的,它依赖于标记的绝对位置或相对于其他标记的位置。

  • CoPE:与之不同,CoPE首先根据上下文信息计算门值,然后使用这些门值来为标记分配位置,这允许位置表示更加抽象的单元,如单词、动词或句子。

示例:

  • 图1中的示例展示了一个句子 “Alice was tired. She tried reading. A rabbit came”,并且展示了如何使用CoPE来关注句子中的特定部分。
  • 在这个例子中,CoPE能够通过设置门值来只关注句子的结尾,从而简化了对句子位置的注意力分配。

图1通过对比CoPE和传统位置编码方法,展示了CoPE如何使模型能够更加灵活和有效地处理序列数据中的上下文信息。

当然,图1的示例容易让人产生误解,sigmoid的输出值在0和1之间,而图1中CoPE的gates只有0和1,没有0和1之间的小数值。个人猜测,这主要是为了简化表示,为了直观理解,作者可能选择了只展示极端情况,即门完全打开(1)或完全关闭(0)。图1是一个示例,用于说明CoPE的概念和工作原理,通过控制阈值,让句子的结尾对应为1,其他位置为0,表明CoPE的设计很好的建立了句子级别的位置编码,CoPE的设计也允许模型根据上下文动态地调整门值,能够产生不同级别的位置编码。

CoPE的数学表达

  1. 门值计算:CoPE首先根据上下文计算门值(gates)。通过使用当前标记的查询向量(query vector)和先前标记的键向量(key vectors)计算点积,然后应用sigmoid函数来实现的。门值决定了哪些标记在计算位置时应被考虑。这个门值计算允许微分,所以可以通过反向传播来训练。
    在这里插入图片描述

  2. 累积求和:接着,CoPE使用这些门值来确定每个标记相对于当前标记的位置。这是通过在当前标记和目标标记之间的门值上进行累积求和来实现的。
    在这里插入图片描述

  3. 位置插值:与基于标记的位置编码不同,CoPE的位置值可以是小数,因此不能直接分配嵌入向量。CoPE通过对最接近的整数值的嵌入向量进行插值来计算位置嵌入。e [

    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/749526
推荐阅读