首页 > 其他分享 >Rotary Position Embedding分析

Rotary Position Embedding分析

时间:2023-11-07 21:55:45浏览次数:45  
标签:dim float seq torch freqs Rotary Embedding theta Position

1 旋转角度计算

计算公式如下,其中d为词嵌入维度,

\[\theta_j=10000^{-2(j-1)/d},j\in [1,2,\ldots,d/2] \]

# 计算词向量元素两两分组之后,每组元素对应的旋转角度
# 维度:[dim / 2]
freqs = 1.0 / (theta ** (torch.arange(0, dim, 2)[: (dim // 2)].float() / dim))

2 计算整个seq的cos_sin矩阵

def precompute_freqs_cis(dim: int, seq_len: int, theta: float = 10000.0):
    # 计算词向量元素两两分组之后,每组元素对应的旋转角度
    freqs = 1.0 / (theta ** (torch.arange(0, dim, 2)[: (dim // 2)].float() / dim))
    # 生成 token 序列索引 t = [0, 1,..., seq_len-1]
    t = torch.arange(seq_len, device=freqs.device)
    # freqs.shape = [seq_len, dim // 2] 
    freqs = torch.outer(t, freqs).float()
    # torch.polar计算得到每个值的复数向量
    # 假设 freqs = [[x, ..., y]]
    # 则 freqs_cis = [[cos(x) + sin(x)i, ..., cos(y) + sin(y)i]]
    freqs_cis = torch.polar(torch.ones_like(freqs), freqs)
    return freqs_cis

3 计算旋转式位置编码

\[\begin{aligned}f_q(x_m,m)&=(W_qx_m)e^{im\theta} \\f_k(x_n,n)&=(W_kx_n)e^{in\theta}\end{aligned} \]

公式根据欧拉公式转化后为

标签:dim,float,seq,torch,freqs,Rotary,Embedding,theta,Position
From: https://www.cnblogs.com/liangyming/p/17816131.html

相关文章

  • Slint 中的元素定位 (Positioning) 和布局 (Layout)
    基本逻辑Slint当中进行元素定位的基本逻辑是这样的:所有的可见元素都需要放置在窗口(window)中,每个元素都有x和y属性,这两个属性表示当前元素相对父元素的位置偏移。Slint计算某个元素在整个窗口中的位置时,会按照层级关系,一级一级将这个x和y的值进行累加,最终得到元素......
  • position sticky table 中不生效问题
    1. 确认浏览器版本支持https://caniuse.com/?search=sticky constcssSupport=(attr:any,value:string)=>{constelement=document.createElement('div')if(attrinelement.style){element.style[attr]=valuereturnel......
  • 抢先体验!超强的 Anchor Positioning 锚点定位
    本文,将向大家介绍CSS规范中,最新的AnchorPositioning,翻译为锚点定位。AnchorPosition的出现,极大的丰富了CSS的能力,虽然语法稍显复杂,但是有了它,能够实现非常多之前实现起来非常困难,或者压根无法使用纯CSS实现的功能。AnchorPosition当前仍属于实验室功能,新版本Chrome开......
  • 一键解决UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xa1 in position
    UnicodeDecodeError:‘utf-8’codeccan’tdecodebyte0xa1inposition0:invalidstartbyte文章目录问题描述解决思路解决方法问题描述UnicodeDecodeError:‘utf-8’codeccan’tdecodebyte0xa1inposition0:invalidstartbyte解决思路这个错误表明你正在试图以......
  • nn.Embedding torch.nn.Embedding
    nn.Embedding torch.nn.Embedding 随机初始化词向量矩阵:这种方式很容易理解,就是使用self.embedding=torch.nn.Embedding(vocab_size,embed_dim)命令直接随机生成个初始化的词向量矩阵,此时的向量值符合正态分布N(0,1),这里的vocab_size是指词向量矩阵能表征的词的个数,这个数......
  • #dp,二项式反演,容斥#CF285E Positions in Permutations
    题目问有多少个长度为\(n\)的排列\(P\)满足\(|P_i-i|=1\)的\(i\)的个数恰好为\(k\)个分析设\(dp_{i,j,k}\)表示前\(i\)个数钦定\(j\)个数满足上述条件且现在\(i\)和\(i+1\)因此被占用的方案数。那么第\(i\)个满足上述条件无非就是放入\(i-1\)或者\(......
  • Unity anchoredPosition转localPosition
    参考https://zhuanlan.zhihu.com/p/119442308在已经有结果的情况下,先捋一下unity对相关字段的注释就能得出很多公式(rectMinPos表示左下角在父节点坐标系中的位置,其他以"Pos"结尾的字段同理)pivot:ThenormalizedpositioninthisRectTransformthatitrotatesaround.......
  • java如何从Content-Disposition获取文件名的正则表达式
    一,主要是关于:post请求下载文件,如何从Content-Disposition获取文件名的正则表达式记录:HttpResponsehttpResponse=httpRequest.execute();byte[]bytes=httpResponse.bodyBytes();Stringheader=httpResponse.header("Content-Disposition")......
  • 安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)
    技术背景实时位置(MobilePosition)订阅和上报,对GB28281设备接入终端尤其重要,如移动单兵设备、执法记录仪、智能安全帽、车载终端等,Android国标接入设备通过获取到实时经纬度信息,按照一定的间隔上报到国标服务平台,国标服务平台通过如电子地图,实时动态显示前端设备的定位信息,从而实现前......
  • pytest报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 1
    报错UnicodeDecodeError:'utf-8'codeccan'tdecodebyte0xc3inposition11:invalidcontinuationbyte代码运行时,报错 可以看出是编码的问题,根据提示,有可能是__init__.py文件的问题,通过查看源代码:尝试改变"utf-8"为“gbk"路径:C:\python3.8\Lib\site-packages\inic......