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

ops/2025/3/15 21:50:06/

大模型学习笔记------Llama 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之间的相对距离,而非绝对位置。

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

RoPE_30">2、旋转编码RoPE

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

2.1 基本概念—旋转矩阵

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

RoPE_39">2.2 RoPE计算原理

2.2.1 绝对位置编码

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

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

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

2.2.2 相对位置编码

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

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

RoPE_61">3、旋转编码RoPE)的优点

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

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

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


http://www.ppmy.cn/ops/166049.html

相关文章

从网络通信探究分布式通信的原理

分布式通信是分布式系统中不同节点之间进行数据交换的关键机制,而它的底层本质就是网络通信。因此,我们可以从网络通信的基本原理出发,逐步探究分布式通信的核心概念和技术。 一、网络通信基础 网络通信本质上是不同设备之间的数据交换&…

【QT】-一文说清楚QT定时器怎么用

在 Qt 中,定时器(QTimer)是用来定时执行某些任务的非常有用的类。它可以帮助你在指定的时间间隔后重复执行某个函数。常见的用法是启动一个定时器,每过一段时间自动执行某个操作,比如更新 UI、检查状态或发送数据等。 …

Linux 命名管道

文章目录 🚀 深入理解命名管道(FIFO)及其C实现一、命名管道核心特性1.1 🧩 基本概念 二、💻 代码实现解析2.1 📁 公共头文件(common.hpp)2.2 🖥️ 服务器端(s…

Java中关于Optional的 orElse 操作,以及 orElse 与 orElseGet 的区别

文章目录 1. 大概说明2. 详细分析2.1 .orElse 操作2.2 .orElse 的作用:避免空指针异常2.3 为什么要用?2.4 orElseGet如何使用2.5 orElse和orElseGet的区别 1. 大概说明 这篇文章的目的是为了说明: orElse 如何使用orElseGet 如何使用两者的…

Python 与 JavaScript 交互及 Web 逆向分析全解析

一、引言 在当今数字化时代,软件开发的复杂性和多样性不断增加,不同编程语言之间的交互与协作变得愈发重要。Python 凭借其简洁易读的语法、丰富的库和强大的数据处理能力,在数据科学、自动化脚本编写等领域占据着重要地位。而 JavaScript 作为前端开发的核心语言,以其在网…

CentOS7 服务器安装 Hadoop 和 Hive

CentOS 服务器安装 Hadoop 和 Hive流程 请将以下的路径更换为自己的路径 1. 环境准备 1.1 安装 JDK Hadoop 和 Hive 需要 Java 运行环境,这里安装 OpenJDK 1.8: # 查看 Java 版本 java -version1.2 创建 Hadoop 用户(可选) …

JS—如何判断数据类型:全能判断方式Object.prototype.toString.call()

个人博客:haichenyi.com。感谢关注 1. 目录 1–目录2–typeof 操作符3–instanceof 操作符4–Object.prototype.toString.call()5–Array.isArray()6– 严格相等7–constructor 属性8–Symbol.toStringTag(ES6) 2. typeof 操作符 ​功能&…

【网络通信安全】子专栏链接及简介

目录 操作系统安全:筑牢网络安全根基​ 网络协议安全:守护数据传输通道​ Web 站点安全开发:打造安全的网络交互平台​ 在数字化浪潮席卷的当下,网络通信已深度融入生活与工作的方方面面,从日常的线上购物、社交互动…