RoPE旋转位置编码从复数到欧拉公式

news2024/11/17 9:48:51

第二部分 从复数到欧拉公式
先复习下复数的一些关键概念

我们一般用表示复数,实数a叫做复数的实部,实数b叫做复数的虚部


复数的辐角是指复数在复平面上对应的向量和正向实数轴所成的有向角


的共轭复数定义为:,也可记作,复数与其共轭的乘积等于它的模的平方,即,这是一个实数


2.1 如何通俗易懂的理解复数


在我们的日常生活中,经常会遇到各种平移运动,为了描述这些平移运动,数学上定义了加减乘除,然还有一类运动是旋转运动,而加减乘除无法去描述旋转运动,而有了复数之后,便不一样了,此话怎讲?

根据复数的定义:

,可以看出来:
,而这个展开过程就揭示了虚数 i 背后的本质,因为这个展开过程中的两次乘法可以看成连续的操作,即把 1 经过2次完全一样的操作:× i × 𝑖
,变成了 −1 ,那什么样的操作能得到这个效果呢?
你两眼一亮,直呼:旋转啊,先旋转 90度,再旋转 90 度就可以了啊,如下图所示


so,i
𝑖
 就代表了旋转(至此,可能你已经隐隐约约意识到,为何我们在解释旋转位置编码时,为何要扯上复数了),为形象说明,再举两个例子

比如对于
,自然数 1,绕坐标中心旋转180度
),再平移1 ,就回到坐标原点
再比如对于(a+bi)i=−b+ai
(
𝑎
+
𝑏
𝑖
)
𝑖
=

𝑏
+
𝑎
𝑖


2.2 如何快速理解欧拉公式
2.2.1 什么是欧拉公式
当x
𝑥
 表示任意实数,e
𝑒
 是自然对数的底数,i
𝑖
 是复数中的虚数单位,则根据欧拉公式有

eix=cosx+isinx
𝑒
𝑖
𝑥
=
cos

𝑥
+
𝑖
sin

𝑥

表达的含义在于该指数函数可以表示为实部为cosx
𝑐
𝑜
𝑠
𝑥
,虚部为sinx
𝑠
𝑖
𝑛
𝑥
的一个复数

该欧拉公式相当于建立了指数函数、三角函数和复数之间的桥梁,但怎么推导出来的呢,其实很简单

由于有
ex=1+x+12!x2+13!x3+⋯
𝑒
𝑥
=
1
+
𝑥
+
1
2
!
𝑥
2
+
1
3
!
𝑥
3
+

sin(x)=x−13!x3+15!x5+⋯
sin

(
𝑥
)
=
𝑥

1
3
!
𝑥
3
+
1
5
!
𝑥
5
+

cos(x)=1−12!x2+14!x4+⋯
cos

(
𝑥
)
=
1

1
2
!
𝑥
2
+
1
4
!
𝑥
4
+

所以,如果x=iθ
𝑥
=
𝑖
𝜃
 ,则有
eiθ=1+iθ+(iθ)22!+(iθ)33!+(iθ)44!+(iθ)55!+(iθ)66!+(iθ)77!+(iθ)88!+⋯=1+iθ−θ22!−iθ33!+θ44!+iθ55!−θ66!−iθ77!+θ88!+⋯=(1−θ22!+θ44!−θ66!+θ88!−⋯)+i(θ−θ33!+θ55!−θ77!+⋯)=cosθ+isinθ
𝑒
𝑖
𝜃
=
1
+
𝑖
𝜃
+
(
𝑖
𝜃
)
2
2
!
+
(
𝑖
𝜃
)
3
3
!
+
(
𝑖
𝜃
)
4
4
!
+
(
𝑖
𝜃
)
5
5
!
+
(
𝑖
𝜃
)
6
6
!
+
(
𝑖
𝜃
)
7
7
!
+
(
𝑖
𝜃
)
8
8
!
+

=
1
+
𝑖
𝜃

𝜃
2
2
!

𝑖
𝜃
3
3
!
+
𝜃
4
4
!
+
𝑖
𝜃
5
5
!

𝜃
6
6
!

𝑖
𝜃
7
7
!
+
𝜃
8
8
!
+

=
(
1

𝜃
2
2
!
+
𝜃
4
4
!

𝜃
6
6
!
+
𝜃
8
8
!


)
+
𝑖
(
𝜃

𝜃
3
3
!
+
𝜃
5
5
!

𝜃
7
7
!
+

)
=
cos

𝜃
+
𝑖
sin

𝜃

2.2.2 欧拉公式与三角函数
如何直观的理解这个欧拉公式呢?

其实,可以把eiθ
𝑒
𝑖
𝜃
看作通过单位圆的圆周运动来描述单位圆上的点,cosθ+isinθ
cos

𝜃
+
𝑖
sin

𝜃
通过复平面的坐标来描述单位圆上的点,是同一个点不同的描述方式,所以有eiθ=cosθ+isinθ
𝑒
𝑖
𝜃
=
cos

𝜃
+
𝑖
sin

𝜃
,如下图所示

根据欧拉公式eiθ=cosθ+isinθ
𝑒
𝑖
𝜃
=
cos

𝜃
+
𝑖
sin

𝜃
,可以轻易推出:

sinθ=eiθ−e−iθ2i
sin

𝜃
=
𝑒
𝑖
𝜃

𝑒

𝑖
𝜃
2
𝑖

cosθ=eiθ+e−iθ2
cos

𝜃
=
𝑒
𝑖
𝜃
+
𝑒

𝑖
𝜃
2

我们把复数当作向量来看待,复数的实部是x
𝑥
方向,虚部是y
𝑦
方向,很容易观察出其几何意义,如下图所示

还在思考怎么得来的?很简单哦,还记得向量的加减法么?

第三部分 旋转位置编码(RoPE)的推导与实现
3.1 旋转位置编码的原理与推导
所谓旋转位置编码,其在位置编码上删除了绝对位置嵌入,而在网络的每一层增加了苏剑林等人(2021)提出的旋转位置嵌入(RoPE),其思想是采用绝对位置编码的形式 实现相对位置编码,且RoPE主要借助了复数的思想

具体来说,当咱们给self-attention中的q,k,v
𝑞
,
𝑘
,
𝑣
向量都加入了位置信息后,便可以表示为

qmknvn=fq(xm,m)=fk(xn,n)=fv(xn,n)
𝑞
𝑚
=
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
𝑘
𝑛
=
𝑓
𝑘
(
𝑥
𝑛
,
𝑛
)
𝑣
𝑛
=
𝑓
𝑣
(
𝑥
𝑛
,
𝑛
)

其中

qm
𝑞
𝑚
表示「第 m
𝑚
 个 token 对应的词向量 xm
𝑥
𝑚
 」集成「位置信息 m
𝑚
 」之后的 query 向量
而kn
𝑘
𝑛
 、 vn
𝑣
𝑛
 则分别表示第 n
𝑛
 个 token 对应的词向量 xn
𝑥
𝑛
 集成位置信息 n
𝑛
 之后的 key 向量、 value 向量
3.1.1 第一种形式的推导(可能是全网最通俗易懂版)
接着论文中提出为了能利用上 token 之间的相对位置信息,假定 query 向量 qm
𝑞
𝑚
 和 key 向量 kn
𝑘
𝑛
 之间的内积操作可以被一个函数 g
𝑔
 表示,该函数 g
𝑔
 的输入是词嵌入向量 xm
𝑥
𝑚
、xn
𝑥
𝑛
 ,和它们之间的相对位置 m−n
𝑚

𝑛

<fq(xm,m),fk(xn,n)>=g(xm,xn,m−n)
<
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
,
𝑓
𝑘
(
𝑥
𝑛
,
𝑛
)
>=
𝑔
(
𝑥
𝑚
,
𝑥
𝑛
,
𝑚

𝑛
)

这里面其实有很大的一个关键,但大部分资料甚至RoPE原始论文都不会给你特别强调出来,即为何要构造这么一个等式呢?

原因在于左边算是q和k向量的内积,而这恰好是transformer计算自注意力机制的核心一步,右边等式则意味着m与n的相对位置
如此一来,该等式便把“q和k的内积”与“它们的相对位置”给串起来了
也如阿荀所说,左边是含有各自绝对位置信息的q向量和k向量,而这个等式就是RoPE追求的目标,物理含义就是通过显式传入绝对位置信息实现与传入相对位置信息对等的情况
假定现在词嵌入向量的维度是两维 d=2
𝑑
=
2
 ,然后RoPE利用2维度平面上的向量的几何性质,再结合复数的性质,神奇般的找到了满足上述等式的 f
𝑓
 和 g
𝑔
 ,其形式如下:

fq(xm,m)=(Wqxm)eimθfk(xn,n)=(Wkxn)einθg(xm,xn,m−n)=Re[(Wqxm)(Wkxn)∗ei(m−n)θ]
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
=
(
𝑊
𝑞
𝑥
𝑚
)
𝑒
𝑖
𝑚
𝜃
𝑓
𝑘
(
𝑥
𝑛
,
𝑛
)
=
(
𝑊
𝑘
𝑥
𝑛
)
𝑒
𝑖
𝑛
𝜃
𝑔
(
𝑥
𝑚
,
𝑥
𝑛
,
𝑚

𝑛
)
=
Re

[
(
𝑊
𝑞
𝑥
𝑚
)
(
𝑊
𝑘
𝑥
𝑛
)

𝑒
𝑖
(
𝑚

𝑛
)
𝜃
]

这里面的 Re 表示复数的实部

进一步地, fq
𝑓
𝑞
可以表示成下面的式子(如果此刻你觉得你有点懵,没事,下文马上会一步一步的详细推导):
fq(xm,m)=(cosmθsinmθ−sinmθ)cosmθ)(W(1,1)qW(2,1)qW(1,2)qW(2,2)q)(x(1)mx(2)m)=(cosmθsinmθ−sinmθ)cosmθ)(q(1)mq(2)m)
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
=
(
cos

𝑚
𝜃

sin

𝑚
𝜃
)
sin

𝑚
𝜃
cos

𝑚
𝜃
)
(
𝑊
𝑞
(
1
,
1
)
𝑊
𝑞
(
1
,
2
)
𝑊
𝑞
(
2
,
1
)
𝑊
𝑞
(
2
,
2
)
)
(
𝑥
𝑚
(
1
)
𝑥
𝑚
(
2
)
)
=
(
cos

𝑚
𝜃

sin

𝑚
𝜃
)
sin

𝑚
𝜃
cos

𝑚
𝜃
)
(
𝑞
𝑚
(
1
)
𝑞
𝑚
(
2
)
)

看到这里会发现,这不就是 query 向量乘以了一个旋转矩阵吗?这就是为什么叫做旋转位置编码的原因
同理,fk
𝑓
𝑘
  可以表示成下面的式子:
fk(xm,m)=(cosmθsinmθ−sinmθ)cosmθ)(W(1,1)kW(2,1)kW(1,2)kW(2,2)k)(x(1)mx(2)m)=(cosmθsinmθ−sinmθ)cosmθ)(k(1)mk(2)m)
𝑓
𝑘
(
𝑥
𝑚
,
𝑚
)
=
(
cos

𝑚
𝜃

sin

𝑚
𝜃
)
sin

𝑚
𝜃
cos

𝑚
𝜃
)
(
𝑊
𝑘
(
1
,
1
)
𝑊
𝑘
(
1
,
2
)
𝑊
𝑘
(
2
,
1
)
𝑊
𝑘
(
2
,
2
)
)
(
𝑥
𝑚
(
1
)
𝑥
𝑚
(
2
)
)
=
(
cos

𝑚
𝜃

sin

𝑚
𝜃
)
sin

𝑚
𝜃
cos

𝑚
𝜃
)
(
𝑘
𝑚
(
1
)
𝑘
𝑚
(
2
)
)

最终g(xm,xn,m−n)
𝑔
(
𝑥
𝑚
,
𝑥
𝑛
,
𝑚

𝑛
)
可以表示如下:
g(xm,xn,m−n)=(q(1)mq(2)m)(cos((m−n)θ)sin((m−n)θ)−sin((m−n)θ)cos((m−n)θ))(k(1)nk(2)n)
𝑔
(
𝑥
𝑚
,
𝑥
𝑛
,
𝑚

𝑛
)
=
(
𝑞
𝑚
(
1
)
𝑞
𝑚
(
2
)
)
(
cos

(
(
𝑚

𝑛
)
𝜃
)

sin

(
(
𝑚

𝑛
)
𝜃
)
sin

(
(
𝑚

𝑛
)
𝜃
)
cos

(
(
𝑚

𝑛
)
𝜃
)
)
(
𝑘
𝑛
(
1
)
𝑘
𝑛
(
2
)
)

然上述分别关于fq
𝑓
𝑞
、fk
𝑓
𝑘
、g(xm,xn,m−n)
𝑔
(
𝑥
𝑚
,
𝑥
𝑛
,
𝑚

𝑛
)
的三个式子,咋一步一步推导来的?为做细致说明,特参考此文一步一步解释下

首先看第一个式子,对于fq(xm,m)=(Wqxm)eimθ
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
=
(
𝑊
𝑞
𝑥
𝑚
)
𝑒
𝑖
𝑚
𝜃
,这个式子的右边项有两部分,一部分是Wqxm
𝑊
𝑞
𝑥
𝑚
、一部分是eimθ
𝑒
𝑖
𝑚
𝜃

对于前者Wqxm
𝑊
𝑞
𝑥
𝑚
,可知其中的Wq
𝑊
𝑞
是个二维矩阵,xm
𝑥
𝑚
是个二维向量,自然相乘的结果也必然是一个二维向量,用qm
𝑞
𝑚
表示
qm=(q(1)mq(2)m)=Wqxm=(W(11)qW(21)qW(12)qW(22)q)(x(1)mx(2)m)
𝑞
𝑚
=
(
𝑞
𝑚
(
1
)
𝑞
𝑚
(
2
)
)
=
𝑊
𝑞
𝑥
𝑚
=
(
𝑊
𝑞
(
11
)
𝑊
𝑞
(
12
)
𝑊
𝑞
(
21
)
𝑊
𝑞
(
22
)
)
(
𝑥
𝑚
(
1
)
𝑥
𝑚
(
2
)
)
对于后者eimθ
𝑒
𝑖
𝑚
𝜃
,根据欧拉公式eix=cosx+isinx
𝑒
𝑖
𝑥
=
cos

𝑥
+
𝑖
sin

𝑥
,可得
eimθ=cos(mθ)+isin(mθ)einθ=cos(nθ)+isin(nθ)ei(m−n)θ=cos((m−n)θ)+isin((m−n)θ)
𝑒
𝑖
𝑚
𝜃
=
cos

(
𝑚
𝜃
)
+
𝑖
sin

(
𝑚
𝜃
)
𝑒
𝑖
𝑛
𝜃
=
cos

(
𝑛
𝜃
)
+
𝑖
sin

(
𝑛
𝜃
)
𝑒
𝑖
(
𝑚

𝑛
)
𝜃
=
cos

(
(
𝑚

𝑛
)
𝜃
)
+
𝑖
sin

(
(
𝑚

𝑛
)
𝜃
)

 
基于上面第1点结论,可知
fq(xm,m)=(Wqxm)eimθ=qmeimθ
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
=
(
𝑊
𝑞
𝑥
𝑚
)
𝑒
𝑖
𝑚
𝜃
=
𝑞
𝑚
𝑒
𝑖
𝑚
𝜃

然后将qm
𝑞
𝑚
表示成复数形式,可得
qm=[q(1)m,q(2)m]=[q(1)m+iq(2)m]
𝑞
𝑚
=
[
𝑞
𝑚
(
1
)
,
𝑞
𝑚
(
2
)
]
=
[
𝑞
𝑚
(
1
)
+
𝑖
𝑞
𝑚
(
2
)
]

从而有
fq(xm,m)=qmeimθ=[q(1)m+iq(2)m]eimθ
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
=
𝑞
𝑚
𝑒
𝑖
𝑚
𝜃
=
[
𝑞
𝑚
(
1
)
+
𝑖
𝑞
𝑚
(
2
)
]
𝑒
𝑖
𝑚
𝜃


基于上面第2点结论,可知fq(xm,m)
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
即是两个复数相乘
fq(xm,m)=qmeimθ=(q(1)m+iq(2)m)∗(cos(mθ)+isin(mθ))
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
=
𝑞
𝑚
𝑒
𝑖
𝑚
𝜃
=
(
𝑞
𝑚
(
1
)
+
𝑖
𝑞
𝑚
(
2
)
)

(
cos

(
𝑚
𝜃
)
+
𝑖
sin

(
𝑚
𝜃
)
)
考虑到以下两个关于复数的背景知识
(a+ib)⋅(c+id)=ac+ibc+iad+i2bd=(ac−bd)+i(bc+ad)
(
𝑎
+
𝑖
𝑏
)

(
𝑐
+
𝑖
𝑑
)
=
𝑎
𝑐
+
𝑖
𝑏
𝑐
+
𝑖
𝑎
𝑑
+
𝑖
2
𝑏
𝑑
=
(
𝑎
𝑐

𝑏
𝑑
)
+
𝑖
(
𝑏
𝑐
+
𝑎
𝑑
)

i2=−1
𝑖
2
=

1


可得
qmeimθ=(q(1)mcos(mθ)=(q(1)m+iq(2)m)∗(cos(mθ)+isin(mθ))−q(2)msin(mθ))+i(q(2)mcos(mθ)+q(1)msin(mθ))
𝑞
𝑚
𝑒
𝑖
𝑚
𝜃
=
(
𝑞
𝑚
(
1
)
+
𝑖
𝑞
𝑚
(
2
)
)

(
cos

(
𝑚
𝜃
)
+
𝑖
sin

(
𝑚
𝜃
)
)
=
(
𝑞
𝑚
(
1
)
cos

(
𝑚
𝜃
)

𝑞
𝑚
(
2
)
sin

(
𝑚
𝜃
)
)
+
𝑖
(
𝑞
𝑚
(
2
)
cos

(
𝑚
𝜃
)
+
𝑞
𝑚
(
1
)
sin

(
𝑚
𝜃
)
)


将这个结果表达成实数向量形式,即是
qmeimθ=[q(1)mcos(mθ)−q(2)msin(mθ),q(2)mcos(mθ)+q(1)msin(mθ)]
𝑞
𝑚
𝑒
𝑖
𝑚
𝜃
=
[
𝑞
𝑚
(
1
)
cos

(
𝑚
𝜃
)

𝑞
𝑚
(
2
)
sin

(
𝑚
𝜃
)
,
𝑞
𝑚
(
2
)
cos

(
𝑚
𝜃
)
+
𝑞
𝑚
(
1
)
sin

(
𝑚
𝜃
)
]


至此,你也就不难发现,这不就是query向量乘以了一个旋转矩阵么
fq(xm,m)=(Wqxm)eimθ=qmeimθ=[q(1)mcos(mθ)−q(2)msin(mθ),q(2)mcos(mθ)+q(1)msin(mθ)]=(cos(mθ)sin(mθ)−sin(mθ)cos(mθ))(q(1)mq(2)m)
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
=
(
𝑊
𝑞
𝑥
𝑚
)
𝑒
𝑖
𝑚
𝜃
=
𝑞
𝑚
𝑒
𝑖
𝑚
𝜃
=
[
𝑞
𝑚
(
1
)
cos

(
𝑚
𝜃
)

𝑞
𝑚
(
2
)
sin

(
𝑚
𝜃
)
,
𝑞
𝑚
(
2
)
cos

(
𝑚
𝜃
)
+
𝑞
𝑚
(
1
)
sin

(
𝑚
𝜃
)
]
=
(
cos

(
𝑚
𝜃
)

sin

(
𝑚
𝜃
)
sin

(
𝑚
𝜃
)
cos

(
𝑚
𝜃
)
)
(
𝑞
𝑚
(
1
)
𝑞
𝑚
(
2
)
)
至于第二个式子,根据上述过程同理,可得key向量kn
𝑘
𝑛

fk(xn,n)=(Wkxn)einθ=kneinθ=[k(1)ncos(nθ)−k(2)nsin(nθ),k(2)ncos(nθ)+k(1)nsin(nθ)]=(cos(nθ)sin(nθ)−sin(nθ)cos(nθ))(k(1)nk(2)n)
𝑓
𝑘
(
𝑥
𝑛
,
𝑛
)
=
(
𝑊
𝑘
𝑥
𝑛
)
𝑒
𝑖
𝑛
𝜃
=
𝑘
𝑛
𝑒
𝑖
𝑛
𝜃
=
[
𝑘
𝑛
(
1
)
cos

(
𝑛
𝜃
)

𝑘
𝑛
(
2
)
sin

(
𝑛
𝜃
)
,
𝑘
𝑛
(
2
)
cos

(
𝑛
𝜃
)
+
𝑘
𝑛
(
1
)
sin

(
𝑛
𝜃
)
]
=
(
cos

(
𝑛
𝜃
)

sin

(
𝑛
𝜃
)
sin

(
𝑛
𝜃
)
cos

(
𝑛
𝜃
)
)
(
𝑘
𝑛
(
1
)
𝑘
𝑛
(
2
)
)
最后第三个式子,函数g,则可得

g(xm,xn,m−n)=Re[(Wqxm)(Wkxn)∗ei(m−n)θ]
𝑔
(
𝑥
𝑚
,
𝑥
𝑛
,
𝑚

𝑛
)
=
Re

[
(
𝑊
𝑞
𝑥
𝑚
)
(
𝑊
𝑘
𝑥
𝑛
)

𝑒
𝑖
(
𝑚

𝑛
)
𝜃
]
其中,Re[x]
𝑅
𝑒
[
𝑥
]
表示一个复数x
𝑥
的实数部分,而(Wkxn)∗
(
𝑊
𝑘
𝑥
𝑛
)

则表示复数Wkxn
𝑊
𝑘
𝑥
𝑛
的共轭

考虑到
z=a+ibz∗=a−ib
𝑧
=
𝑎
+
𝑖
𝑏
𝑧

=
𝑎

𝑖
𝑏

再结合上面第一个式子中的推导,可得
Wqxm=qm=q(1)m+iq(2)mWkxn=kn=k(1)n+ik(2)n(Wkxn)∗=k∗n=k(1)n−ik(2)nei(m−n)θ=cos((m−n)θ)+isin((m−n)θ)
𝑊
𝑞
𝑥
𝑚
=
𝑞
𝑚
=
𝑞
𝑚
(
1
)
+
𝑖
𝑞
𝑚
(
2
)
𝑊
𝑘
𝑥
𝑛
=
𝑘
𝑛
=
𝑘
𝑛
(
1
)
+
𝑖
𝑘
𝑛
(
2
)
(
𝑊
𝑘
𝑥
𝑛
)

=
𝑘
𝑛

=
𝑘
𝑛
(
1
)

𝑖
𝑘
𝑛
(
2
)
𝑒
𝑖
(
𝑚

𝑛
)
𝜃
=
cos

(
(
𝑚

𝑛
)
𝜃
)
+
𝑖
sin

(
(
𝑚

𝑛
)
𝜃
)

继续结合上面第一个式子中的推导(比如(a+ib)⋅(c+id)=ac+ibc+iad+i2bd=(ac−bd)+i(bc+ad)
(
𝑎
+
𝑖
𝑏
)

(
𝑐
+
𝑖
𝑑
)
=
𝑎
𝑐
+
𝑖
𝑏
𝑐
+
𝑖
𝑎
𝑑
+
𝑖
2
𝑏
𝑑
=
(
𝑎
𝑐

𝑏
𝑑
)
+
𝑖
(
𝑏
𝑐
+
𝑎
𝑑
)
,及i2=−1
𝑖
2
=

1
),继续可知,我们现在要证明的是存在
g(xm,xn,m−n)=Re[(Wqxm)(Wkxn)∗ei(m−n)θ]=Re[(q(1)m+iq(2)m)(k(1)n−ik(2)n)(cos((m−n)θ)+isin((m−n)θ))]=Re[((q(1)mk(1)n+q(2)mk(2)n)+i(q(2)mk(1)n−q(1)mk(2)n))(cos((m−n)θ)+isin((m−n)θ))]=(q(1)mk(1)n+q(2)mk(2)n)cos((m−n)θ)−(q(2)mk(1)n−q(1)mk(2)n)sin((m−n)θ)
𝑔
(
𝑥
𝑚
,
𝑥
𝑛
,
𝑚

𝑛
)
=
Re

[
(
𝑊
𝑞
𝑥
𝑚
)
(
𝑊
𝑘
𝑥
𝑛
)

𝑒
𝑖
(
𝑚

𝑛
)
𝜃
]
=
Re

[
(
𝑞
𝑚
(
1
)
+
𝑖
𝑞
𝑚
(
2
)
)
(
𝑘
𝑛
(
1
)

𝑖
𝑘
𝑛
(
2
)
)
(
cos

(
(
𝑚

𝑛
)
𝜃
)
+
𝑖
sin

(
(
𝑚

𝑛
)
𝜃
)
)
]
=
Re

[
(
(
𝑞
𝑚
(
1
)
𝑘
𝑛
(
1
)
+
𝑞
𝑚
(
2
)
𝑘
𝑛
(
2
)
)
+
𝑖
(
𝑞
𝑚
(
2
)
𝑘
𝑛
(
1
)

𝑞
𝑚
(
1
)
𝑘
𝑛
(
2
)
)
)
(
cos

(
(
𝑚

𝑛
)
𝜃
)
+
𝑖
sin

(
(
𝑚

𝑛
)
𝜃
)
)
]
=
(
𝑞
𝑚
(
1
)
𝑘
𝑛
(
1
)
+
𝑞
𝑚
(
2
)
𝑘
𝑛
(
2
)
)
cos

(
(
𝑚

𝑛
)
𝜃
)

(
𝑞
𝑚
(
2
)
𝑘
𝑛
(
1
)

𝑞
𝑚
(
1
)
𝑘
𝑛
(
2
)
)
sin

(
(
𝑚

𝑛
)
𝜃
)
总之,接下来我们就要证明上述函数 g 的计算公式是成立的
首先,回顾一下attention操作,位置m的query和位置n的key会做一个内积操作
即由
fq(xm,m)=[q(1)mcos(mθ)−q(2)msin(mθ),q(2)mcos(mθ)+q(1)msin(mθ)]fk(xn,n)=[k(1)ncos(nθ)−k(2)nsin(nθ),k(2)ncos(nθ)+k(1)nsin(nθ)]
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
=
[
𝑞
𝑚
(
1
)
cos

(
𝑚
𝜃
)

𝑞
𝑚
(
2
)
sin

(
𝑚
𝜃
)
,
𝑞
𝑚
(
2
)
cos

(
𝑚
𝜃
)
+
𝑞
𝑚
(
1
)
sin

(
𝑚
𝜃
)
]
𝑓
𝑘
(
𝑥
𝑛
,
𝑛
)
=
[
𝑘
𝑛
(
1
)
cos

(
𝑛
𝜃
)

𝑘
𝑛
(
2
)
sin

(
𝑛
𝜃
)
,
𝑘
𝑛
(
2
)
cos

(
𝑛
𝜃
)
+
𝑘
𝑛
(
1
)
sin

(
𝑛
𝜃
)
]

可得
<fq(xm,m),fk(xn,n)>=(q(1)mcos(mθ)−q(2)msin(mθ))(k(1)ncos(nθ)−k(2)nsin(nθ))+(q(2)mcos(mθ)+q(1)msin(mθ))(k(2)ncos(nθ)+k(1)nsin(nθ))=q(1)mcos(mθ)k(1)ncos(nθ)−q(1)mcos(mθ)k(2)nsin(nθ)−q(2)msin(mθ)k(1)ncos(nθ)+q(2)msin(mθ)k(2)nsin(nθ)+q(2)mcos(mθ)k(2)ncos(nθ)+q(2)mcos(mθ)k(1)nsin(nθ)+q(1)msin(mθ)k(2)ncos(nθ)+q(1)msin(mθ)k(1)nsin(nθ)
<
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
,
𝑓
𝑘
(
𝑥
𝑛
,
𝑛
)
>
=
(
𝑞
𝑚
(
1
)
cos

(
𝑚
𝜃
)

𝑞
𝑚
(
2
)
sin

(
𝑚
𝜃
)
)
(
𝑘
𝑛
(
1
)
cos

(
𝑛
𝜃
)

𝑘
𝑛
(
2
)
sin

(
𝑛
𝜃
)
)
+
(
𝑞
𝑚
(
2
)
cos

(
𝑚
𝜃
)
+
𝑞
𝑚
(
1
)
sin

(
𝑚
𝜃
)
)
(
𝑘
𝑛
(
2
)
cos

(
𝑛
𝜃
)
+
𝑘
𝑛
(
1
)
sin

(
𝑛
𝜃
)
)
=
𝑞
𝑚
(
1
)
cos

(
𝑚
𝜃
)
𝑘
𝑛
(
1
)
cos

(
𝑛
𝜃
)

𝑞
𝑚
(
1
)
cos

(
𝑚
𝜃
)
𝑘
𝑛
(
2
)
sin

(
𝑛
𝜃
)

𝑞
𝑚
(
2
)
sin

(
𝑚
𝜃
)
𝑘
𝑛
(
1
)
cos

(
𝑛
𝜃
)
+
𝑞
𝑚
(
2
)
sin

(
𝑚
𝜃
)
𝑘
𝑛
(
2
)
sin

(
𝑛
𝜃
)
+
𝑞
𝑚
(
2
)
cos

(
𝑚
𝜃
)
𝑘
𝑛
(
2
)
cos

(
𝑛
𝜃
)
+
𝑞
𝑚
(
2
)
cos

(
𝑚
𝜃
)
𝑘
𝑛
(
1
)
sin

(
𝑛
𝜃
)
+
𝑞
𝑚
(
1
)
sin

(
𝑚
𝜃
)
𝑘
𝑛
(
2
)
cos

(
𝑛
𝜃
)
+
𝑞
𝑚
(
1
)
sin

(
𝑚
𝜃
)
𝑘
𝑛
(
1
)
sin

(
𝑛
𝜃
)

「相当于[A,B]与[C,D]做内积,则相当于A B横着,C D竖着,最终结果为AC BD,最后再把括号里的项全部对应相乘、展开」
首先,把上面第二点的式子整理一下,总计8项,为了把qk
𝑞
𝑘
相关的项提取出来,第1项 8项合并处理、第2项 7项合并处理、第3项 6项合并处理、第4项 5项合并处理
其次,考虑到
sin(a+b)=sinacosb+cosasinbsin(a−b)=sinacosb−cosasinbcos(a+b)=cosacosb−sinasinbcos(a−b)=cosacosb+sinasinb
sin

(
𝑎
+
𝑏
)
=
sin

𝑎
cos

𝑏
+
cos

𝑎
sin

𝑏
sin

(
𝑎

𝑏
)
=
sin

𝑎
cos

𝑏

cos

𝑎
sin

𝑏
cos

(
𝑎
+
𝑏
)
=
cos

𝑎
cos

𝑏

sin

𝑎
sin

𝑏
cos

(
𝑎

𝑏
)
=
cos

𝑎
cos

𝑏
+
sin

𝑎
sin

𝑏

最后,再把相关项的特点,两次调整下顺序即可

依据以上三点,从而有
<fq(xm,m),fk(xn,n)>=q(1)mk(1)n(cos(mθ)cos(nθ)+sin(mθ)sin(nθ))+q(1)mk(2)n(−cos(mθ)sin(nθ)+sin(mθ)cos(nθ))+q(2)mk(1)n(−sin(mθ)cos(nθ)+cos(mθ)sin(nθ))+q(2)mk(2)n(sin(mθ)sin(nθ)+cos(mθ)cos(nθ))=q(1)mk(1)ncos((m−n)θ)+q(1)mk(2)nsin((m−n)θ)−q(2)mk(1)nsin((m−n)θ)+q(2)mk(2)ncos((m−n)θ)=(q(1)mk(1)n+q(2)mk(2)n)cos((m−n)θ)+(q(1)mk(2)n−q(2)mk(1)n)sin((m−n)θ)=(q(1)mk(1)n+q(2)mk(2)n)cos((m−n)θ)−(q(2)mk(1)n−q(1)mk(2)n)sin((m−n)θ)=g(xm,xn,m−n)
<
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
,
𝑓
𝑘
(
𝑥
𝑛
,
𝑛
)
>
=
𝑞
𝑚
(
1
)
𝑘
𝑛
(
1
)
(
cos

(
𝑚
𝜃
)
cos

(
𝑛
𝜃
)
+
sin

(
𝑚
𝜃
)
sin

(
𝑛
𝜃
)
)
+
𝑞
𝑚
(
1
)
𝑘
𝑛
(
2
)
(

cos

(
𝑚
𝜃
)
sin

(
𝑛
𝜃
)
+
sin

(
𝑚
𝜃
)
cos

(
𝑛
𝜃
)
)
+
𝑞
𝑚
(
2
)
𝑘
𝑛
(
1
)
(

sin

(
𝑚
𝜃
)
cos

(
𝑛
𝜃
)
+
cos

(
𝑚
𝜃
)
sin

(
𝑛
𝜃
)
)
+
𝑞
𝑚
(
2
)
𝑘
𝑛
(
2
)
(
sin

(
𝑚
𝜃
)
sin

(
𝑛
𝜃
)
+
cos

(
𝑚
𝜃
)
cos

(
𝑛
𝜃
)
)
=
𝑞
𝑚
(
1
)
𝑘
𝑛
(
1
)
cos

(
(
𝑚

𝑛
)
𝜃
)
+
𝑞
𝑚
(
1
)
𝑘
𝑛
(
2
)
sin

(
(
𝑚

𝑛
)
𝜃
)

𝑞
𝑚
(
2
)
𝑘
𝑛
(
1
)
sin

(
(
𝑚

𝑛
)
𝜃
)
+
𝑞
𝑚
(
2
)
𝑘
𝑛
(
2
)
cos

(
(
𝑚

𝑛
)
𝜃
)
=
(
𝑞
𝑚
(
1
)
𝑘
𝑛
(
1
)
+
𝑞
𝑚
(
2
)
𝑘
𝑛
(
2
)
)
cos

(
(
𝑚

𝑛
)
𝜃
)
+
(
𝑞
𝑚
(
1
)
𝑘
𝑛
(
2
)

𝑞
𝑚
(
2
)
𝑘
𝑛
(
1
)
)
sin

(
(
𝑚

𝑛
)
𝜃
)
=
(
𝑞
𝑚
(
1
)
𝑘
𝑛
(
1
)
+
𝑞
𝑚
(
2
)
𝑘
𝑛
(
2
)
)
cos

(
(
𝑚

𝑛
)
𝜃
)

(
𝑞
𝑚
(
2
)
𝑘
𝑛
(
1
)

𝑞
𝑚
(
1
)
𝑘
𝑛
(
2
)
)
sin

(
(
𝑚

𝑛
)
𝜃
)
=
𝑔
(
𝑥
𝑚
,
𝑥
𝑛
,
𝑚

𝑛
)


完美! 如此,也就证明了,位置 m 的 query 和位置 n 的 key 的内积就是函数 g
最后,把上面的式子一、式子二的最终结果都分别用矩阵向量乘的形式来表达就是:

<fq(xm,m),fk(xn,n)>=((cos(mθ)sin(mθ)−sin(mθ)cos(mθ))(q(1)mq(2)m))T((cos(nθ)sin(nθ)−sin(nθ)cos(nθ))(k(1)nk(2)n))=(q(1)mq(2)m)(cos(mθ)−sin(mθ)sin(mθ)cos(mθ))(cos(nθ)sin(nθ)−sin(nθ)cos(nθ))(k(1)nk(2)n)
<
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
,
𝑓
𝑘
(
𝑥
𝑛
,
𝑛
)
>
=
(
(
cos

(
𝑚
𝜃
)

sin

(
𝑚
𝜃
)
sin

(
𝑚
𝜃
)
cos

(
𝑚
𝜃
)
)
(
𝑞
𝑚
(
1
)
𝑞
𝑚
(
2
)
)
)
𝑇
(
(
cos

(
𝑛
𝜃
)

sin

(
𝑛
𝜃
)
sin

(
𝑛
𝜃
)
cos

(
𝑛
𝜃
)
)
(
𝑘
𝑛
(
1
)
𝑘
𝑛
(
2
)
)
)
=
(
𝑞
𝑚
(
1
)
𝑞
𝑚
(
2
)
)
(
cos

(
𝑚
𝜃
)
sin

(
𝑚
𝜃
)

sin

(
𝑚
𝜃
)
cos

(
𝑚
𝜃
)
)
(
cos

(
𝑛
𝜃
)

sin

(
𝑛
𝜃
)
sin

(
𝑛
𝜃
)
cos

(
𝑛
𝜃
)
)
(
𝑘
𝑛
(
1
)
𝑘
𝑛
(
2
)
)

接下来,我们要计算两个旋转矩阵的乘积,即中间部分的这个式子

(cos(mθ)−sin(mθ)sin(mθ)cos(mθ))(cos(nθ)sin(nθ)−sin(nθ)cos(nθ))
(
cos

(
𝑚
𝜃
)
sin

(
𝑚
𝜃
)

sin

(
𝑚
𝜃
)
cos

(
𝑚
𝜃
)
)
(
cos

(
𝑛
𝜃
)

sin

(
𝑛
𝜃
)
sin

(
𝑛
𝜃
)
cos

(
𝑛
𝜃
)
)

展开之后,可得

(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θ))
(
cos

(
𝑚
𝜃
)
cos

(
𝑛
𝜃
)
+
sin

(
𝑚
𝜃
)
sin

(
𝑛
𝜃
)

cos

(
𝑚
𝜃
)
sin

(
𝑛
𝜃
)
+
sin

(
𝑚
𝜃
)
cos

(
𝑛
𝜃
)

sin

(
𝑚
𝜃
)
cos

(
𝑛
𝜃
)
+
cos

(
𝑚
𝜃
)
sin

(
𝑛
𝜃
)
sin

(
𝑚
𝜃
)
sin

(
𝑛
𝜃
)
+
cos

(
𝑚
𝜃
)
cos

(
𝑛
𝜃
)
)

从而有

<fq(xm,m),fk(xn,n)>=(q(1)mq(2)m)(cos((m−n)θ)sin((m−n)θ)−sin((m−n)θ)cos((m−n)θ))(k(1)nk(2)n)
<
𝑓
𝑞
(
𝑥
𝑚
,
𝑚
)
,
𝑓
𝑘
(
𝑥
𝑛
,
𝑛
)
>
=
(
𝑞
𝑚
(
1
)
𝑞
𝑚
(
2
)
)
(
cos

(
(
𝑚

𝑛
)
𝜃
)

sin

(
(
𝑚

𝑛
)
𝜃
)
sin

(
(
𝑚

𝑛
)
𝜃
)
cos

(
(
𝑚

𝑛
)
𝜃
)
)
(
𝑘
𝑛
(
1
)
𝑘
𝑛
(
2
)
)

上面都还只是针对词嵌入维度为2的情况,那对于d>=2
𝑑
>=
2
的通用情况呢,将2维推广到任意维度,可以表示如下:

f{q,k}(xm,m)=RdΘ,mW{q,k}xm
𝑓
{
𝑞
,
𝑘
}
(
𝑥
𝑚
,
𝑚
)
=
𝑅
Θ
,
𝑚
𝑑
𝑊
{
𝑞
,
𝑘
}
𝑥
𝑚

内积满足线性叠加性,因此任意偶数维的RoPE,我们都可以表示为二维情形的拼接,即将词嵌入向量元素按照两两一组分组

RdΘ,m=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜cosmθ0sinmθ000⋮00−sinmθ0cosmθ000⋮0000cosmθ1sinmθ1⋮0000−sinmθ1cosmθ1⋮00⋯⋯⋯⋯⋱⋯⋯0000⋮cosmθd/2−1sinmθd/2−10000⋮−sinmθd/2−1cosmθd/2−1⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟Wm
𝑅
Θ
,
𝑚
𝑑
=
(
cos

𝑚
𝜃
0

sin

𝑚
𝜃
0
0
0

0
0
sin

𝑚
𝜃
0
cos

𝑚
𝜃
0
0
0

0
0
0
0
cos

𝑚
𝜃
1

sin

𝑚
𝜃
1

0
0
0
0
sin

𝑚
𝜃
1
cos

𝑚
𝜃
1

0
0







0
0
0
0

cos

𝑚
𝜃
𝑑
/
2

1

sin

𝑚
𝜃
𝑑
/
2

1
0
0
0
0

sin

𝑚
𝜃
𝑑
/
2

1
cos

𝑚
𝜃
𝑑
/
2

1
)

𝑊
𝑚

每组应用同样的旋转操作且每组的旋转角度计算方式如下:

Θ={θi=10000−2(i−1)/d,i∈[1,2,…,d/2]}
Θ
=
{
𝜃
𝑖
=
10000

2
(
𝑖

1
)
/
𝑑
,
𝑖

[
1
,
2
,

,
𝑑
/
2
]
}

所以简单来说 RoPE 的 self-attention 操作的流程是

对于 token 序列中的每个词嵌入向量,首先计算其对应的 query 和 key 向量
然后对每个 token 位置都计算对应的旋转位置编码
接着对每个 token 位置的 query 和 key 向量的元素按照 两两一组 应用旋转变换
最后再计算 query 和 key 之间的内积得到 self-attention 的计算结果
3.1.2 第二种形式的推导(苏剑林版)
与上面第一种形式的推导类似,为了引入复数,首先假设了在加入位置信息之前,原有的编码向量是二维行向量和,其中和是绝对位置,现在需要构造一个变换,将和引入到和中,即寻找变换: 

qm~=f(q,m),kn~=f(k,n)
𝑞
𝑚
~
=
𝑓
(
𝑞
,
𝑚
)
,
𝑘
𝑛
~
=
𝑓
(
𝑘
,
𝑛
)

也就是说,我们分别为、设计操作、,使得经过该操作后,、就带有了位置、的绝对位置信息
考虑到Attention的核心计算是内积:

Attention(Q,K,V)=softmax(QKTdk√)V
𝐴
𝑡
𝑡
𝑒
𝑛
𝑡
𝑖
𝑜
𝑛
(
𝑄
,
𝐾
,
𝑉
)
=
𝑠
𝑜
𝑓
𝑡
𝑚
𝑎
𝑥
(
𝑄
𝐾
𝑇
𝑑
𝑘
)
𝑉

故我们希望的内积的结果带有相对位置信息,即寻求的这个变换,应该具有特性:

「怎么理解?很简单,当m和n表示了绝对位置之后,m与n在句子中的距离即位置差m-n,就可以表示为相对位置了,且对于复数,内积通常定义为一个复数与另一个复数的共轭的乘积」

为合理的求出该恒等式的一个尽可能简单的解,可以设定一些初始条件,比如、,然后可以先考虑二维情形,然后借助复数来求解
在复数中有,表示取实部的操作(复数  和“ 复数  的共轭即k∗
𝑘

 ”之积仍是一个复数)
因论文100课的群里有学员对该点存在疑问,故借用七月黄老师的回复补充下:这个等式和复数乘法和向量乘积的联系有关
考虑两个复数
q=a+bi
𝑞
=
𝑎
+
𝑏
𝑖

k=c+di
𝑘
=
𝑐
+
𝑑
𝑖
,k
𝑘
的共轭是k∗=c−di
𝑘

=
𝑐

𝑑
𝑖

一方面,对于等式的右边项而言
q和k*的乘积是 qk∗=(a+bi)(c−di)=ac−adi+cbi+bd=(ac+bd)+(cb−ad)i
𝑞
𝑘

=
(
𝑎
+
𝑏
𝑖
)
(
𝑐

𝑑
𝑖
)
=
𝑎
𝑐

𝑎
𝑑
𝑖
+
𝑐
𝑏
𝑖
+
𝑏
𝑑
=
(
𝑎
𝑐
+
𝑏
𝑑
)
+
(
𝑐
𝑏

𝑎
𝑑
)
𝑖

这个结果的实部是 ac+bd
𝑎
𝑐
+
𝑏
𝑑

二方面,对于等式的左边项而言
其对应于q
𝑞
对应的实数向量[a,b]
[
𝑎
,
𝑏
]
和k
𝑘
对应的实数向量[c,d]
[
𝑐
,
𝑑
]
的乘积
[a,b]⋅[c,d]=ac+bd
[
𝑎
,
𝑏
]

[
𝑐
,
𝑑
]
=
𝑎
𝑐
+
𝑏
𝑑

综合以上两点,可知右边项所表示的“复数q和复数k的共轭k*的乘积”,和左边项做表示的“q、k所对应向量的乘积”是一样的

总之,我们需要寻找一种变换,使得

简单起见,我们假设存在复数,使得,然后我们用复数的指数形式,设

那么代入方程后就得到两个方程
方程1:
方程2:Θf(q,m)−Θf(k,n) = Θg(q,k,m−n)

  对于方程1,代入得到(接着,再把和都设为0)

最后一个等号源于初始条件和,所以现在我们可以很简单地设Rf(q,m)=‖q‖
𝑅
𝑓
(
𝑞
,
𝑚
)
=

𝑞

,,即它不依赖于

  至于方程2,同样代入得到
Θf(q,m)−Θf(k,m) = Θg(q,k,0) = Θf(q,0)−Θf(k,0) = Θ(q)−Θ(k)

这里的Θ(q)
Θ
(
𝑞
)
、是、本身的幅角,而最后一个等号同样源于初始条件
根据上式Θf(q,m)−Θf(k,m) = Θ(q)−Θ(k),可得Θf(q,m)−Θ(q)=Θf(k,m)−Θ(k),所以Θf(q,m)−Θ(q)的结果是一个只与m相关、跟q无关的函数,记为φ(m),即Θf(q,m)=Θ(q)+φ(m)
接着令n=m−1代入Θf(q,m)−Θf(k,n) = Θg(q,k,m−n),可以得到 Θf(q,m)−Θf(k,m-1) = Θg(q,k,1)
然后将 Θf(q,m) 和 Θf(k,m-1) 的等式代入Θf(q,m)=Θ(q)+φ(m),我们可以得到 Θ(q) + φ(m) - (Θ(k) + φ(m-1)) = Θg(q,k,1),整理一下就得到
φ(m)−φ(m−1)=Θg(q,k,1)+Θ(k)−Θ(q)
𝜑
(
𝑚
)

𝜑
(
𝑚

1
)
=
Θ
𝑔
(
𝑞
,
𝑘
,
1
)
+
Θ
(
𝑘
)

Θ
(
𝑞
)

即{φ(m)}是等差数列,设右端为θ,那么就解得φ(m)=mθ

综上,我们得到二维情况下用复数表示的RoPE:

所以说,寻求的变换就是,也就是给乘以eimθ
𝑒
𝑖
𝑚
𝜃
,相应地,乘以
做了这样一个变换之后,根据复数的特性,有:〈qm,kn〉=Re[qmk∗n]

𝑞
𝑚
,
𝑘
𝑛

=
𝑅
𝑒
[
𝑞
𝑚
𝑘
𝑛

]
 也就是,如果把二维向量看做复数,那么它们的内积,等于一个复数乘以另一个复数的共轭,得到的结果再取实部,代入上面的变换,也就有:
〈qmeimθ,kneinθ〉=Re[(qmeimθ)(kneinθ)∗]=Re[qmk∗nei(m−n)θ]

𝑞
𝑚
𝑒
𝑖
𝑚
𝜃
,
𝑘
𝑛
𝑒
𝑖
𝑛
𝜃

=
𝑅
𝑒
[
(
𝑞
𝑚
𝑒
𝑖
𝑚
𝜃
)
(
𝑘
𝑛
𝑒
𝑖
𝑛
𝜃
)

]
=
𝑅
𝑒
[
𝑞
𝑚
𝑘
𝑛

𝑒
𝑖
(
𝑚

𝑛
)
𝜃
]

这样一来,内积的结果就只依赖于,也就是相对位置了
换言之,经过这样一番操作,通过给Embedding添加绝对位置信息,可以使得两个token的编码,经过内积变换(self-attn)之后,得到结果是受它们位置的差值,即相对位置影响的
于是,对于任意的位置为的二维向量[x,y]
[
𝑥
,
𝑦
]
,把它看做复数,乘以eimθ
𝑒
𝑖
𝑚
𝜃
,而根据欧拉公式,有:

eimθ=cosmθ+isinmθ
𝑒
𝑖
𝑚
𝜃
=
cos

𝑚
𝜃
+
𝑖
sin

𝑚
𝜃

从而上述的相乘变换也就变成了(过程中注意:i2=−1
𝑖
2
=

1
):

把上述式子写成矩阵形式:

而这个变换的几何意义,就是在二维坐标系下,对向量(q0,q1)
(
𝑞
0
,
𝑞
1
)
进行了旋转,因而这种位置编码方法,被称为旋转位置编码

根据刚才的结论,结合内积的线性叠加性,可以将结论推广到高维的情形。可以理解为,每两个维度一组,进行了上述的“旋转”操作,然后再拼接在一起:

由于矩阵的稀疏性,会造成计算上的浪费,所以在计算时采用逐位相乘再相加的方式进行:

其中⊗

为矩阵逐位相乘操作

欧拉公式

这个公式是著名的欧拉公式(Euler's identity),它是数学中最优美的公式之一,展示了几个基本数学常数之间的深刻联系。公式如下:

eiπ+1=0

欧拉公式连接了五个最重要的数学常数:

  1. 𝑒e - 自然对数的底,约等于 2.71828
  2. 𝑖i - 虚数单位,满足 
  3. 𝜋π - 圆周率,约等于 3.14159。
  4. 1 - 乘法的单位元。
  5. 0 - 加法的单位元

公式的推导

欧拉公式的推导通常基于复数的指数函数表示。一般形式的欧拉公式是:

𝑒𝑖𝑥=cos⁡(𝑥)+𝑖sin⁡(𝑥)eix=cos(x)+isin(x)

当 𝑥=𝜋 时:

𝑒𝑖𝜋=cos⁡(𝜋)+𝑖sin⁡(𝜋)eiπ=cos(π)+isin(π)

因为:

cos⁡(𝜋)=−1cos(π)=−1
sin⁡(𝜋)=0sin(π)=0

所以:

将其代入欧拉公式,我们得到:

欧拉公式的意义

欧拉公式之所以被认为是数学中最美的公式之一,是因为它简洁地将数学中的几何、代数和分析三个领域结合在一起。它展示了复数、指数函数三角函数之间的深刻联系,同时也将五个基本数学常数统一在一个简单的等式中。这种美不仅在于公式的简洁性,还在于它在数学中的广泛应用和深远影响。

详述欧拉公式在旋转位置编码中的推导证明

GPT-4o的机器人图片

GPT-4o

Poe

欧拉公式在旋转位置编码中的应用主要涉及将二维平面上的旋转操作通过复数表示出来。旋转位置编码是一种在计算机图形学和信号处理中常用的技术,用于描述和处理二维平面上的旋转操作。我们可以利用欧拉公式来推导和证明如何通过复数实现旋转位置编码。

欧拉公式的基本形式

欧拉公式的基本形式为:

𝑒𝑖𝜃=cos⁡(𝜃)+𝑖sin⁡(𝜃) eiθ=cos(θ)+isin(θ)

其中,𝜃θ 是一个实数角度,𝑒𝑖𝜃eiθ 表示单位圆上的一个点。

复数表示旋转

在二维平面上,任何一个点都可以表示为一个复数 𝑧=𝑥+𝑦𝑖z=x+yi,其中 𝑥x 和 𝑦y 分别是该点的横坐标和纵坐标。通过复数乘法,可以实现对这个点的旋转

旋转操作

假设我们有一个点 𝑧z 在二维平面上,我们希望将其绕原点旋转一个角度 𝜃θ。根据复数的性质,旋转操作可以通过将 𝑧z 乘以 𝑒𝑖𝜃eiθ 来实现。

 𝑧=𝑥+𝑦𝑖z=x+yi,则旋转后的点 𝑧′z′ 为:

𝑧′=𝑧⋅𝑒𝑖𝜃z′=z⋅eiθ

通过欧拉公式进行推导

我们可以将 𝑒𝑖𝜃eiθ 代入欧拉公式:

𝑧′=(𝑥+𝑦𝑖)⋅(cos⁡(𝜃)+𝑖sin⁡(𝜃))z′=(x+yi)⋅(cos(θ)+isin(θ))

进行复数乘法:

𝑧′=𝑥cos⁡(𝜃)+𝑥𝑖sin⁡(𝜃)+𝑦𝑖cos⁡(𝜃)+𝑦𝑖2sin⁡(𝜃)z′=xcos(θ)+xisin(θ)+yicos(θ)+yi2sin(θ)

由于 𝑖2=−1i2=−1,所以:

𝑧′=𝑥cos⁡(𝜃)+𝑥𝑖sin⁡(𝜃)+𝑦cos⁡(𝜃)𝑖−𝑦sin⁡(𝜃)    z′=xcos(θ)+xisin(θ)+ycos(θ)i−ysin(θ)

将实部和虚部分开:

𝑧′=(𝑥cos⁡(𝜃)−𝑦sin⁡(𝜃))+𝑖(𝑥sin⁡(𝜃)+𝑦cos⁡(𝜃))z′=(xcos(θ)−ysin(θ))+i(xsin(θ)+ycos(θ))

因此,旋转后的点的坐标为:

(𝑥′,𝑦′)=(𝑥cos⁡(𝜃)−𝑦sin⁡(𝜃),𝑥sin⁡(𝜃)+𝑦cos⁡(𝜃))(x′,y′)=(xcos(θ)−ysin(θ),xsin(θ)+ycos(θ))

这个结果正是二维平面上绕原点旋转角度 𝜃θ 的标准旋转矩阵表示:

旋转位置编码

在实际应用中,如图像处理和信号处理,旋转位置编码利用这种复数表示的旋转来简化计算。特别是在卷积神经网络(CNN)中,旋转不变性是一个重要的特性,通过复数乘法和欧拉公式,可以方便地实现旋转不变的特征提取。

(x′y′)=(cos⁡(θ)−sin⁡(θ)sin⁡(θ)cos⁡(θ))(xy)\begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix}(x′y′​)=(cos(θ)sin(θ)​−sin(θ)cos(θ)​)(xy​)

总结

利用欧拉公式 eiθ=cos⁡(θ)+isin⁡(θ),我们可以将二维平面上的旋转操作简化为复数乘法。这种表示方法不仅简洁,而且在计算上非常高效,广泛应用于计算机图形学、信号处理和机器学习等领域。通过将旋转表示为复数乘法,可以方便地实现旋转位置编码,从而提高算法的旋转不变性和鲁棒性。

eiθ=cos⁡(θ)+isin⁡(θ)   e^{i\theta} = \cos(\theta) + i\sin(\theta)eiθ=cos(θ)+isin(θ)

x' \\ y' \end{pmatrix} = \begin{pmatrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} \] ### 旋转位置编码 在实际应用中,如图像处理和信号处理,旋转位置编码利用这种复数表示的旋转来简化计算。特别是在卷积神经网络(CNN)中,旋转不变性是一个重要的特性,通过复数乘法和欧拉公式,可以方便地实现旋转不变的特征提取。 ### 总结 利用欧拉公式 \( e^{i\theta} = \cos(\theta) + i\sin(\theta) \),我们可以将二维平面上的旋转操作简化为复数乘法。这种表示方法不仅简洁,而且在计算上非常高效,广泛应用于计算机图形学、信号处理和机器学习等领域。通过将旋转表示为复数乘法,可以方便地实现旋转位置编码,从而提高算法的旋转不变性和鲁棒性。

为什么根据复数的性质,旋转操作可以通过将 z 乘以 𝑒𝑖𝜃来实现

GPT-4o的机器人图片

GPT-4o

Poe

复数在二维平面上的旋转操作通过乘以 𝑒𝑖𝜃eiθ 来实现,这一性质源于复数的极坐标表示和欧拉公式。为了详细解释这一点,我们需要了解复数的几何解释和欧拉公式的作用。

复数的几何解释

复数 𝑧=𝑥+𝑦𝑖z=x+yi 可以在复平面上表示为点 (𝑥,𝑦)(x,y),或者向量 𝑧⃗=(𝑥,𝑦)z=(x,y)。复数的另一个表示形式是极坐标形式,即:

𝑧=𝑟(cos⁡(𝜙)+𝑖sin⁡(𝜙))z=r(cos(ϕ)+isin(ϕ))

其中:

  • 𝑟r 是复数 𝑧z 的模(即向量的长度),𝑟=∣𝑧∣=𝑥2+𝑦2r=∣z∣=x2+y2​。
  • 𝜙ϕ 是复数 𝑧z 的辐角(即向量与实轴正方向的夹角),𝜙=arg⁡(𝑧)ϕ=arg(z)。

欧拉公式与复数旋转

欧拉公式给出了复指数函数的表示:

𝑒𝑖𝜃=cos⁡(𝜃)+𝑖sin⁡(𝜃)eiθ=cos(θ)+isin(θ)

将复数 𝑧z 乘以 𝑒𝑖𝜃eiθ 相当于将 𝑧z 的极坐标形式中的辐角增加 𝜃θ:

𝑧′=𝑧⋅𝑒𝑖𝜃z′=z⋅eiθ

如果 𝑧=𝑟(cos⁡(𝜙)+𝑖sin⁡(𝜙))z=r(cos(ϕ)+isin(ϕ)),则:

𝑧′=𝑟(cos⁡(𝜙)+𝑖sin⁡(𝜙))⋅(cos⁡(𝜃)+𝑖sin⁡(𝜃))z′=r(cos(ϕ)+isin(ϕ))⋅(cos(θ)+isin(θ))

乘法运算的展开

展开复数乘法:

𝑧′=𝑟[cos⁡(𝜙)cos⁡(𝜃)−sin⁡(𝜙)sin⁡(𝜃)+𝑖(cos⁡(𝜙)sin⁡(𝜃)+sin⁡(𝜙)cos⁡(𝜃))]z′=r[cos(ϕ)cos(θ)−sin(ϕ)sin(θ)+i(cos(ϕ)sin(θ)+sin(ϕ)cos(θ))]

利用三角函数的加法公式:

cos⁡(𝜙+𝜃)=cos⁡(𝜙)cos⁡(𝜃)−sin⁡(𝜙)sin⁡(𝜃)cos(ϕ+θ)=cos(ϕ)cos(θ)−sin(ϕ)sin(θ)
sin⁡(𝜙+𝜃)=cos⁡(𝜙)sin⁡(𝜃)+sin⁡(𝜙)cos⁡(𝜃)sin(ϕ+θ)=cos(ϕ)sin(θ)+sin(ϕ)cos(θ)

我们得到:

𝑧′=𝑟[cos⁡(𝜙+𝜃)+𝑖sin⁡(𝜙+𝜃)]z′=r[cos(ϕ+θ)+isin(ϕ+θ)]

这表明 𝑧′z′ 的极坐标形式为 𝑟r 和 𝜙+𝜃ϕ+θ。因此,将 𝑧z 乘以 𝑒𝑖𝜃eiθ 相当于将 𝑧z 的辐角增加 𝜃θ,而模 𝑟r 不变。这正是旋转操作的几何意义:在复平面上绕原点旋转 𝜃θ 角。

总结

通过复数乘以 𝑒𝑖𝜃eiθ 来实现旋转操作的原因在于欧拉公式的本质。欧拉公式 𝑒𝑖𝜃=cos⁡(𝜃)+𝑖sin⁡(𝜃)eiθ=cos(θ)+isin(θ) 使得复数乘法可以自然地表示旋转操作。具体来说:

  • 复数的模保持不变,这是旋转中向量长度不变的性质。
  • 复数的辐角增加 𝜃θ,这是旋转中角度变化的性质。

因此,复数乘以 𝑒𝑖𝜃eiθ 完美地描述了二维平面上的旋转操作。

旋转位置编码为什么可以做位置编码,有什么好处

GPT-4o的机器人图片

GPT-4o

Poe

旋转位置编码(Rotary Position Embedding, RoPE)是一种用于将位置信息注入到神经网络中的技术,特别是在自注意力机制(Self-Attention)中。这种编码方式在处理序列数据时具有重要的优势。以下是详细解释旋转位置编码为什么可以做位置编码,以及它的好处。

旋转位置编码的基本原理

旋转位置编码基于复数和欧拉公式的性质,通过将位置编码实现为特定频率的旋转操作,使得位置编码具有一些独特的优点。具体来说,旋转位置编码将位置 𝑝p 映射为复数平面上的旋转操作:

RoPE(𝑝)=(𝑒𝑖𝜃𝑝,𝑒𝑖𝜃𝑝+1,…,𝑒𝑖𝜃𝑝+𝑑/2)RoPE(p)=(eiθp​,eiθp+1​,…,eiθp+d/2​)

其中 𝜃𝑝θp​ 是与位置 𝑝p 相关的角度,通常设置为线性变化的函数。旋转位置编码的一个关键思想是,通过旋转操作来注入位置信息,使得编码后的向量能够自然地反映序列中的位置关系。

为什么旋转位置编码可以做位置编码

  1. 保留相对位置信息:旋转位置编码能够自然地保留相对位置信息。对于两个位置 𝑝p 和 𝑞q,它们的相对位置可以通过旋转角度的差异反映出来。这对于处理序列数据中的相对位置关系非常重要。

  2. 周期性特点:由于旋转操作具有周期性,旋转位置编码能够捕捉序列中的周期性模式。这在自然语言处理、时间序列分析等领域尤为有用,因为这些数据通常具有周期性特征。

  3. 平滑变化:旋转位置编码让位置之间的变化是连续和平滑的。这种平滑性使得模型在推理过程中能够更好地捕捉和利用位置之间的关系。

旋转位置编码的好处

  1. 增强模型的表达能力:通过引入旋转位置编码,模型能够更好地捕捉输入序列中的位置信息,从而增强模型的表达能力。特别是在自注意力机制中,位置编码可以帮助模型理解位置之间的依赖关系。

  2. 提高模型的泛化能力:旋转位置编码能够处理不同长度的序列,并且能够推广到未见过的序列长度。这是因为旋转位置编码是基于频率的,相对位置关系不会因序列长度的变化而改变。

  3. 减少计算复杂度:相比于其他位置编码方法(如绝对位置编码或相对位置编码),旋转位置编码在计算上更为简洁和高效。这对于大型模型的训练和推理非常有利,能够显著减少计算开销。

  4. 更自然地处理周期性数据:由于旋转位置编码的周期性特征,它在处理具有周期性模式的数据时表现尤为出色。这使得它在时间序列预测、周期性事件检测等任务中具有显著优势。

总结

旋转位置编码通过复数的旋转操作将位置信息注入到神经网络中,具有保留相对位置信息处理周期性数据、平滑变化等优势。它能够增强模型的表达能力和泛化能力,同时减少计算复杂度。正因为这些优点,旋转位置编码在自然语言处理、时间序列分析等领域得到了广泛应用,并显示出显著的效果。

为什么说旋转位置编码基于频率,而不是角度,频率做什么解释

GPT-4o的机器人图片

GPT-4o

Poe

旋转位置编码(Rotary Position Embedding, RoPE)的核心思想是通过频率来编码位置信息,而频率的变化反映在角度的变化上。这种编码方式通过频率调制实现了位置编码的目标。让我们深入解释一下为什么旋转位置编码基于频率以及如何理解频率的作用。

频率与旋转位置编码

在旋转位置编码中,频率指的是位置编码中角度变化的速率。高频率意味着角度变化得更快,低频率意味着角度变化得更慢。频率在这里起到了将位置信息映射到不同“旋转速度”上的作用。

具体来说,旋转位置编码可以表示为:

𝑒𝑖𝜃𝑘𝑝eiθk​p

其中:

  • 𝜃𝑘θk​ 是与频率 𝑘k 相关的角度步长(通常与位置 𝑝p 和特定频率 𝑘k 有关)。
  • 𝑝p 是位置索引。

频率的作用

频率在旋转位置编码中起到了以下几个关键作用:

  1. 捕捉不同尺度的信息:通过使用不同的频率,我们可以捕捉到输入序列中不同尺度的信息。低频率捕捉全局模式高频率捕捉局部细节。这种多尺度的信息捕捉对于理解复杂的序列数据非常重要。

  2. 相对位置关系:频率调制的角度变化能够自然地保留相对位置关系。例如,对于两个位置 𝑝p 和 𝑞q,它们在某一频率下的相对位置关系可以通过 的差异来反映。

  3. 周期性特征:频率本身具有周期性,这意味着旋转位置编码能够自然地处理具有周期性特征的数据。例如,时间序列数据中的周期性模式可以通过适当选择频率来捕捉。

数学解释

假设我们有一个位置 𝑝p,我们希望对其进行编码。旋转位置编码会给每个位置一个基于频率的旋转角度:

RoPE(𝑝)=(𝑒𝑖𝜃1𝑝,𝑒𝑖𝜃2𝑝,…,𝑒𝑖𝜃𝑑𝑝) RoPE(p)=(eiθ1​p,eiθ2​p,…,eiθd​p)

其中 𝜃𝑘θk​ 是与频率 𝑘k 相关的角度步长。这个表达式表示位置 𝑝p 的编码是通过对不同频率下的角度进行旋转操作得到的。

实际应用

在实践中,旋转位置编码常用于自注意力机制中。自注意力机制需要了解序列中各个位置之间的关系,而旋转位置编码通过频率调制的角度变化为每个位置提供了独特的编码,从而帮助模型更好地理解和处理序列数据。

为什么基于频率而不是角度

虽然角度在旋转位置编码中起到了直接作用,但频率才是其背后的驱动力。频率决定了角度变化的速率和模式,不同频率可以捕捉到不同尺度的信息。因此,频率是旋转位置编码的核心概念,而角度是频率调制的结果

总结

旋转位置编码基于频率,因为频率决定了位置编码中角度变化的速率和模式。通过使用不同频率,旋转位置编码能够捕捉到输入序列中的多尺度信息、保留相对位置关系,并处理周期性特征。频率调制的角度变化是实现这些目标的关键,因此频率是旋转位置编码的核心概念。

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

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

相关文章

windows环境下部署多个端口Tomcat服务和开机自启动设置保姆级教程

前言 本文主要介绍了 windows环境下&#xff0c;配置多个Tomcat设置不同端口启动服务。其实在思路上Linux上也是适用的&#xff0c;只是 Linux 上没有可视化客户端&#xff0c;会麻烦些&#xff0c;但总体的思路上是一样的。 注&#xff1a;文章中涉及些文字和图片是搬运了其他…

【分布式系统三】监控平台Zabbix对接grafana(截图详细版)

目录 一.安装grafana并启动 二.浏览器访问 三.导入zabbix数据&#xff0c;对接grafana 四.如何导入模版 以前两篇博客为基础 【分布式系统】监控平台Zabbix介绍与部署&#xff08;命令截图版&#xff09;-CSDN博客 【分布式系统】监控平台Zabbix自定义模版配置-CSDN博客 …

上海亚商投顾:沪指低开低走 全市场下跌个股超4800只

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日低开低走&#xff0c;尾盘集体跌超1%&#xff0c;北证50、微盘股指数跌逾3%。 板块概念方面&…

发那科机床联网串口配置

本文章仅针对无网口&#xff0c;需要通过串口输出采集数据情况。跟这篇文章互为参考&#xff0c;一个理论&#xff0c;一个实战。 Fanuc DPRNT宏程序串口采集-CSDN博客 一、禁用机器串口监控 选择System、monit 二、设置参数可写 在MDI模式中字符面板上按OFS/SET键,连按致屏…

NET Core 中的空对象设计模式

介绍 一种称为“空对象模式”的行为设计模式提供了一个对象来表示接口缺少的对象。在空对象会导致空引用异常的情况下&#xff0c;这是一种提供替代行为的方法。在本文中&#xff0c;我们将深入探讨 C# 空对象模式&#xff0c;并逐步解决更复杂的情况。 空对象设计模式它是什…

使用 C# 训练大型语言模型和小型语言模型

介绍 训练大型语言模型 (LLM) 和小型语言模型 (SLM) 在人工智能和机器学习领域获得了巨大的关注。这些模型能够理解和生成类似人类的文本&#xff0c;具有从聊天机器人到高级数据分析的广泛应用。本文探讨了使用 C#&#xff08;一种在企业环境中广泛使用的面向对象编程语言&am…

Leetcode—93. 复原 IP 地址【中等】

2024每日刷题&#xff08;140&#xff09; Leetcode—93. 复原 IP 地址 实现代码 class Solution { public:vector<string> restoreIpAddresses(string s) {vector<string> ans;vector<string> path;function<void(int)>dfs [&](int start) {if…

哪里有主机游戏店收费系统,佳易王电玩ps5ps4计时计费系统操作教程

哪里有主机游戏店收费系统&#xff0c;佳易王电玩ps5ps4计时计费系统操作教程 以下软件操作教程以&#xff0c;佳易王计时计费管理系统为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 一、软件程序图文讲解 1、主机游戏计时软件、电玩店计费软…

电子版盖章怎么弄(电子版公章怎么盖上)

下面是利用e章宝盖电子公章更简单&#xff0c;从印章库中选中要盖的公章&#xff0c;然后在文档中想要盖的位置单击一下即可&#xff1a; 第一步&#xff1a;制作需要盖的电子印章 一般是先扫描公章&#xff0c;然后使用e章宝的一键抠章功能&#xff0c;把印章导入到印章库中…

(三)前端javascript中的数据结构之集合

集合的特点 1.无序 2.唯一性 3.不可重复 集合相对于前面几种数据结构&#xff0c;比较简单好理解&#xff0c;看看代码实现就能知道他的用法了 集合的创建 function MySet() {this.item {}; } MySet.prototype.has function (value) {return value in this.item; };//增 M…

Golang | Leetcode Golang题解之第224题基本计算器

题目&#xff1a; 题解&#xff1a; func calculate(s string) (ans int) {ops : []int{1}sign : 1n : len(s)for i : 0; i < n; {switch s[i] {case :icase :sign ops[len(ops)-1]icase -:sign -ops[len(ops)-1]icase (:ops append(ops, sign)icase ):ops ops[:len(o…

如何忽略部分文件或者文件夹在git提交项目时

嗨&#xff0c;我是兰若&#xff0c;最近发现有些小伙伴在提交代码时&#xff0c;总是把不该提交的文件&#xff0c;比如说本地批跑的缓存文件给提交到了git上面&#xff0c;导致别人在拉取代码的时候&#xff0c;也会把这部分文件拉取到自己本地&#xff0c;从而导致和本地的缓…

树莓派4B_OpenCv学习笔记21:OpenCV_haar人脸识别

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: ​ Opencv 版本是4.5.1&#xff1a; ​ Python 版本3.7.3&#xff1a; 今日学习&#xff…

昇思25天学习打卡营第16天 | 文本解码原理-以MindNLP为例

基于 MindSpore 实现 BERT 对话情绪识别 上几章我们学习过了基于MindSpore来实现计算机视觉的一些应用&#xff0c;那么从这期开始要开始一个新的领域——LLM 首先了解一下什么是LLM LLM 是 “大型语言模型”&#xff08;Large Language Model&#xff09;的缩写。LLM 是一种…

【高中数学/幂函数】比较a=1/2^2/3,b=1/5^2/3,c=1/5^1/3的大小

【问题】 已知&#xff1a;a1/2^2/3,b1/5^2/3,c1/5^1/3 求&#xff1a;a,b,c的大小关系&#xff1f; 【解答】 因为幂函数yx^2/3是在x正半轴是递增的&#xff0c;1/2>1/5,所以1/2^2/3>1/5^2/3&#xff0c;即a>b; 因为幂函数yx^1/3是在x正半轴也是递增的&#xff…

昇思25天学习打卡营第13天|应用实践之ResNet50迁移学习

基本介绍 今日的应用实践的模型是计算机实践领域中十分出名的模型----ResNet模型。ResNet是一种残差网络结构&#xff0c;它通过引入“残差学习”的概念来解决随着网络深度增加时训练困难的问题&#xff0c;从而能够训练更深的网络结构。现很多网络极深的模型或多或少都受此影响…

ScreenAI ——能理解从信息图表到用户界面的图像和文本算法解析

概述 论文地址&#xff1a;https://arxiv.org/pdf/2402.04615.pdf 信息图表&#xff08;图表、示意图、插图、地图、表格、文档布局等&#xff09;能够将复杂的数据和想法转化为简单的视觉效果&#xff0c;因此一直以来都被视为传播的重要元素。这种能力来自于通过布局和视觉线…

C#——序列化和反序列化概念

(1)序列化 在编程中&#xff0c;序列化是指将对象转换为可存储或传输的格式&#xff0c;例如将对象转换为 JSON 字符串或字节流。 (2)反序列化 在编程中&#xff0c;反序列化则是将存储或传输的数据转换回对象的过程。 序列化和反序列化经常用于数据的持久化、数据交换以及…

【计算机毕业设计】013新闻资讯微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【高中数学/指数函数】比较a=0.6^0.9 b=0.6^1.5 c=1.5^0.6的大小

【问题】 比较a0.6^0.9 b0.6^1.5 c1.5^0.6的大小 【解答】 指数函数y0.6^x是减函数&#xff0c;因为0.9<1.5,所以0.6^0.9>0.6^1.5,即a>b; 指数函数y1.5^x是增函数&#xff0c;1.5^0.6>1.5^01>0.6^0.9,即c>a; 综上&#xff0c;得出c>a>b的结论。 …