当前位置: 首页 > news >正文

【大模型必备】位置编码终极指南:收藏学习RoPE如何改变Transformer架构

前言

来聊一聊位置编码吧,位置编码在现在的大模型,尤其是在 Transformer 架构中展现出不可或缺的地位,它为token 序列中不同位置的元素之间的依赖关系建模提供了宝贵的信息。在此之前,很多研究者研究了将位置信息整合到基于 Transformer 的语言模型学习过程中的各种方法,但在2021年追一科技提出了一种名为旋转位置嵌入 (RoPE) 的新方法,它有效地利用位置信息。具体而言,他们提出的 RoPE 使用旋转矩阵对绝对位置进行编码,同时将显式相对位置依赖关系纳入自注意力公式。值得注意的是,RoPE 有一些好的特性,包括序列长度的灵活性、随着相对距离增加而衰减的符元间依赖关系,以及为线性自注意力配备相对位置编码的能力。然而作者将这一个成果应用在Transformer结构中,并重命名为 RoFormer。

回顾

讲解选择位置编码前,可能我们先要了解一下什么是Transformer?现在有哪些编码?

提到Transformer,大家肯定知道的一篇文章《Attention is all you need》,地址我也放出来:https://arxiv.org/abs/1706.03762v7。 放归放,讲还是要讲一下,其实吧, attention就是google 2018年发表的一篇文章,里面比较经典的就是三个图,一个是Transformer的架构图,一个就是多头注意力计算,还有一个是注意并行计算图

如果你说就这个图有啥用,这样告诉你吧,现在所有的模型,说的是所有的,基本都是参考这个架构开发和训练。

现在我们来看下这个注意力计算吧,根据箭头看,重要的就是Q,K,V三个变量,整个Transformer就是围绕着三个变量进行计算,大模型训练当中,这三个变量的训练计算也是占大头。

再看看他们的数学公式:

q,k,v就是上图中的三个变量;x是输入的token; m,n 表示token对应的位置。

o表示注意力加权值,也可以称为token和token之间的关系值。

Attention讲完了,咱们在回顾一下绝对位置编码,在没有rope之前,基本是使用这个编码,具体公式如下:

你需要知道的是:x是输入token ; p 是postion,既绝对位置;x和p是直接相加的。这里给出来Bert使用绝对位置编码的一个案例:

class BertEmbeddings(nn.Module): """Construct the embeddings from word, position and token_type embeddings. """ def __init__(self, config): super(BertEmbeddings, self).__init__() self.word_embeddings = nn.Embedding(config.vocab_size, config.hidden_size, padding_idx=0) self.position_embeddings = nn.Embedding(config.max_position_embeddings, config.hidden_size) self.token_type_embeddings = nn.Embedding(config.type_vocab_size, config.hidden_size) # self.LayerNorm is not snake-cased to stick with TensorFlow model variable name and be able to load # any TensorFlow checkpoint file self.LayerNorm = BertLayerNorm(config.hidden_size, eps=1e-12) self.dropout = nn.Dropout(config.hidden_dropout_prob) def forward(self, input_ids, token_type_ids=None): seq_length = input_ids.size(1) position_ids = torch.arange(seq_length, dtype=torch.long, device=input_ids.device) position_ids = position_ids.unsqueeze(0).expand_as(input_ids) if token_type_ids is None: token_type_ids = torch.zeros_like(input_ids) words_embeddings = self.word_embeddings(input_ids) position_embeddings = self.position_embeddings(position_ids) token_type_embeddings = self.token_type_embeddings(token_type_ids) # embeddeding + absolute position embeddings = words_embeddings + position_embeddings + token_type_embeddings embeddings = self.LayerNorm(embeddings) embeddings = self.dropout(embeddings) return embeddings

但是研究者发现位置变量是一个可学习的变量,使用正弦函数作为p,可以更好的处理一些长序列的问题,并且可以保证值是唯一,所以下面的公式诞生了。

你要知道,这帮人都是喜欢折腾的,绝对位置编码能满足他们吗?显然是不能的,所以相对位置编码出现了。

相对位置编码就是在QKV三个变量计算的时候,做了一些工作,具体看下面的公式吧。

第一个公式就是QKV; 第二个公式就是QK相乘后的展开式; 第三个就是将绝对位置编码,用相对位置编码表示。

你要知道,这帮人都是喜欢折腾的,相对位置编码能满足他们吗?显然是不能的,所以旋转位置编码(ROPE)出现了。

注意:主角出现了!!!!!!!!!!!!

ROPE(旋转位置编码)

看下面的图,可能大家就更容易理解为啥需要rope了,dog和the dog,只需要旋转一下,其表示范围就变大了,接下来就看下它怎么实现的。

对于 为了将相对位置信息纳入,需要将查询 𝒒(m) 和键 𝒌(n) 的内积通过一个函数 g 来变换,该函数只接受词嵌入 𝒙(m)、𝒙(n) 以及它们的相对位置 m−n 作为输入变量.

假设给定:查询 𝒒(m) 和键 𝒌(n),则g的表示如下:

其中 Re⁡[⋅] 是复数的实部,(𝑾(k)𝒙(n))∗ 表示 (𝑾(k)𝒙(n)) 的共轭复数。 θ∈ℝ 是一个预设的非零常数,则上面的公式可以表示为:

该公式可以简化为:

其中,

更高效实现为,

如果一堆公式看着不爽,就直接看图吧,通过图可能容易理解点,如下图:

1、给定一个Query、Key 编码数据

2、拿到对应的embedding和position

3、设定一个θ 常数,将Q,K的位置编码X(1),X(2)进行rotate,给到新的X1和X2。

4、根据embedding和rotate position得到新的编码(embedding+rotate position)

当然说和实际实现还是有点小区别,具体的代码实现如下。

def apply_rotary_pos_emb(q, k, cos, sin, position_ids): # The first two dimensions of cos and sin are always 1, so we can `squeeze` them. cos = cos.squeeze(1).squeeze(0) # [seq_len, dim] sin = sin.squeeze(1).squeeze(0) # [seq_len, dim] cos = cos[position_ids].unsqueeze(1) # [bs, 1, seq_len, dim] sin = sin[position_ids].unsqueeze(1) # [bs, 1, seq_len, dim] q_embed = (q * cos) + (rotate_half(q) * sin) k_embed = (k * cos) + (rotate_half(k) * sin) return q_embed, k_embed

总结:从上面的公式和代码可以看到,cos和sin值很重要,是的,整个rope过程就是通过各种计算得到cos和sin,有了这两个值就可以进行embedding的rotate。

什么是长期衰减?

除此之外,可以Rope还有一个重要的特性,那就是长期衰减,这个也是论文中提到的一个重要的点。

通俗来说,RoPE 的长期衰减就是让模型“更关注近的,少理远的”,就像人说话更在意最近几句,而不是开头说了啥。

上图其实就是这个意思,随着token之间的距离越来越远,其内积值越来越小,既atten_score or atten_weight越来越小。

实验

这里也不做过来的解释了,就放两个图吧,以此来说明rope比其他编码是有优势的。

图中的ReFormer就是用了rope,而bert使用的是正弦位置编码(绝对位置编码)。

普通人如何抓住AI大模型的风口?

为什么要学AI大模型

当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!

DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。

与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。

AI大模型开发工程师对AI大模型需要了解到什么程度呢?我们先看一下招聘需求:

知道人家要什么能力,一切就好办了!我整理了AI大模型开发工程师需要掌握的知识如下:

大模型基础知识

你得知道市面上的大模型产品生态和产品线;还要了解Llama、Qwen等开源大模型与OpenAI等闭源模型的能力差异;以及了解开源模型的二次开发优势,以及闭源模型的商业化限制,等等。

了解这些技术的目的在于建立与算法工程师的共通语言,确保能够沟通项目需求,同时具备管理AI项目进展、合理分配项目资源、把握和控制项目成本的能力。

产品经理还需要有业务sense,这其实就又回到了产品人的看家本领上。我们知道先阶段AI的局限性还非常大,模型生成的内容不理想甚至错误的情况屡见不鲜。因此AI产品经理看技术,更多的是从技术边界、成本等角度出发,选择合适的技术方案来实现需求,甚至用业务来补足技术的短板。

AI Agent

现阶段,AI Agent的发展可谓是百花齐放,甚至有人说,Agent就是未来应用该有的样子,所以这个LLM的重要分支,必须要掌握。

Agent,中文名为“智能体”,由控制端(Brain)、感知端(Perception)和行动端(Action)组成,是一种能够在特定环境中自主行动、感知环境、做出决策并与其他Agent或人类进行交互的计算机程序或实体。简单来说就是给大模型这个大脑装上“记忆”、装上“手”和“脚”,让它自动完成工作。

Agent的核心特性

自主性:能够独立做出决策,不依赖人类的直接控制。

适应性:能够根据环境的变化调整其行为。

交互性:能够与人类或其他系统进行有效沟通和交互。

对于大模型开发工程师来说,学习Agent更多的是理解它的设计理念和工作方式。零代码的大模型应用开发平台也有很多,比如dify、coze,拿来做一个小项目,你就会发现,其实并不难。

AI 应用项目开发流程

如果产品形态和开发模式都和过去不一样了,那还画啥原型?怎么排项目周期?这将深刻影响产品经理这个岗位本身的价值构成,所以每个AI产品经理都必须要了解它。

看着都是新词,其实接触起来,也不难。

从0到1的大模型系统学习籽料

最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师(吴文俊奖得主)

给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

适学人群

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

AI大模型系统学习路线

在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。

  • 基础篇,包括了大模型的基本情况,核心原理,带你认识了解大模型提示词,Transformer架构,预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门AI大模型
  • 进阶篇,你将掌握RAG,Langchain、Agent的核心原理和应用,学习如何微调大模型,让大模型更适合自己的行业需求,私有化部署大模型,让自己的数据更加安全
  • 项目实战篇,会手把手一步步带着大家练习企业级落地项目,比如电商行业的智能客服、智能销售项目,教育行业的智慧校园、智能辅导项目等等

但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。

AI大模型入门到实战的视频教程+项目包

看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径


光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

海量AI大模型必读的经典书籍(PDF)

阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。

600+AI大模型报告(实时更新)

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

AI大模型面试真题+答案解析

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下

AI时代,企业最需要的是既懂技术、又有实战经验的复合型人才,**当前人工智能岗位需求多,薪资高,前景好。**在职场里,选对赛道就能赢在起跑线。抓住AI这个风口,相信下一个人生赢家就是你!机会,永远留给有准备的人。

如何获取?

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

http://www.cnnetsun.cn/news/4247806.html

相关文章:

  • 7B扩散LLM,居然能跟671B的DeepSeek V3掰手腕,扩散vs自回归,谁才是未来?
  • C指针进阶:Beej‘s Guide to C指针运算与数组本质完整指南
  • WinDiskWriter:macOS上3步做出Windows启动盘
  • UUIDv1秒变v6的位运算魔法:uuid-creator TimeOrderedCodec源码剖析
  • 极简语言编年史:milliForth、sectorForth 与 sectorLISP 深度对比
  • 大模型应用开发全流程:从初始构思到实验、效果评估和产品化!
  • C语言内存管理
  • 多传感器模块设计指南:从选型到固件的可穿戴实践
  • 什么是Transformer?什么是视觉Transformer?与CNN的比较谁更胜一筹?
  • 【AI大模型】一文讲透 AI Agent 与 AI Workflow 的区别和深度解析:从自动化到智能化的演进
  • 2026北京GEO优化服务商推荐:企业出海如何同步布局AI搜索品牌资产
  • AI Agent工具调用安全加固:Pyshackle预执行门控实战
  • YOLO手语识别实战:开箱即用数据集与模型训练全流程
  • Qwen 2.5 Max与DeepSeek R1测试对比,看到就是赚到!!
  • 基于LoRA的Qwen-VL视觉语言模型指令微调实战指南
  • 商业园林机器人:智能运维才是核心,而非割草本身
  • AgentX与InferenceX:智能体推理基准如何评估多步推理与工具调用
  • 最新盘点:五大厂开源GitHub项目,开发者不容错过的技术宝藏!
  • RAG技术完全指南:从零开始构建大模型知识库问答系统!大模型应用开发实战
  • 2024 人工智能最前沿:分享几个大模型(LLMs)的热门研究方向
  • i.MX6ULZ无头嵌入式计算方案:DART模块开发实践
  • 2026年UI/UX设计界震撼!AI工具崛起,传统设计岗位需求锐减30%,AI体验设计师薪资却飙升50%!
  • GPT-4+GraphRAG:知识图谱如何让RAG系统更智能?
  • 为什么现在大家都把Agent叫“智能体“呢?
  • 【AI大模型】RAG(检索增强生成)新探索:IdentityRAG 提高 RAG 准确性
  • DeepSeek-OCR 2 使用教程
  • MCU方案通过Alexa语音认证:架构拆解与量产实践指南
  • 树莓派3B即插即用替代方案:RK3566 SBC实测迁移指南
  • 2026年开始学习AI,是否为时已晚?揭秘为何30+人群在AI领域更具竞争力
  • 从互联网大厂到传统行业,AI产品经理的黄金时代