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

多模态学习(三)—— ROPE位置编码:从理论到实践

ROPE位置编码:从理论到LLaMA的实践

一、前言

ROPE(Rotary Positional Embedding,旋转位置编码)是一种通过旋转矩阵将位置信息融入Token Embedding的编码方法。相比传统Transformer的绝对位置编码,ROPE能更灵活地建模相对位置关系,被广泛应用于GPT-3.5/4、LLaMA等大模型。本文将介绍ROPE的必要性,公式以及推理过程。如果觉得有用,麻烦点个小小的赞,十分感谢~

📌 核心思想:通过旋转操作让模型直接"感知"Token之间的相对位置,而非依赖绝对位置编号。

二、位置编码的必要性

传统transformer概述

在理解ROPE之前,我们需要先回顾传统Transformer的运作机制:

首先,输入是一个长度为N的序列,表示为:
S N = w i i = 1 N S_N = {w_i}^N_{i=1} SN=wii=1N
意为i从1到N的字符,比如“欢迎点赞关注!”就是一个输入序列。之后需要对该序列进行转换,转换为embedding向量,这是因为神经网络不能直接处理文字,只能处理数字。
这里我们取“求关注”这三个字,假设这三个字的embedding分别为:
在这里插入图片描述
我们就可以针对这三个字计算注意力分数,attention score,也就是 α \alpha α,这里的计算公式为 A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V s o f t m a x ( z i ) = e z i ∑ K = 1 N e Z K Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V\\ softmax(z_i) = \frac{e^{z_i}}{\sum^N_{K=1}e^{Z_K}} Attention(Q,K,V)=softmax(dk QKT)Vsoftmax(zi)=K=1NeZKezi
第一个公式是ransformer 模型 中最核心的机制之一 —— “注意力机制(Attention Mechanism)” 的公式,用来计算token之间的关系。这里 d k d_k dk代表向量的维度,用来做缩放(避免过大数值造成梯度不稳定)。Q(Query),即查询向量,表示当前正在处理的词(或位置)的表示,K(Key),即键向量:表示输入中所有词(或位置)的特征。V(Value),即值向量:表示每个词携带的实际信息。接下来我们来逐步解释公式的含义:

  1. Q K T QK^T QKT :对每个查询(Query)向量和所有键(Key)向量计算相似度(点积),得到一个“注意力分数矩阵”。
  2. Q K T d k \frac{QK^T}{\sqrt{d_k}} dk QKT:将注意力分数进行缩放(缩放点积注意力),使得随着向量维度增大,分数不过大。
  3. softmax(…):将分数归一化为概率,决定 Query 对输入中每个位置应该“注意”多少。
  4. 乘以 V:将注意力权重应用于 Value 向量,加权求和,得到最终的注意力输出。

到这里,你可能会觉得非常抽象,难以理解,我们来做个类比就好懂很多了:
你是一个学生(Query),在考试前要复习(获取信息)。你采取的步骤是:

  1. 你根据每本书的标题(Key)判断它对考试的帮助程度(打分)。
  2. 然后你根据这些打分(softmax)决定分配多少时间复习每本书(Value)。
  3. 最后你将从每本书中获得的信息按分数加权合成自己的知识(输出)。

现在有没有好懂很多?这里Q, K, V的计算公式分别是:
Q = W q X K = W K X V = W V X Q = W_qX\\ K = W_KX\\ V = W_VX Q=WqXK=WKXV=WVX其中 W q W_q Wq W K W_K WK W V W_V WV都是可学习的参数。但是在接下来的示范中,为了方便引入ROPE,我们暂时先省略这几个参数。

自注意力机制的局限性

省略以上参数后,attention score的计算公式就变成了 A t t e n t i o n ( Q , K , V ) = s o f t m a x ( X X T d k ) X Attention(Q,K,V) = softmax(\frac{XX^T}{\sqrt{d_k}})X Attention(Q,K,V)=softmax(dk XXT)X根据该计算公式,我们一步步进行计算,如下图所示:
在这里插入图片描述
在这里插入图片描述
s o f t m a x ( X X T X ) softmax({XX^T}X) softmax(XXTX)这一步的时候,大家有没有发现什么问题?
当我们变化一下“求关注” 这三个字的顺序。从“求关注”到“求注关”,,那么注意力矩阵就会变成:
在这里插入图片描述
在人类语言中,一句话的含义会随着每个字的出现顺序而改变,但是在传统的注意力机制中,并没有考虑位置顺序这一点。从计算结果我们能看出,即使顺序进行了改变,经过Attention计算后,每一个字的embedding依旧是不变的,也就是Transformer 的注意力机制没有考虑过顺序对embedding的影响,仅靠 Attention(Q, K, V) 是看不出“谁在前谁在后”的,计算结果只依赖于 token embedding 的内容。
因此我们需要找到一个函数,入参是当前序列值x和其所在的位置i,返回结果会因为x和i不同而不同。这就是位置编码技术出现的初衷,及讲位置信息融入计算之中。

三、ROPE的数学原理

公式介绍

这一章节我们开始介绍ROPE的公式推导。为了方便理解,我们假设输入是二维向量,即 x m x_m xm x n x_n xn。那么公式为:
x m ′ = W q x m e i m θ = ( W q x m ) e i m θ = q m e i m θ x n ′ = W k x n e i n θ = ( W k x n ) e i n θ = k n e i n θ x m T x n ′ = ( q m 1 q m 2 ) ( c o s ( ( m − n ) θ ) − s i n ( ( m − n ) θ ) s i n ( ( m − n ) θ ) c o s ( ( m − n ) θ ) ) ( k n 1 k n 2 ) {x_m}^{\prime} = W_qx_me^{im\theta} = (W_qx_m)e^{im\theta} = q_me^{im\theta} \\ {x_n}^{\prime} = W_kx_ne^{in\theta} = (W_kx_n)e^{in\theta} = k_ne^{in\theta}\\ {x_m}^T{x_n}^{\prime} = (q_m^1\ q_m^2)\begin{pmatrix} cos((m-n)\theta) & -sin((m-n)\theta) \\ sin((m-n)\theta) & cos((m-n)\theta) \end{pmatrix}\begin{pmatrix} k_n^1 \\ k_n^2 \end{pmatrix} xm=Wqxmeimθ=(Wqxm)eimθ=qmeimθxn=Wkxneinθ=(Wkxn)einθ=kneinθxmTxn=(qm1 qm2)(cos((mn)θ)sin((mn)θ)sin((mn)θ)cos((mn)θ))(kn1kn2)

证明过程

接下来我们看这三个公式的证明,过程会比较繁琐,需要一点耐心走一遍:

  1. 首先我们之前设定了输入向量是二维的,那么初始计算公式为:
    q m = ( W q 11 W q 12 W q 21 W q 22 ) ( x m 1 x m 2 ) = ( q m 1 q m 2 ) q_m= \begin{pmatrix} W_q^{11} & W_q^{12} \\ W_q^{21} & W_q^{22} \\ \end{pmatrix}\begin{pmatrix} x_m^1 \\ x_m^2\\ \end{pmatrix} = \begin{pmatrix} q_m^1 \\ q_m^2\\ \end{pmatrix} qm=(Wq11Wq21Wq12Wq22)(xm1xm2)=(qm1qm2)
  2. 二维向量可以表示为复数形式,因为向量的一个维度可以表示为一个坐标,类比到实数坐标和虚数坐标。那么可得:
    q m = q m 1 + i q m 2 q_m=q_m^1 + iq_m^2 qm=qm1+iqm2
  3. 运用欧拉公式可以得到:
    e i m θ = c o s ( m θ ) + i s i n ( m θ ) e^{im\theta} = cos(m\theta) + isin(m\theta) eimθ=cos(mθ)+isin(mθ)
  4. 进行复数计算。考虑到 i 2 = − 1 i^2=-1 i2=1,可得:
    q m e i m θ = ( q m 1 + i q m 2 ) ( c o s ( m θ ) + i s i n ( m θ ) ) = ( q m 1 c o s ( m θ ) − q m 2 s i n ( m θ ) + i ( q m 2 c o s ( m θ ) + q m 1 s i n ( m θ ) ) \begin{align*} q_me^{im\theta} & = (q_m^1+iq_m^2)(cos(m\theta)+isin(m\theta) )\\ & = (q_m^1cos(m\theta)-q_m^2sin(m\theta) + i(q_m^2cos(m\theta) + q_m^1sin(m\theta)) \\ \end{align*} qmeimθ=(qm1+iqm2)(cos(mθ)+isin(mθ))=(qm1cos(mθ)qm2sin(mθ)+i(qm2cos(mθ)+qm1sin(mθ))
  5. 针对最后这个公式,我们再次将其转换为二维向量:
    x m ′ = q m e i m θ = ( q m 1 c o s ( m θ ) − q m 2 s i n ( m θ ) , q m 2 c o s ( m θ ) + q m 1 s i n ( m θ ) ) = ( c o s ( m θ ) − s i n ( m θ ) s i n ( m θ ) c o s ( m θ ) ) ( q m 1 q m 2 ) \begin{align*} {x_m}^{\prime} & = q_me^{im\theta} \\ & = (q_m^1cos(m\theta)-q_m^2sin(m\theta), \ q_m^2cos(m\theta) + q_m^1sin(m\theta))\\ &=\begin{pmatrix} cos(m\theta) & -sin(m\theta) \\ sin(m\theta) & cos(m\theta) \\ \end{pmatrix}\begin{pmatrix} q_m^1 \\ q_m^2 \end{pmatrix} \end{align*} xm=qmeimθ=(qm1cos(mθ)qm2sin(mθ), qm2cos(mθ)+qm1sin(mθ))=(cos(mθ)sin(mθ)sin(mθ)cos(mθ))(qm1qm2)
  6. 类比到另一个输入 x n x_n xn,我们也可以同样有
    x n ′ = k n e i n θ = ( k n 1 c o s ( n θ ) − k n 2 s i n ( n θ ) , k n 2 c o s ( n θ ) + k n 1 s i n ( n θ ) ) = ( c o s ( n θ ) − s i n ( n θ ) s i n ( n θ ) c o s ( n θ ) ) ( k n 1 k n 2 ) \begin{align*} {x_n}^{\prime} & = k_ne^{in\theta} \\ & = (k_n^1cos(n\theta)-k_n^2sin(n\theta), \ k_n^2cos(n\theta) + k_n^1sin(n\theta))\\ &=\begin{pmatrix} cos(n\theta) & -sin(n\theta) \\ sin(n\theta) & cos(n\theta) \\ \end{pmatrix}\begin{pmatrix} k_n^1 \\ k_n^2 \end{pmatrix} \end{align*} xn=kneinθ=(kn1cos(nθ)kn2sin(nθ), kn2cos(nθ)+kn1sin(nθ))=(cos(nθ)sin(nθ)sin(nθ)cos(nθ))(kn1kn2)
  7. 带入到内积中: x m T x n ′ = ( ( cos ⁡ ( m θ ) − sin ⁡ ( m θ ) sin ⁡ ( m θ ) cos ⁡ ( m θ ) ) ( q m 1 q m 2 ) ) T ( ( cos ⁡ ( n θ ) − sin ⁡ ( n θ ) sin ⁡ ( n θ ) cos ⁡ ( n θ ) ) ( k n 1 k n 2 ) ) = ( q m 1 q m 2 ) ( cos ⁡ ( m θ ) sin ⁡ ( m θ ) − sin ⁡ ( m θ ) cos ⁡ ( m θ ) ) ( cos ⁡ ( n θ ) − sin ⁡ ( n θ ) sin ⁡ ( n θ ) cos ⁡ ( n θ ) ) ( k n 1 k n 2 ) = ( q m 1 q m 2 ) ( cos ⁡ ( m θ ) cos ⁡ ( n θ ) + sin ⁡ ( m θ ) sin ⁡ ( n θ ) − cos ⁡ ( m θ ) sin ⁡ ( n θ ) + sin ⁡ ( m θ ) cos ⁡ ( n θ ) − sin ⁡ ( m θ ) cos ⁡ ( n θ ) + cos ⁡ ( m θ ) sin ⁡ ( n θ ) sin ⁡ ( m θ ) sin ⁡ ( n θ ) + cos ⁡ ( m θ ) cos ⁡ ( n θ ) ) ( k n 1 k n 2 ) = ( q m 1 q m 2 ) ( cos ⁡ ( ( m − n ) θ ) sin ⁡ ( ( m − n ) θ ) ) − sin ⁡ ( ( m − n ) θ ) cos ⁡ ( ( m − n ) θ ) ) ( k n 1 k n 2 ) \begin{align*} {x_m}^T{x_n}^{\prime} & = \left( \begin{pmatrix} \cos(m\theta) & -\sin(m\theta) \\ \sin(m\theta) & \cos(m\theta) \\ \end{pmatrix} \begin{pmatrix} q_m^1 \\ q_m^2 \end{pmatrix} \right)^T \left( \begin{pmatrix} \cos(n\theta) & -\sin(n\theta) \\ \sin(n\theta) & \cos(n\theta) \\ \end{pmatrix} \begin{pmatrix} k_n^1 \\ k_n^2 \end{pmatrix} \right) \\ & = (q_m^1\ q_m^2) \begin{pmatrix} \cos(m\theta) & \sin(m\theta) \\ -\sin(m\theta) & \cos(m\theta) \\ \end{pmatrix} \begin{pmatrix} \cos(n\theta) & -\sin(n\theta) \\ \sin(n\theta) & \cos(n\theta) \\ \end{pmatrix} \begin{pmatrix} k_n^1 \\ k_n^2 \end{pmatrix}\\ & = (q_m^1\ q_m^2) \begin{pmatrix} \cos(m\theta)\cos(n\theta)+\sin(m\theta)\sin(n\theta) & -\cos(m\theta)\sin(n\theta)+\sin(m\theta)\cos(n\theta)\\ -\sin(m\theta)\cos(n\theta)+\cos(m\theta)\sin(n\theta) & \sin(m\theta)\sin(n\theta)+\cos(m\theta)\cos(n\theta)\\ \end{pmatrix} \begin{pmatrix} k_n^1 \\ k_n^2 \end{pmatrix}\\ & = (q_m^1\ q_m^2) \begin{pmatrix} \cos((m-n)\theta) & \sin((m-n)\theta))\\ -\sin((m-n)\theta) & \cos((m-n)\theta)\\ \end{pmatrix} \begin{pmatrix} k_n^1 \\ k_n^2 \end{pmatrix} \end{align*} xmTxn=((cos(mθ)sin(mθ)sin(mθ)cos(mθ))(qm1qm2))T((cos(nθ)sin(nθ)sin(nθ)cos(nθ))(kn1kn2))=(qm1 qm2)(cos(mθ)sin(mθ)sin(mθ)cos(mθ))(cos(nθ)sin(nθ)sin(nθ)cos(nθ))(kn1kn2)=(qm1 qm2)(cos(mθ)cos(nθ)+sin(mθ)sin(nθ)sin(mθ)cos(nθ)+cos(mθ)sin(nθ)cos(mθ)sin(nθ)+sin(mθ)cos(nθ)sin(mθ)sin(nθ)+cos(mθ)cos(nθ))(kn1kn2)=(qm1 qm2)(cos((mn)θ)sin((mn)θ)sin((mn)θ))cos((mn)θ))(kn1kn2)
    恭喜!完成证明啦!另外证明方式不止这一种,你也可以去试试其他的方法~

多维度泛化

最后就是将这个公式从二维推向多维,听起来很复杂,其实很简单,只需要将多维数据两两拿出来用以上公示计算即可,如下图所示。
在这里插入图片描述
但是通过这种方式因为矩阵中大部分数字是0会导致多余的计算量,所以这个公式也可修改为等值的:
在这里插入图片描述
以下是优化后的表述建议,既保持了专业性又增强了可读性:

关于θ参数的说明

ROPE中的关键参数θ按照以下公式计算:
θ i = 1000 0 − 2 i / d ( 其中 d 必须为偶数 ) \theta_i = 10000^{-2i/d} \quad (\text{其中}d\text{必须为偶数}) θi=100002i/d(其中d必须为偶数)
设计原理

  1. 维度分组:将d维嵌入向量划分为d/2个二维子空间
  2. 独立旋转:在每个二维子空间分别应用旋转矩阵
  3. 衰减设计:指数项的负号确保随着维度i增加,旋转角度逐渐减小
  4. 基数选择:10000作为经验值,平衡长短期依赖的捕捉能力

技术总结

ROPE通过优雅的数学设计,在保持计算效率的同时,完美解决了Transformer的位置感知难题,成为大模型位置编码的事实标准。

相关文章:

多模态学习(三)—— ROPE位置编码:从理论到实践

ROPE位置编码:从理论到LLaMA的实践 一、前言 ROPE(Rotary Positional Embedding,旋转位置编码)是一种通过旋转矩阵将位置信息融入Token Embedding的编码方法。相比传统Transformer的绝对位置编码,ROPE能更灵活地建模…...

Redis——过期删除策略和内存

过期删除策略 Redis可以对key设置过期时间,因此需要有相应的机制将已过期的键值对删除 设置了过期时间的key会存放在过期字典中,可以用presist命令取消key过期时间 过期字典存储在redisDb结构中: typedef struct redisDb {dict *dict; …...

Selenium无法定位元素的几种解决方案详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、frame/iframe表单嵌套 WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌的页面元素无法直接定位。 解决方法: …...

开源项目实战学习之YOLO11:12.3 ultralytics-models-sam-encoders.py源码分析

👉 点击关注不迷路 👉 点击关注不迷路 👉 另外,前些天发现了一个巨牛的AI人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。感兴趣的可以点击相关跳转链接。 点击跳转到网站。 ultralytics-models-sam 1.sam-modules-encoders.pyblocks.py: 定义模型中的各…...

Bitmap原理及Hive去重方式对比

1. 什么是 Bitmap? Bitmap(位图)是一种用位(bit)来表示数据集合的数据结构。每个位代表一个元素是否存在,比如: 一个长度为N的bitmap,每一位对应一个元素的状态(0或1&a…...

力扣-比特位计数(统计一个数二进制下1的个数)

下面是题面 1.用c的内置函数__builtin_popcount() 语法:__builtin_popcount(int x),函数会返回一个二进制下x所含的1的个数 2.直接数位枚举 这是最慢也是暴力做法,写法也很简单 用一个while循环…...

开源项目实战学习之YOLO11:12.2 ultralytics-models-sam-decoders.py源码分析

👉 点击关注不迷路 👉 点击关注不迷路 👉 另外,前些天发现了一个巨牛的AI人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。感兴趣的可以点击相关跳转链接。 点击跳转到网站。 ultralytics-models-sam 1.sam-modules-decoders.pyblocks.py: 定义模型中的各…...

Python训练营打卡Day28

浙大疏锦行 DAY 28 类的定义和方法 知识点回顾: 1.类的定义 2.pass占位语句 3.类的初始化方法 4.类的普通方法 5.类的继承:属性的继承、方法的继承 作业 题目1:定义圆(Circle)类 要求: 1.包含属性&#x…...

【前端基础】HTML元素隐藏的四个方法(display设置为none、visibikity设置为hidden、rgba设置颜色、opacity设置透明度)

HTML元素隐藏的四个方法 1、display设置为none 元素不显示出来。不占位置,也没有任何空间。就不存在一样。 2、visibility设置为hidden 默认:visible。元素可见设置为hidden:元素不可见,但是会占据这个元素应该占用的空间。 3、…...

STM32中的DMA

DMA介绍 什么是DMA? DMA(Direct Memory Access,直接存储器访问)提供在外设与内存、存储器和存储器之间的高速数据传输使用。它允许不同速度的硬件装置来沟通,而不需要依赖于CPU,在这个时间中,CPU对于内存…...

小型气象站应用之鱼塘养殖方案

概述 "看天吃饭",在农村经常听到这句话,鱼塘也不例外。天气的急剧变化,或连续的不利天气都有可能造成鱼类"浮头",甚至"翻肚子",更甚至"翻塘",一年白忙活了。 鱼塘…...

Makefile变量冲突与包含关系解析

Nuttx makefile每层独立,除非显示的通过include的方式包含。 Makefile调试技巧 打印变量 $(info CSRCS$(CSRCS))查看变量赋值过程 make --debugv在 Makefile 中,变量的作用域和可见性取决于 包含关系(include) 和 递归调用&…...

2025/517学习

对离群值怎么操作。这个就是拟合操作的。用更弯曲的曲线去拟合,如常见函数log 多元回归和单元回归 如题,如果我有多个自变量,来对一个因变量进行OLS回归,有没有operator可以做到?(ts_regression似乎只支持一个…...

浅谈前端架构设计与工程化

引言 在当今快速发展的Web开发领域,前端已经从简单的页面展示演变为复杂的应用程序开发。随着项目规模的扩大和团队协作的需求增加,良好的前端架构设计和工程化实践变得至关重要。本文将探讨如何构建可维护、可扩展的前端架构,并介绍现代前端…...

JMeter 教程:编写 POST 请求脚本访问百度

目录 ✅ 教程目的 🛠️ 环境要求 📄 实操步骤 第一步:启动 JMeter 第二步:添加测试计划和线程组 1.右键左侧 Test Plan(测试计划) 2.选择 Add → Threads (Users) → Thread Group(线程组…...

Typescript学习教程,从入门到精通,TypeScript 函数语法知识点及案例代码(5)

TypeScript 函数语法知识点及案例代码 TypeScript 提供了丰富的函数语法特性,使得函数定义更加灵活和强大。以下将详细介绍 TypeScript 中函数的相关语法,包括函数定义、可选参数、默认参数、剩余参数、重载函数、递归函数、匿名函数、箭头函数以及回调…...

【51单片机定时器/计数器】

目录 简介 定时器配置流程 1.配置定时器工作方式寄存器TMOD 2.配置中断寄存器TCON 3.定时时间计算公式 4.配置中断允许寄存器IE 5.使用中断函数完成中断 简介 定时器/计数器本质都是对脉冲信号进行计数,区别在于作为定时器时的脉冲信号来自于晶振12分频&…...

Oracle 的 ASSM 表空间

Oracle 的 ASSM(Automatic Segment Space Management)表空间 是一种自动管理段空间的技术,通过位图(Bitmap)机制跟踪数据块的使用情况,替代传统的手动管理(MSSM,即 Freelist 管理&am…...

C++学习:六个月从基础到就业——C++11/14:auto类型推导

C学习:六个月从基础到就业——C11/14:auto类型推导 本文是我C学习之旅系列的第四十一篇技术文章,也是第三阶段"现代C特性"的第三篇,主要介绍C11/14中的auto类型推导机制。查看完整系列目录了解更多内容。 引言 在现代C…...

select语句的书写顺序

一.MySQL SELECT语句的执行顺序 MySQL中SELECT语句的执行顺序与SQL语句的书写顺序不同,理解这个执行顺序对于编写高效查询非常重要。 1.标准SELECT语句的执行顺序 FROM子句(包括JOIN操作) 首先确定数据来源表执行表连接操作 WHERE子句 对F…...

OpenWebUI新突破,MCPO框架解锁MCP工具新玩法

大家好,Open WebUI 迎来重要更新,现已正式支持 MCP 工具服务器,但 MCP 工具服务器需由兼容 OpenAPI 的代理作为前端。mcpo 是一款实用代理,经测试,它能让开发者使用 MCP 服务器命令和标准 OpenAPI 服务器工具&#xff…...

【Day28】

总结: Python 通过缩进来定义代码块的结构。当解释器遇到像 def, class, if, for 这样的语句,并且后面跟着冒号 : 时,它就期望接下来会有一个或多个缩进的语句来构成这个代码块。如果它没有找到任何缩进的语句(即代码块是空的&am…...

STM32 | FreeRTOS 消息队列

01 一、概述 队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任务间传递信息,实现了任务接收来自其他任务或中断的不固定长度的消息,任务能够从队列里面读取消息,当队列中的消…...

Vue-事件修饰符

事件修饰符 prevent &#xff08;阻止默认事件&#xff09; 超链接 点击事件 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>事件修饰符</title><!-- 引入Vue --><script …...

c++函数调用运算符及类型转换运算符重载

author: hjjdebug date: 2025年 05月 17日 星期六 14:44:48 CST descrip: c函数调用运算符及类型转换运算符重载 文章目录 0. 前言. 运算符包括以下运算符.1. 运算符重载语句一般格式:2. 函数调用运算符&#xff1a;3. 类型转换运算符&#xff1a; 例如 int(); double(); bool(…...

如何在 Windows 10 或 11 中安装 PowerShellGet 模块?

PowerShell 是微软在其 Windows 操作系统上提供的强大脚本语言,可用于通过命令行界面自动化各种任务,适用于 Windows 桌面或服务器环境。而 PowerShellGet 是 PowerShell 中的一个模块,提供了用于从各种来源发现、安装、更新和发布模块的 cmdlet。 本文将介绍如何在 PowerS…...

84.评论日记

原链接 这个视频我发了四五条评论。评论内容甚至和下面这个视频内的其他评论一样。 找了另外的账号也发了。 发现&#xff0c;无论是我这个账号&#xff0c;还是其他的账号&#xff0c;评论都无法看到。 我大胆猜测有一种机制&#xff0c;某些官号会被设置成一种高检测的等…...

一周学会Pandas2 Python数据处理与分析-Pandas2数据添加修改删除操作

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 对数据的修改、增加和删除在数据整理过程中时常发生。修改的情况一般是修改错误&#xff0c;还有一种情况是格式转换…...

荷兰国旗问题 之 指针划分区间问题

文章目录 首先介绍一下什么是荷兰国旗问题&#xff1f;问题描述为&#xff1a;给定一个由红色、白色和蓝色三种颜色组成的无序数组&#xff0c;将数组元素按颜色排序&#xff0c;使得所有红色元素在前&#xff0c;白色元素居中&#xff0c;蓝色元素在后。这里的 “颜色” 通常用…...

冒泡排序-java

public class BubbleSort{ public static void bubbleSort(int[] arr) { int n arr.length; boolean swapped; // 外层循环控制遍历的轮数 for (int i 0; i < n - 1; i) { swapped false; for (int j 0; …...

进阶-数据结构部分:​​​​​​​2、常用排序算法

飞书文档https://x509p6c8to.feishu.cn/wiki/FfpIwIPtviMMb4kAn3Sc40ABnUh 常用排序算法 这几种算法都是常见的排序算法&#xff0c;它们的优劣和适用场景如下&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a;简单易懂&#xff0c;时间复杂度较高&…...

人工智能-自然语言与语音产品实现

一、语义相似度 &#xff08;一&#xff09;、文本向量化 1、文本向量化&#xff08;Text Vectorization&#xff09; 是自然语言处理&#xff08;NLP&#xff09;中的核心预处理步骤&#xff0c;旨在将人类语言的文本转换为计算机可处理的数值向量&#xff08;数学表达&…...

阿里巴巴开源移动端多模态LLM工具——MNN

MNN 是一个高效且轻量级的深度学习框架。它支持深度学习模型的推理和训练&#xff0c;并在设备端的推理和训练方面具有行业领先的性能。目前&#xff0c;MNN 已集成到阿里巴巴集团的 30 多个应用中&#xff0c;如淘宝、天猫、优酷、钉钉、闲鱼等&#xff0c;覆盖了直播、短视频…...

SpringBootAdmin:全方位监控与管理SpringBoot应用

监控的意义 1. 监控服务状态是否宕机 2. 监控服务运行指标 (内存,虚拟机,线程,请求等) 3. 监控日志 4. 管理服务 (服务下线) 可视化监控平台 Spring Boot Admin, 开源社区项目, 用于管理和监控SpringBoot应用程序. 客户端注册到服务端, 通过HTTP请求方式, 服务端定期从客…...

SAP HCM 0008数据存储逻辑

0008信息类型&#xff1a;0008信息类型是存储员工基本薪酬的地方&#xff0c;因为很多企业都会都薪酬带宽&#xff0c;都会按岗定薪&#xff0c;所以在上线前为体现工资体系的标准化&#xff0c;都会在配置对应的薪酬关系&#xff0c;HCM叫间接评估&#xff0c;今天我们就分析下…...

【springcloud学习(dalston.sr1)】Config配置中心-ConfigServer端与Git通信(含源代码)(十三)

该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍&#xff08;含源代码&#xff09;&#xff08;一&#xff09; springcloud学习&#xff08;dalston.sr1&#xff09;系统文章汇总如下&#xff1a; 【springcloud学习(dalston…...

2020CCPC河南省赛题解

A. 班委竞选 签到题&#xff0c;模拟。 #include <bits/stdc.h> #define x first #define y second #define int long long //#define double long doubleusing namespace std; typedef unsigned long long ULL ; typedef pair<int,int> PII ; typedef pair<d…...

C语言输入函数对比解析

目录 C语言输入函数全家福&#xff08;和它们的秘密&#xff09;fgetsgetsscanfgetcharfscanf函数对比表灵魂总结 哈哈&#xff0c;看来你正在和C语言的输入函数们玩“大家来找茬”&#xff01;放心&#xff0c;我会用最接地气的方式给你讲明白&#xff0c;保证比看《甄嬛传》还…...

python四则运算计算器

python四则运算计算器 是谁说&#xff0c;python不好写计算器的&#xff0c;我亲自写个无ui的计算器功能&#xff0c;证明这是谣言 step1:C:\Users\wangrusheng\Downloads\num.txt 15 - 4 * 3 10 / 2(5 3) * 2 6 / 31/2 * 8 3/4 * 4 - 0.52.5 * (4 1.6) - 9 / 3-6 12 * (…...

BUUCTF——Nmap

BUUCTF——Nmap 进入靶场 类似于一个nmap的网站 尝试一下功能 没什么用 看看数据包 既然跟IP相关 伪造一个XXF看看 拼接了一下没什么用 果然没这么简单 尝试一下命令注入 构造payload 127.0.0.1 | ls 应该有过滤 加了个\ 直接构造个php木马上传试试 127.0.0.1 | <?…...

【Changer解码头详解及融入neck层数据的实验设计】

Changer解码头详解 ChangerEx中的 Changer 解码头&#xff08;定义在 [changer.py](file://opencd\models\decode_heads\changer.py)&#xff09;是基于双时相输入的&#xff0c;用于遥感变化检测任务。下面我将详细解释&#xff1a; &#x1f3af; 一、解码头输入数据来源 输…...

深度学习推理引擎---OpenVINO

OpenVINO&#xff08;Open Visual Inference & Neural Network Optimization Toolkit&#xff09;是英特尔开发的开源工具套件&#xff0c;旨在优化和加速深度学习模型在英特尔硬件&#xff08;CPU、GPU、VPU、FPGA等&#xff09;上的推理性能&#xff0c;同时支持从训练到…...

JavaScript splice() 方法

1. JavaScript splice() 方法 1.1. 定义和用法 splice() 方法用于添加或删除数组中的元素。   注意&#xff1a;这种方法会改变原始数组。   返回值&#xff1a;如果删除一个元素&#xff0c;则返回一个元素的数组。 如果未删除任何元素&#xff0c;则返回空数组。 1.2. …...

数据库故障排查指南:解决常见问题,保障数据安全与稳定

数据库故障排查指南&#xff1a;解决常见问题&#xff0c;保障数据安全与稳定 &#x1f4d6; 前言 数据库作为现代应用的核心组件&#xff0c;其稳定性直接影响业务连续性。本文总结六大常见数据库故障场景&#xff0c;提供快速排查思路与解决方案&#xff0c;助你化身"…...

gem5-gpu教程 第十章 关于topology 的Mesh network

问题一、L1和L2缓存之间的VI_hammer_fusion中指定了互连延迟,如何更改这些数字吗? 我已经实现了一个网格拓扑来连接cpu内核和GPU SM,并对VI_hammer*和网格文件进行了所有必要的更改。我的问题是: 1. There is interconnect latency specified in VI_hammer_fusion betwee…...

【C/C++】C++返回值优化:RVO与NRVO全解析

文章目录 C返回值优化&#xff1a;RVO与NRVO全解析1 简介2 RVO vs NRVO3 触发条件4 底层机制5 应用场景6 验证与限制7 性能影响8 补充说明9 总结 C返回值优化&#xff1a;RVO与NRVO全解析 返回值优化&#xff08;Return Value Optimization, RVO&#xff09;是编译器通过消除临…...

使用 Kaniko来构建镜像

使用 Kaniko来构建镜像 Kaniko 是一种专注于容器镜像构建的开源工具&#xff0c;其核心设计理念与 Docker 存在显著差异。以下从功能定位、技术实现和适用场景三方面进行对比分析&#xff1a; 一、Kaniko 的核心特性 无需 Docker 守护进程 Kaniko 直接在容器或 Kubernetes 集…...

2025.05.17淘天机考笔试真题第三题

&#x1f4cc; 点击直达笔试专栏 &#x1f449;《大厂笔试突围》 &#x1f4bb; 春秋招笔试突围在线OJ &#x1f449; 笔试突围OJ 03. 奇偶平衡树分割问题 问题描述 K小姐是一位园林设计师&#xff0c;她设计了一个由多个花坛组成的树形公园。每个花坛中种植了不同数量的花…...

history模式:让URL更美观

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…...

算法:分治法

实验内容 在一个2kⅹ2k个方格组成的棋盘中&#xff0c;若恰有一个方格与其他方格不同&#xff0c;则称该方格为特殊方格&#xff0c;且称该棋盘为一特殊棋盘。 显然&#xff0c;特殊方格出现的位置有4k 种情况&#xff0c;即k>0,有4k 种不同的特殊棋盘 棋盘覆盖&#xff1a…...