新鲜速递:图解新颖LLM的CoPE位置编码

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调重新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技术跟踪。若对于具身智能感兴趣的请移步具身智能专栏。技术宅麻烦死磕AI架构设计。

6月份第一天CoPE诞生了。与传统基于Token的位置编码不一样,CoPE采用上下文进行位置编码,进而帮助LLMs更好地进行计数任务。

快速总览

研究人员提出了一种新颖的位置编码方法,称为上下文位置编码(下文称之为CoPE),它有别于基于标记的传统位置编码范式。

  • 它以上下文依赖的方式测量位置,在按位置寻址时会更加自由

  • 它在如下的任务中获得不错的收益:Flip-Flop, Selective Copy, Counting, Language Modeling, and Code Modeling tasks

  • 它优于现有方法,尤其是在域外泛化场景

  • 它有可能改善其他领域的编码,例如视频和语音。在这些领域,基于Token位置的编码不太合适。

位置编码的思考

大型语言模型(LLMs)如何理解句子中单词的顺序?这是语言理解的关键部分,这样的机制称为位置编码( Positional Encoding)。

先考虑一个简单的例子:“狗坐在椅子上”。若只给出LLM一个单词列表“dog、sat、on、the、chair”,它不知道哪个单词排在第一位、第二位,而位置编码此时就大派用场。

位置编码主要是用于添加有关序列中每个单词位置的信息,帮助大模型解码个中含义。从常识出发,有很多不同的方法可以实现。例如绝对位置编码,其中每个单词都被分配一个表示其位置的唯一向量;还有相对位置编码,其中相对于当前单词测量位置。但是,这两种方法都基于对Token进行计数编码,而不考虑上下文。

上图为传统Transformer的位置编码

在这里举个例子,假如n=10000(超参数,可以设置),L=6(输入序列长度),d_model=4(向量维度)。那么下图为每个Token的编码向量P0,……,P5的计算方法。这里值得一提的是P下标0,……5某种意义上就是每个Token的位置信息。


研究人员认为现有的位置编码方法不足以完成更复杂的任务,例如理解句子或段落的结构,因此CoPE(上下文位置编码)诞生。它与上下文相关,也意味着一个单词的位置不仅取决于它在序列中的数字位置,还取决于它与其他单词的关系以及文本的整体结构。

上图体现了新的位置编码和传统相对位置编码之间的区别。传统的方法从11开始一直延续到0(最近)。仔细观察,CoPE的位置编码和Q和K相关。

传统的位置编码

绝对位置编码:想象一个单词序列,每个单词都有一个与之关联的唯一向量。此向量表示其在序列中的位置。因此,第一个单词有一个表示位置 1 的向量,第二个单词有一个表示位置 2 的向量,依此类推。

相对位置编码:相对位置编码考虑单词在序列中的相对位置。它不是为每个位置分配一个固定的向量,而是计算当前单词和它所关注的单词之间的距离。例如“前N个单词”、“后退M个单词”等。

论文中给出了一个例子,给出一段文字,问它某个单词出现几次。结果GPT4和Llama2都扑街了。

因为模型依赖于标记位置,当单词与上次出现之间的距离很大或序列长度不可预测时,标记位置可能不精确。

下图为论证过程,没兴趣的读者可以跳过。大致的意思就是假设有个输入“yyyyxyyyy……”,若是序列过长,大于某个阈值(i > Δ/δ )则大模型则无法关注到x。

CoPE

CoPE提供了一种新颖的方法,通过考虑上下文来解决现有方法的局限性。对于序列中的每个单词,CoPE 会计算每个前一个单词的门值(gate value)。门值是通过将当前单词的查询向量与前一个单词的键向量进行比较来确定的。门值为 1 表示前一个词很重要,在位置测量中应予以考虑。值为 0 表示前一个单词不相关。

CoPE 使用门值的累积总和来计算每个单词相对于当前单词的位置。这意味着位置编码不仅是一个数字,而是相关单词的计数。

由于位置编码不一定是整数,所以CoPE使用整数位置之间的插值来生成位置嵌入(Embedings)。然后嵌入添加到K向量,从而允许Q向量在注意力机制中使用。

一头雾水,没关系,拿论文的实例来讲解下。

假如输入为“Alice was tired. She tried reading. A rabbit came”,当前的单词为“came”。

  1. CoPE 将首先计算此序列中每个单词的门值。例如,单词“tired”的门值可能为1,表示它与当前单词相关,而“rabbit”的门值可能为0,表示不相关。

  2. 然后,CoPE 将使用这些门值的累积总和来计算数值。例如,“tired”相对于最后一个单词“came”的位置可以认为是2。

  3. 紧接着CoPE 将为位置2生成一个位置嵌入,该位置嵌入将是位置1和3的之间的插值。

  4. 最后,将获得到的位置嵌入加到单词“tired”的K向量中,允许模型根据其上下文位置(而不仅仅是其在序列中的数字位置)来关注“tired”。

当然实际的算法比较复杂,上面仅仅是为了辅助理解。一般而言注意力的运算如下公式,其实就是上面那张可视化的数学表达方法

而CoPE则利用Qi和Kj相乘过激活函数σ,累加得到Pij

这个时候pij不一定是个整数,因此不能像RoPE一样将Pij进行变换得到位置编码向量。因此首先针对每个p ∈ [0, T]分配一个可以学习的编码向量e[p],然后按照下面的公式进行插值处理。

最终在进行注意力的计算:

小结

这幅图展示了CoPE可以将注意力集中在抽象元素上,例如当前段落(左)和章节(右)。这里展示了Wikitext-103上仅由位置引起的注意力。由于CoPE是语境化的,它根据段落和章节的位置来关注它们。在左侧,可以它留意到了各段由换行符分隔(用黑色加号标记),而右侧则留意到章节标题分隔,例如“==说明==”(黑色加号记)。

最后来看看它的荣誉墙,Flip-Flop Task要求模型记住特定单词的最后一次出现,并在可以有“ignore”指令的序列中找回其相关的部分。CoPE 在此任务中的表现优于现有方法,尤其是在当前单词与最后一个“w”之间的距离远远超出的场景。

Selective Copy Task要求模型有选择地从序列中复制标记,跳过指定的“空白”标记。CoPE 在这项任务上获得了满分,显示了它处理特定单词和排除不需要的元素的能力。

CoPE 还在代码任务上进行了测试。实验表明与传统方法相比,它提高了困惑度分数。这表明CoPE在更多结构化数据领域中可能有一定的提升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于docker的oracle12.2.0.1部署及oracle使用与docker镜像容器制作迁移方法

基于docker的oracle12.2.0.1部署及oracle使用与docker镜像容器制作迁移方法 本文介绍了基于docker的oracle12.2.0.1部署,包含了oracle基本配置、监听器和实例启动方法、PDB和CDB操作方法、表空间建立和用户数据库建立、常见启动问题解决等,并介绍了镜像制…

二、go微服务项目“商城项目实战开发”第二步grpc和gin的直连调用

文章目录 商城项目实战开发-GRPC和GIN的直连调用01、本次课程微服务的技术栈02、用户服务接口定义和实现登录1、密码问题01、MD5的方式02、加盐的方式03、动态盐04、使用加盐框架passwordEncoder2、用户服务接口的暴露3、Grpc的实现步骤1.定义暴露接口2.编写user的调用文件3.编…

YOLOv8_obb预测流程-原理解析[旋转目标检测理论篇]

YOLOv8_obb的预测流程,主要分预处理模块、推理模块和后处理模块。这里面有很多内容是和目标检测预测流程是重合的,主要区别在于Angle分支、NMS后处理以及regularize_rboxes部分。本文也主要介绍一下这三个模块,其他模块可以结合YOLOv8预测流程-原理解析[目标检测理论篇]一起…

【TensorFlow深度学习】卷积层变种与深度残差网络原理

卷积层变种与深度残差网络原理 卷积层变种与深度残差网络:探究卷积神经网络的进化与优化策略卷积层:深度学习的基石变种与卷积层变种深差网络:深度网络的优化策略实战代码示例:ResNet模块实现结语 卷积层变种与深度残差网络&#…

vue.config.js中,devServer对象用于配置开发服务器的行为

devServer: {hot: true, // 启用模块热替换(Hot Module Replacement,HMR)。liveReload: true, // 启用页面自动刷新。当热更新失败时,将回退到页面自动刷新。open: true, // 启动服务器后自动打开浏览器。port: 8080, // 设置开发…

linux内核splice方式实现零拷贝

splice() splice函数是linux系统提供的高级I/O函数&#xff0c;同sendfile系统调用函数一样&#xff0c;也是零拷贝操作函数。splice函数用于在两个文件描述符之间的移动数据。 函数原型: #include <fcntl.h> ssize_t splice(int fd_in, loff_t *off_in, int fd_out, …

免费SSL证书的安全性与获取指南

SSL证书是一种数字凭证&#xff0c;用于加密用户与网站之间的信息交换&#xff0c;以确保传输的数据不被第三方窃取。它像是一个数字版的密封印章&#xff0c;为数据的传输过程提供了一层保护膜。 免费的SSL证书通常由CA机构提供&#xff0c;它们同样可以提供基础数据的加密服…

16.Redis之Redis事务

1.MySQL 事务 原子性: 把多个操作,打包成一个整体了 一致性: 事务执行之前,和之后,数据都不能离谱~ 持久性: 事务中做出的修改都会存硬盘 隔离性: 事务并发执行,涉及到的一些问题~~ 2.Redis事务 2.1 认识Redis事务 • 弱化的原⼦性: redis 没有 "回滚机制". …

14、matlab中矩阵的赋值、调用、运算、范数和距离计算

1、矩阵赋值 1&#xff09;直接输入参数 代码&#xff1a; A[1 2 3 4 5;2 3 4 5 6]%矩阵赋值A 1 2 3 4 52 3 4 5 6 2)全一矩阵 代码&#xff1a; Cones(3:3)%全1矩阵C 1 1 11 1 11 1 1 3&#xff09;全零矩阵 …

.NET最新漏洞 | 某SLMS系统存在SQL注入

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

翻译《The Old New Thing》- How do I force the ECHO command to echo?

How do I force the ECHO command to echo? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20080403-00/?p22883 Raymond Chen 2008年04月03日 如何强制执行ECHO命令以进行回显&#xff1f; 简要 ECHO命令用于在命令行打印文本&#xff0…

统一预订,YonSuite商旅费控助力成长型企业“消灭报销”

在成长型企业快速发展的道路上&#xff0c;商旅管理作为连接企业内外的重要纽带&#xff0c;其效率与成本直接影响着企业的整体运营。面对日益增长的商旅需求&#xff0c;如何简化预订流程、降低管理成本、提高运营效率成为了成长型企业亟待解决的问题。用友YonSuite商旅费控以…

【权威出版】2024年新媒体、网络与电子商务国际会议(NMNE 2024)

2024年新媒体、网络与电子商务国际会议 2024 International Conference on New Media, Networking, and E-commerce 【1】会议简介 2024年新媒体、网络与电子商务国际会议即将召开&#xff0c;这是一次集结全球新媒体、网络与电子商务领域精英的学术盛会。 本次会议将深…

DPDK基础组件一(mbuf、ring、pktmbuf_pool)

一、rte_mbuf 此部分转自:https://zhuanlan.zhihu.com/p/616314276 1.mbuf结构 mbuf是报文中的描素的结构体,是整个转发过程中最核心的数据结构之一。主要针对于mbuf的常用API与基本原理做一个简单的介绍。 mbuf:报文内存存储结构,存储在mempool中mempool:使用环形缓冲…

Latex中论文常用的符号、公式、引用格式

内容符号 波浪号 ~&#xff1a;$ \sim $加减号 &#xff1a;$ \pm$点 &#xff1a;$ \cdot $乘号 ∗&#xff1a;$ \ast $约等于 ≈&#xff1a;$ \approx $≤ : $ \le $≥ : $ \ge $ 数学表示 下箭头 ↓ \downarrow ↓ &#xff1a;$ \downarrow $上箭头 ↑ \uparrow ↑: $…

Web安全:软件开发的安全问题与解决方案

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

第三站:Java红——异常处理的热情与挑战

### 第三站&#xff1a;Java红——异常处理的热情与挑战 在Java编程的征途中&#xff0c;异常处理是无法绕过的“红色地带”&#xff0c;它充满了挑战&#xff0c;也饱含解决问题的热情。通过合理地使用异常处理机制&#xff0c;我们可以编写出更加健壮、容错性强的代码。本节…

jni调用so或dll区别

在Java中通过JNI&#xff08;Java Native Interface&#xff09;调用本地代码时&#xff0c;所使用的动态库文件扩展名&#xff08;如 .dll 对于Windows或 .so 对于Unix-like系统&#xff09;取决于你的操作系统和目标平台。 DLL&#xff08;Dynamic Link Library&#xff09;…

python数据预处理

PYTHON 最流行库&#xff1a;Numpy、Matplotlib 和 Pandas。Numpy 是满足所有数学运算所需要的库&#xff0c;由于代码是基于数学公式运行的&#xff0c;因此就会使用到它。Maplotlib&#xff08;具体而言&#xff0c;Matplotlib.pyplot&#xff09;则是满足绘图所需要的库。Pa…

使用redis的setnx实现分布式锁

在Redis中&#xff0c;SETNX 是 “Set If Not Exists”&#xff08;如果不存在&#xff0c;则设置&#xff09;的缩写。这是一个原子操作&#xff0c;用于设置一个键的值&#xff0c;前提是这个键不存在。如果键已经存在,.则不会执行任何操作。 封装方法trylock&#xff0c;用…