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

大模型学习笔记------Llama 3模型架构之旋转编码(RoPE)

大模型学习笔记------Llama 3模型架构之旋转编码(RoPE)

    • 1、位置编码简介
      • 1.1 绝对位置编码
      • 1.2 相对位置编码
    • 2、旋转编码(RoPE)
      • 2.1 基本概念---旋转矩阵
      • 2.2 RoPE计算原理
        • 2.2.1 绝对位置编码
        • 2.2.2 相对位置编码
    • 3、旋转编码(RoPE)的优点

    上文简单介绍了 Llama 3模型架构。旋转位置编码(Rotary Position Embedding,RoPE)来自论文 Roformer: Enhanced Transformer With Rotray Position Embedding ,LLama 3、GLM 等模型都是使用了这种编码方式。RoPE是一种能够将相对位置信息依赖集成到 self-attention 中并提升 transformer 架构性能的位置编码方式。

1、位置编码简介

    位置编码(Positional Encoding)主要是为了解决Transformer中的时序问题,类似RNN的结构包含序列的时序信息。因此,位置编码是Transformer中确保模型能够理解序列顺序信息的重要部分。
    怎样理解位置编码呢?在Transformer结构中,将每个位置进行编号(即位置编码),并将每个位置编号(位置向量)对应一个词向量。通过结合位置向量和词向量作为输入embedding,就给每个词都引入了一定的位置信息,这样Attention就可以分辨出不同位置的词了。
    Transformer中常见的位置编码方法主要是绝对位置编码(Absolute Positional Encoding)和相对位置编码(Relative Positional Encoding)。

  • 绝对位置编码:在序列中的每个位置直接关联一个固定的嵌入;
  • 相对位置编码:表示序列中每两个token之间的相对位置信息;

1.1 绝对位置编码

    绝对位置编码的经典方法为正弦-余弦绝对位置编码,具体计算如下所示:
在这里插入图片描述其中, pos 表示序列中的位置, d 表示嵌入维度。例如pos分别等于0、1、2,其计算如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
    这种方法通过给定的位置索引为每个位置提供唯一的编码,确保模型能够理解token之间的顺序。

1.2 相对位置编码

    给定两个位置 i 和 j,其相对距离具体计算如下所示:
在这里插入图片描述
    相对位置可以是正的也可以是负的。相对位置编码关注的是序列中两个token之间的相对距离,而非绝对位置。

    这里就衍生出来了一个很有趣的问题,两种编码哪个更好一些呢?当然是相对位置编码。原因如下:
    绝对位置编码为每个位置生成独特的编码,这种方式对具体位置非常依赖,因此模型在处理输入时位置信息的影响很大。例如,输入序列中的一个特定单词在不同的句子位置上可能会有不同的表示,导致模型对该位置产生过度依赖。
    相对位置编码强调的是元素之间的相对位置(即一个元素与其他元素的相对距离),而不是它们的具体绝对位置。这使得模型能够在不同的上下文中识别相似的模式,因为相对位置与具体的序列长度和起始位置无关,从而增加了模型的泛化能力。

2、旋转编码(RoPE)

    RoPE(Rotary Position Embedding)结合了绝对和相对位置编码的优点。它使用旋转矩阵对每个位置进行编码,并直接将相对位置信息引入自注意力操作中。

2.1 基本概念—旋转矩阵

    在固定坐标系中,给定向量在这里插入图片描述以逆时针旋转O得到在这里插入图片描述
在这里插入图片描述
    其计算如下所示:
在这里插入图片描述
在这里插入图片描述

2.2 RoPE计算原理

2.2.1 绝对位置编码

    假设输入向量为在这里插入图片描述,其第 在这里插入图片描述个位置的编码向量可以表示为:

在这里插入图片描述
    旋转矩阵 在这里插入图片描述用二维旋转矩阵的张量乘积进行定义。将向量在这里插入图片描述拆分为一系列长度为2的子向量 在这里插入图片描述。其旋转形式为:
在这里插入图片描述
在这里插入图片描述
    这个矩阵表示每个位置在这里插入图片描述的绝对编码。

    经过RoPE编码后的输入向量与旋转矩阵结合,使得位置信息被直接嵌入到输入向量中。任意偶数维的RoPE,我们都可以表示为二维情形的拼接,即将词嵌入向量元素按照两两一组分组
在这里插入图片描述
    RoPE 的 self-attention 操作的流程如下:
在这里插入图片描述

2.2.2 相对位置编码

    RoPE在自注意力计算中引入相对位置信息。经过RoPE编码的 query(查询)向量在这里插入图片描述和key(键)向量在这里插入图片描述,在自注意力机制中的点积计算如下:

在这里插入图片描述
在这里插入图片描述
    这意味着RoPE在计算query和key之间的点积时,将相对位置信息直接融入了自注意力操作中。

3、旋转编码(RoPE)的优点

    RoPE的优点主要有以下几个方面:

    1)保持绝对位置信息:
      RoPE通过旋转矩阵编码每个位置的绝对信息,有效地保持了模型对绝对位置感知能力;
    2)引入相对位置信息:
      RoPE能够在自注意力操作中直接编码相对位置信息,使模型具有较好的相对位置感知能力;
    3)高效处理长序列:
      RoPE在处理长序列时通过在每一层的自注意力计算中使用旋转变换,确保了位置信息能够被有效保留和利用。这种方法减少了位置信息的损失,使得模型在处理长序列时能够保持较好的性能‌。

    RoPE通过旋转矩阵将绝对位置与相对位置信息相结合,既提供了绝对位置信息的精确性,又具备相对位置感知的灵活性,成为LLaMA等大型语言模型中重要的位置编码方法。

相关文章:

大模型学习笔记------Llama 3模型架构之旋转编码(RoPE)

大模型学习笔记------Llama 3模型架构之旋转编码(RoPE) 1、位置编码简介1.1 绝对位置编码1.2 相对位置编码 2、旋转编码(RoPE)2.1 基本概念---旋转矩阵2.2 RoPE计算原理2.2.1 绝对位置编码2.2.2 相对位置编码 3、旋转编码&#xf…...

Anthropic 的模型

Anthropic 的模型(特别是 Claude 系列)之所以在性能和推理能力上表现强劲,可以从技术设计、研究理念、训练方法以及应用优化等多个方面进行详细分析。以下是基于当前信息(截至 2025 年 3 月 13 日)和行业趋势的深入剖析…...

初探大模型开发:使用 LangChain 和 DeepSeek 构建简单 Demo

最近,我开始接触大模型开发,并尝试使用 LangChain 和 DeepSeek 构建了一个简单的 Demo。通过这个 Demo,我不仅加深了对大模型的理解,还体验到了 LangChain 和 DeepSeek 的强大功能。下面,我将分享我的开发过程以及一些…...

FPGA初级项目10——基于SPI的DAC芯片进行数模转换

FPGA初级项目10——基于SPI的DAC芯片进行数模转换 DAC芯片介绍 DAC 芯片(数字模拟转换器)是一种将数字信号转换为连续模拟信号(如电压或电流)的集成电路,广泛应用于电子系统中,连接数字世界与模拟世界。 …...

【论文解读】Contrastive Learning for Compact Single Image Dehazing(AECR-Net)

文章目录 问题创新网络主要贡献Autoencoder-like Dehazing NetworkAdaptive Mixup for Feature PreservingDynamic Feature Enhancement1. 可变形卷积的使用2. 扩展感受野3. 减少网格伪影4. 融合空间结构信息 Contrastive Regularization1. 核心思想2. 正样本对和负样本对的构建…...

unity基础——线段与拖尾

1、LineRenderer(线段渲染器) 为空物体加上组件添加材质 选择默认线段的材质 Default—Line Color:可以修改颜色Corner Vertices:角顶点 圆滑度 End Cap Vertices:边缘顶点 线段编辑 1、可以移动线段点的位置&#xf…...

【服务器知识】Nginx路由匹配规则说明

Nginx路由匹配规则说明 **一、Nginx路由匹配核心机制****二、匹配规则语法详解**1. **精确匹配 ()**2. **前缀匹配 (^~ 或 /)**3. **正则匹配 (~ 或 ~*)**4. **通配符匹配 (*)** **三、路由匹配优先级顺序****四、高级路由技巧**1. **条件判断 (if语句)**2. **路径重写 (rewrit…...

Python----数据可视化(Pyecharts三:绘图二:涟漪散点图,K线图,漏斗图,雷达图,词云图,地图,柱状图折线图组合,时间线轮廓图)

1、涟漪特效散点图 from pyecharts.globals import SymbolType from pyecharts.charts import EffectScatter from pyecharts.faker import Faker from pyecharts import options as opts from pyecharts.globals import ThemeType # 绘制图表 es (EffectScatter(init_optsop…...

机器学习中的梯度下降是什么意思?

梯度下降(Gradient Descent)是机器学习中一种常用的优化算法,用于最小化损失函数(Loss Function)。通过迭代调整模型参数,梯度下降帮助模型逐步逼近最优解,从而提升模型的性能。 1.核心思想 梯…...

C语言中的字符串与数组的关系

在C语言中,字符串和数组之间有着紧密的关系。理解它们的区别和联系对于编写高效且可靠的代码至关重要。在本篇博文中,我们将详细分析字符串和数组在C语言中的概念、它们的关系以及如何在编程中应用它们。 一、字符串与数组的基础知识 1.1 数组概念 在C语言中,数组是一组相…...

Ubuntu 18,04 LTS 通过APT安装mips64el的交叉编译器。

安装 g-5v的版本: sudo apt update sudo apt install g-5-mips64el-linux-gnuabi64 How to Install g-5-mips64el-linux-gnuabi64 in Ubuntu 18.04 安装 gcc/g-7v的版本: sudo apt-get install gcc-mips64el-linux-gnu* g-mips64el-linux-gnu* -y 安装…...

MySQL 衍生表(Derived Tables)

在SQL的查询语句select …. from …中,跟在from子句后面的通常是一张拥有定义的实体表,而有的时候我们会用子查询来扮演实体表的角色,这个在from子句中的子查询会返回一个结果集,这个结果集可以像普通的实体表一样查询、连接&…...

C++ vector 核心知识:常用操作与示例详解

在C编程中,vector 是标准模板库(STL)中最常用的容器之一。它以其动态数组的特性、高效的尾部操作和便捷的随机访问能力,成为处理动态数据的首选工具。无论是初学者还是经验丰富的开发者,掌握 vector 的使用方法和性能优…...

不同开发语言对字符串的操作

一、字符串的访问 Objective-C: 使用 characterAtIndex: 方法访问字符。 NSString *str "Hello, World!"; unichar character [str characterAtIndex:0]; // 访问第一个字符 H NSLog("%C", character); // 输出: H NSString 内部存储的是 UTF-16 编…...

Qt从入门到入土(十) -数据库操作--SQLITE

认识 数据库是用于存储、管理和检索数据的系统化集合。它是一种按照特定结构组织数据的存储方式,通过软件(数据库管理系统,DBMS)来实现数据的高效存储、查询、更新和管理。通过文件存储数据适用于少量的数据,而当拥有…...

硬件驱动——51单片机:独立按键、中断、定时器/计数器

目录 一、独立按键 1.原理 2.封装函数 3.按键控制点灯 数码管 二、中断 1.原理 2.步骤 3.中断寄存器IE 4.控制寄存器TCON 5.打开外部中断0和1 三、定时器/计数器 1.原理 2.控制寄存器TCON 3.工作模式寄存器TMOD 4.按键控制频率的动态闪烁 一、独立按键 1…...

pgsql创建新用户并赋只读权限

在 PostgreSQL 中,为新用户赋予只读权限的步骤如下: —### 1. 创建新用户首先,创建一个新用户(角色),并设置密码:sqlCREATE ROLE 用户名 WITH LOGIN PASSWORD 密码;例如:sqlCREATE R…...

【量化策略】动量突破策略

【量化策略】动量突破策略 🚀量化软件开通 🚀量化实战教程 技术背景与应用场景 动量突破策略是一种基于市场趋势的量化交易策略,它通过识别和利用资产价格的持续上升或下降趋势来获取利润。这种策略特别适用于那些价格波动较大、趋势明显…...

QT编程之QGIS

一、QGIS介绍 Quantum GIS(QGIS)是开源地理信息系统桌面软件,使用GNU(General Public License)授权, 属于 Open Source eospatial Foundation( OSGeo )的官方计划。在 GNU 授权下&am…...

LangChain-chatchat 0.3.x入门级教程

前言 一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。该项目支持市面上主流的开源 LLM、 Embedding 模型与向量数据库,可实现全部使用开源模型离线私有部署。…...

Vi/Vim命令详解:高效文本编辑的利器

Vi/Vim命令详解:高效文本编辑的利器 Vi和Vim是Unix/Linux系统中极为流行的文本编辑器,它们以其强大的功能和高效的操作方式赢得了广大用户的喜爱。无论是对于程序员、系统管理员还是普通用户,掌握Vi/Vim的基本命令和高级技巧都是非常有必要的…...

【前端三剑客】万字总结JavaScript

一、初识JavaScript 1.1 JavaScript 的作用 表单动态校验(密码强度检测) ( JS 产生最初的目的 )网页特效服务端开发(Node.js)桌面程序(Electron)App(Cordova)控制硬件-物联网(Ruff)游戏开发(cocos2d-js) 1.2 HTML/CSS/JS 的关系…...

MySQL | MySQL表的增删改查(CRUD)

目录 前言:什么是 CRUD ?一、Creat 新增1.1 语法1.2 示例1.2.1 单行数据全列插入1.2.2 单行数据指定列插入1.2.3 多行数据指定列插入 二、Retrieve 检索2.1 语法2.2 示例2.2.1 全列查询2.2.2 指定列查询2.2.3 查询字段为表达式2.2.4 结果去重查询2.2.5 where条件查…...

【愚公系列】《高效使用DeepSeek》003-DeepSeek文档处理和其他顶级 AI模型的区别

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...

OSC32IN与OSC32OUT对于无源晶振而言有区别吗?

OSC32IN与OSC32OUT对于无源晶振而言有区别吗? 答:没有区别。对晶振本身而言,两个频率管脚反接也是一样的。 如下图所示: 使用示波器连接晶振的两个引脚,并观察波形可以帮助确定输入和输出端口。 当晶振工作正常时&…...

究竟什么是虚拟同步机???虚拟同步机巨简单理解

1同步发电机 1.1同步发电机工作原理 同步发电机定子铁芯的内圆均匀分布着定子槽,槽内按一定规律嵌放着对称的三相绕组U1-U2、V1-V2、W1-W2,如图1所示。 图1 同步发电机的结构原理图 工作原理: 转子铁芯上装有制成一定形状的成对磁极,磁极上绕有励磁绕组。励磁绕组上通直流…...

ZVA-Z90,罗德与施瓦茨毫米波变换器

罗德与施瓦茨 ZVA-Z90毫米波变换器​ 商品品牌:R&S/罗德与施瓦茨 商品型号:ZVA-Z90 商品名称:毫米波变换器 产品简介: ZVA-Z 毫米波变换器 简介 R&SZVA-Zxx 毫米波变换器支持在 V、E、W、F、D、G、J 以及 Y 频段内的毫米波测量…...

TCP/IP 协议精讲-精华总结版本

序言 本文旨在介绍一下TCP/IP涉及得所有基础知识,为大家从宏观上俯瞰TCP/IP提供一个基石,文档属于《TCP/IP图解(第五版)》的精简版本。 专业术语 缩写 全称 WAN Wide area network广域网 LAN Local area network局域网 TC…...

电脑内存不足怎么办?

常规解决方法盘点 关闭后台程序:按下【Ctrl Shift Esc】组合键打开任务管理器,在 “进程” 选项卡里,把当前不用的程序统统 “结束任务” ,像那些自动更新的软件、常驻后台的播放器,关了能释放不少内存。比如音乐软…...

PTP协议赋能高精度时间同步网络

什么是PTP? PTP(精确时间协议,Precision Time Protocol) 是一种基于IEEE 1588标准的网络时间同步协议,旨在为分布式系统中的设备提供亚微秒级(甚至纳秒级)的高精度时钟同步。其核心目标是通过消…...

【redis】string应用场景:缓存功能和计数功能

文章目录 缓存功能实现思路存在的问题伪代码实现 记数功能实现思路统计伪代码实现 缓存功能 实现思路 整体的思路: 应用服务器访问数据的时候,先查询 Redis 如果 Redis 上数据存在了,就直接从 Redis 读取数据交给应用服务器,不继…...

oracle中OS BLOCK的含义

在Oracle数据库中,OS BLOCK(操作系统数据块)是指操作系统层面上的数据块,它与Oracle数据库内部的逻辑存储单元BLOCK(数据块)有所区别但密切相关。以下是对OS BLOCK的详细解释: 定义与概念 OS BL…...

SSM企业台账管理平台

🍅点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 SS…...

Linux下使用pigz工具结合tar实现并行压缩提升压缩和解压速度

说明 tar命令是在 Unix 和类 Unix 系统中用于归档和压缩文件的常用工具。 基本语法 tar [选项] [归档文件名] [文件或目录列表]常用选项 创建归档文件: -c:创建一个新的归档文件。例如,tar -cvf myarchive.tar file1.txt file2.txt会创建一个名为myarchive.tar的归档文件…...

低代码与AI测试自动化:双剑合璧的未来

在数字化转型浪潮下,企业软件开发和测试的效率需求空前提高。低代码(Low-Code)平台因其直观的可视化编程方式、大幅降低开发门槛的特点,成为企业敏捷开发的首选。而AI测试自动化的兴起,则彻底改变了传统软件测试模式&a…...

JavaScript基础篇:三、 变量与数据类型

一、变量的概念与声明 在 JavaScript 中,变量是用于存储数据的容器。通过声明变量,可以为程序中的数据分配内存空间,以便后续的访问和操作。变量的声明使用`var`、`let`或`const`关键字。 (一)var关键字 `var`是 JavaScript 中传统的变量声明方式,具有函数级作用域。这…...

【2025最新版】如何将fnm与node.js安装在D盘?【保姆级安装及人性话理解教程】

目录 背景: 1.安装fnm 1.1下载fnm 1.2解压目录 1.3配置fnm的环境变量 1.4验证fnm是否安装成功 fnm大捷~ 2.相关配置为下载node.js做准备 2.1查看是否有环境配置文件 2.2获取环境配置文件 2.3新建文件 2.4写入配置 2.5重启powershell 2.5.1可能出现的错…...

【免费】2008-2020年各省城镇登记失业率数据

2008-2020年各省城镇登记失业率数据 1、时间:2008-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区名称、年份、城镇登记失业率 4、范围:31省 5、指标说明:城镇登记失业率是指在一定时期内&…...

C++:类和对象(从底层编译开始)详解[前篇]

目录 一.inline内联的详细介绍 (1)为什么在调用内联函数时不需要建立栈帧: (2)为什么inline声明和定义分离到两个文件会产生链接错误,链接是什么,为什么没有函数地址: 二.类&…...

Deny by project hooks setting ‘default‘: size of the file

问题描述 gitcode.com提交代码时候发现出现文件大于默认10MB后不能上传 错误显示内容如下: Total 43 (delta 1), reused 0 (delta 0), pack-reused 0 remote: Start Git Hooks Checking [FAILED] remote: Error: Deny by p…...

【Flutter】数据库实体类构造函数加密注意事项

源代码: AccountEntity( {required String account, required String password,}) : account encrypter.encrypt(account,iv: iv).base64, password encrypter.encrypt(password,iv: iv).base64,; 解密代码: static final encrypter Encrypter(AES…...

如何在PHP中实现数据加密与解密:保护敏感信息

如何在PHP中实现数据加密与解密:保护敏感信息 在现代Web开发中,数据安全是一个至关重要的议题。无论是用户的个人信息、支付数据,还是其他敏感信息,都需要在存储和传输过程中进行加密,以防止数据泄露和恶意攻击。PHP作…...

【Pyqt5】水平布局与垂直布局及其交叉展示及实战音乐播放器UI

感受一下Pyqt5的水平布局与垂直布局及其交叉展示 需求: 4个按钮水平排放4个按钮垂直排放水平排放与垂直排放并用实战:音乐播放器UI 水平排放 import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayoutclass MyWindo…...

Java 中 getCanonicalName、getSimpleName、getName、getTypeName 的区别

1. 核心区别总结 方法作用数组类型示例非数组类型示例getName()返回 JVM 内部格式的类全名,适用于反射操作(如 Class.forName())int[] → [IString → java.lang.StringgetTypeName()返回更友好的类型名称,对数组递归处理组件类型…...

uni-app打包h5并部署到nginx,路由模式history

uni-app打包有些坑,当时运行的基础路径填写了./,导致在二级页面刷新之后,页面直接空白。就只能换一个路径了,nginx也要跟着改,下面是具体步骤。 manifest.json配置web 运行路径写/h5/,或者写你们网站的目…...

数据结构与算法(哈希表——两个数组的交集)

原题 349. 两个数组的交集 - 力扣(LeetCode) 给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入:nums1 [1,2,2,1], nums2 […...

P1259 黑白棋子的移动【java】【AC代码】

有 2n 个棋子排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为 n5 的情况: 移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但…...

一些docker命令

一、基础命令 查看 Docker 版本 docker --version 或 docker version:显示 Docker 客户端和服务器的版本信息。 查看 Docker 系统信息 docker info:显示 Docker 系统的详细信息,包括镜像、容器数量、存储驱动类型等。 Docker 服务管理 s…...

云服务器新手配置内网穿透服务(frp)

首先你得有一个公网服务器,有了它你就可以借助它,将自己电脑进行配置内网穿透,让自己内网电脑也可以异地轻松访问。网上教程较多,特此记录我自己的配置,避免迷路,我这里只记录我自己云服务小白,…...

linux ptrace 图文详解(二) PTRACE_TRACEME 跟踪程序

目录 一、基础介绍 二、PTRACE_TRACE 实现原理 三、代码实现 四、总结 (代码:linux 6.3.1,架构:arm64) One look is worth a thousand words. —— Tess Flanders 一、基础介绍 GDB(GNU Debugger&…...