精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

通俗理解RoPE、2D-RoPE、M-RoPE 原創

發布于 2025-8-18 08:29
瀏覽
0收藏

本文通過將這些方法可視化呈現為旋轉操作和維度拆分,能讓旋轉位置編碼(RoPE)、二維旋轉位置編碼(2D-RoPE)以及多模態旋轉位置編碼(M-RoPE)的核心概念更直觀、更易于理解。

為什么需要位置嵌入?

假設有兩個語言模型:一個一次只能處理一個詞,另一個則可以并行處理所有詞。

現在,有一個詞序列,比如“Dog eats food”。

  • 對于第一個模型,輸入的順序很重要,因為它必須先處理“Dog”,再處理“eats”,最后處理“food”。但顯然,這樣既緩慢又低效!
  • 對于第二個模型,輸入的順序不重要,因此可以一次性輸入所有詞,甚至是亂序的,比如“food”、“Dog”、“eats”。由于這個模型可以并行處理所有詞,所以速度快得多。

第二個模型的問題在于它不知道詞的順序。因此,需要向輸入嵌入中添加一些位置信息。

現在,想象一下,用N個嵌入向量代替詞,每個向量的維度為??n_dim???。舉個例子:4個嵌入向量,每個的維度??n_dim=8??,且初始化為1:

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

現在將位置嵌入0、1、2、3分別應用到每個嵌入向量上。還使用了一種假想的方法,即簡單地將位置索引加到每個嵌入向量上。因此,第一個嵌入向量就會是1+0,第二個是1+1,以此類推。

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

當然,這只是一個用于說明該概念的簡單例子。實際上,這種方法是行不通的。那么,該怎么做呢?

RoPE

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

RoPE是旋轉位置嵌入(Rotary Position Embedding)的縮寫。目前廣泛運用在LLM中,其是一種在Transformer模型的輸入嵌入中編碼位置信息的方法。

RoPE的工作原理很簡單,就是在二維空間中旋轉輸入嵌入向量。這里不深入數學細節,但舉一個簡單的例子:

輸入向量為??[x=0, y=1]??,每個位置會將該嵌入向量逆時針旋轉20度()。

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

在現實世界中,并非只有2個維度,而是有n_dim個維度。例如,n_dim = 4:

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

那么,如何在n維空間中旋轉一個向量呢?答案很簡單:將這個向量拆分成多個二維對。

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

為了簡化說明,會用箭頭來替代每一對(二維對):

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

現在有趣的部分來了:不會用相同的角度旋轉每個向量,因為這樣很快就會耗盡所有可能的角度

理解這一點的最佳方式就像看待一個時鐘??:秒針每轉一整圈,分針只轉動一小部分。

在RoPE中,旋轉的量被稱為頻率(記為f),其定義為:

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

為簡單起見,假設第一對的頻率f仍為20°,第二對的頻率f為10°:

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

如所見,第一對的旋轉速度比第二對快,就像時鐘的秒針比分針轉得快一樣。

就像時鐘的三根指針可以用來表示一天中的86400秒那樣,可以用同樣的思路在RoPE中表示所有的n維維度。

gemma的RoPE實現如下:

def _compute_default_rope_parameters(
    config: Optional[PretrainedConfig] = None,
    device: Optional["torch.device"] = None,
    seq_len: Optional[int] = None,
    **rope_kwargs,
) -> tuple["torch.Tensor", float]:
    """
    Computes the inverse frequencies according to the original RoPE implementation
    Args:
        config ([`~transformers.PretrainedConfig`]):
            The model configuration.
        device (`torch.device`):
            The device to use for initialization of the inverse frequencies.
        seq_len (`int`, *optional*):
            The current sequence length. Unused for this type of RoPE.
        rope_kwargs (`Dict`, *optional*):
            BC compatibility with the previous RoPE class instantiation, will be removed in v4.45.
    Returns:
        Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
        post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
    """
    base = rope_kwargs["base"]
    dim = rope_kwargs["dim"]
    attention_factor = 1.0  # Unused in this type of RoPE

    # Compute the inverse frequencies
    # 計算RoPE公式40中的theta,每2個維度共用一個inv_freq
    inv_freq = 1.0 / (base ** (torch.arange(0, dim, 2, dtype=torch.int64).to(device=device, dtype=torch.float) / dim))
    return inv_freq, attention_factor

class GemmaRotaryEmbedding(nn.Module):
    def __init__(self, config: GemmaConfig, device=None):
        super().__init__()
        self.rope_type = "default"
        self.max_seq_len_cached = config.max_position_embeddings
        self.original_max_seq_len = config.max_position_embeddings
        self.config = config
        # 計算前面一半維度旋轉角度theta,用于和position_ids相乘
        inv_freq, self.attention_scaling = _compute_default_rope_parameters(self.config, device)
        self.register_buffer("inv_freq", inv_freq, persistent=False)
        self.original_inv_freq = self.inv_freq
    def forward(self, x, position_ids):
        inv_freq_expanded = self.inv_freq[None, :, None].float().expand(position_ids.shape[0], -1, 1).to(x.device)
        position_ids_expanded = position_ids[:, None, :].float()
        device_type = x.device.type if isinstance(x.device.type, str) and x.device.type != "mps"else"cpu"
        with torch.autocast(device_type=device_type, enabled=False):  # Force float32
            #這里的freqs只是前面一半維度的
            freqs = (inv_freq_expanded.float() @ position_ids_expanded.float()).transpose(1, 2)
            # 在hidde_dim維度拼接起來之后freqs最后一維的維度才等于hidden_size
            emb = torch.cat((freqs, freqs), dim=-1)
            # 計算 cos(m*theta)和sin(m*theta)
            cos = emb.cos()
            sin = emb.sin()

        return cos.to(dtype=x.dtype), sin.to(dtype=x.dtype)

def rotate_half(x):
    """
    Rotates half the hidden dims of the input.
    將輸入x后hidden_dim的半部分取反并拼接到原來前半部分的前面
    """
    x1 = x[..., : x.shape[-1] // 2]
    x2 = x[..., x.shape[-1] // 2 :]
    return torch.cat((-x2, x1), dim=-1)

def apply_rotary_pos_emb(q, k, cos, sin, position_ids=None, unsqueeze_dim=1):
    """
    Applies Rotary Position Embedding to the query and key tensors.
    將q,k乘以得到的旋轉矩陣cos,sin
    """
    cos = cos.unsqueeze(unsqueeze_dim)
    sin = sin.unsqueeze(unsqueeze_dim)
    q_embed = (q * cos) + (rotate_half(q) * sin)
    k_embed = (k * cos) + (rotate_half(k) * sin)
    return q_embed, k_embed

2D-RoPE

到目前為止,只討論了RoPE,它是一種一維位置嵌入方法。這對于一維序列很有用,比如文本。

但如果想將RoPE用于二維序列(例如圖像),該怎么辦呢?

二維RoPE(2D-RoPE)是RoPE的一種簡單擴展,在這種方法中,每個輸入向量都有一個二維位置:

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

回到時鐘的類比,一個簡單的思路是使用兩個時鐘,一個對應y軸,另一個對應x軸。

為了說明這一點,將初始示例的維度n_dim加倍,這樣就有n_dim = 8:

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

現在它被表示為4對二維向量:

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

其思路是將該向量進一步拆分為兩部分,一部分對應y軸,另一部分對應x軸。

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

假設這4個向量的位置列表如下:

  • [0, 0]
  • [0, 1]
  • [1, 2]
  • [1, 3]

使用一組40°和20°的角度值,可以像這樣獨立旋轉每個部分的向量:

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

據所知,這種二維旋轉位置編碼(2D-RoPE)方法被用于Llama 4模型的視覺編碼器中。

2D-RoPE with interleaved frequency

在之前的示例中,對兩個軸使用了相同的角度值(40°和20°)。但如果想為每個軸使用不同的頻率呢?

以Mistral的Pixtral模型為例:

  • 首先為所有二維向量對創建一個頻率列表,例如:40°、30°、20°、10°
  • 然后將這些頻率按軸交錯分配,這樣y軸得到40°、20°,x軸得到30°、10°。

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

巧妙之處在于,無需先構建一個頻率列表(例如40°、30°、20°、10°),再從中挑選奇數位或偶數位的頻率值,只需調整n_dim參數值和頻率的縮放比例,就能得到相同的結果。可以查看這個PR(拉取請求)了解的具體實現方式。

M-RoPE

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

Qwen2VL的M-RoPE

M-RoPE是Multimodal-RoPE(多模態旋轉位置編碼)的縮寫,最初由Qwen2VL模型提出。

M-RoPE擴展了二維旋轉位置編碼(2D-RoPE)的理念,不過現在每個位置包含的維度不止2個。例如,可以有三維[時間、y軸、x軸],甚至更多維度。

其核心思想是,不再將嵌入向量拆分為2部分,而是拆分為……沒錯,拆分為n部分,其中n是每個位置的維度數量。

如果仔細查看Qwen2VL的config.json文件,會看到一個名為mrope_section的配置,其中包含3個數值。每個數值代表每個部分的二維對數量。

"rope_scaling": {
    "type": "mrope",
    "mrope_section": [
      16,
      24,
      24
    ]
  },

為了便于理解,舉一個簡單的例子:當嵌入向量的維度??n_dim=8??時,最終會得到4對二維向量:

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

假設的mrope_section配置為[1,1,2],可以將嵌入向量拆分為3個部分:

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

然后,使用與二維旋轉位置編碼(2D-RoPE)中所解釋的相同方法,對每個部分獨立應用旋轉位置編碼(RoPE)。

通俗理解RoPE、2D-RoPE、M-RoPE-AI.x社區

參考文獻

  • RoFormer: Enhanced Transformer with Rotary Position Embedding,https://arxiv.org/abs/2104.09864
  • Qwen2-VL: Enhancing Vision-Language Model’s Perception of the World at Any Resolution,https://arxiv.org/pdf/2409.12191


本文轉載自????大模型自然語言處理????   作者:llmnlp

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
已于2025-8-18 08:30:32修改
收藏
回復
舉報
回復
相關推薦
亚洲色无码播放| 一本一本久久a久久精品综合麻豆| 91久久夜色精品国产网站| 欧美精品一区二区成人| 婷婷成人影院| 欧美精品123区| av高清在线免费观看| 成人三级黄色免费网站| 国产一级精品在线| 欧美一级视频一区二区| www.99re6| 欧美大胆a级| 欧美精品自拍偷拍| 国产免费黄色av| 国产一区久久精品| 欧美激情一区三区| 国产精品一级久久久| 一级片aaaa| 午夜在线一区二区| 九九热最新视频//这里只有精品| 久久精品国产亚洲av麻豆| 精品视频一二| 欧美日韩视频在线一区二区| 国产l精品国产亚洲区久久| 国产黄a三级三级三级av在线看| 久久影视一区二区| 高清日韩一区| av免费在线不卡| 日本大胆欧美人术艺术动态| 91精品国产91久久久久久久久| 国产又黄又爽又无遮挡| 色综合五月天| 亚洲性生活视频在线观看| 成人午夜精品无码区| 免费欧美网站| 欧美久久免费观看| 粉色视频免费看| 日韩成人高清| 日韩欧美一区二区三区久久| 欧美a级免费视频| caopen在线视频| 中文字幕一区二区三中文字幕| 欧美性色黄大片人与善| 午夜一区在线观看| 99久久综合狠狠综合久久| 国产不卡一区二区三区在线观看| 国产毛片毛片毛片毛片| 精品一区二区三区的国产在线播放 | 中文字幕av一区二区三区人| 日韩av影视在线| 亚洲国产精品无码久久久久高潮 | 免费网站在线观看人| 成人欧美一区二区三区在线播放| 一区二区三区|亚洲午夜| 丁香在线视频| 中文字幕av资源一区| 日韩欧美一区二区三区四区| 成全电影播放在线观看国语| 欧美激情自拍偷拍| 亚洲 国产 欧美一区| 97视频在线观看网站| 一区在线观看免费| 国产欧美123| av电影在线免费| 天天av天天翘天天综合网| 成人毛片视频网站| 精品3atv在线视频| 欧美日韩午夜在线视频| 少妇愉情理伦片bd| 丁香五月缴情综合网| 亚洲激情国产精品| 男人天堂av电影| 久久一区二区三区电影| 欧美丰满老妇厨房牲生活| 国产无遮挡免费视频| 香蕉亚洲视频| 国产日韩欧美在线| 午夜精品小视频| 91一区二区三区在线播放| 欧美污视频久久久| av免费网站在线观看| 午夜精品视频在线观看| 成人一区二区三| 超碰国产精品一区二页| 亚洲成人精品久久| 亚洲一级黄色录像| 国语精品一区| 国产精品视频在线播放| 亚洲va久久久噜噜噜无码久久| 96av麻豆蜜桃一区二区| 一本一道久久a久久精品综合| a毛片在线播放| 欧美性猛交xxxxx水多| 亚洲色图偷拍视频| 偷拍精品福利视频导航| 久久亚洲国产精品| 国产成人精品777777| 国产一区二三区| 欧美精品一区二区视频| 四虎亚洲精品| 欧美片网站yy| 免费看黄色aaaaaa 片| 91精品精品| 日韩av毛片网| 亚洲精品无码久久久| 国产日产欧美一区二区视频| 国产精品自拍合集| 懂色aⅴ精品一区二区三区| 亚洲成年人在线播放| 日韩一卡二卡在线观看| 先锋影音久久久| 91成人免费看| 日本天堂在线观看| 色天使久久综合网天天| 91成人在线观看喷潮蘑菇| 日韩啪啪电影网| 热99精品里视频精品| 亚洲免费一级片| 中文字幕一区二区5566日韩| 国产视频在线视频| 久久久久影视| 久久久久久久久久久久av| 97人妻精品一区二区三区视频| av网站一区二区三区| av 日韩 人妻 黑人 综合 无码| 免费观看欧美大片| 亚洲精品电影在线观看| 久久久久久天堂| 国产精品一区专区| 影音先锋欧美在线| 日韩黄色在线| 视频在线观看99| 亚洲精品毛片一区二区三区| 久久久国产精品午夜一区ai换脸| av网站手机在线观看| 日韩成人精品| 欧美成人免费一级人片100| 亚洲天堂avav| 欧美激情一区在线观看| 手机视频在线观看| 日本不卡免费一区| 国产狼人综合免费视频| 91青青在线视频| 欧美亚洲禁片免费| 欧美激情视频二区| 蜜臀精品一区二区三区在线观看| 日本成人黄色免费看| 日本不卡一二三| 影音先锋欧美精品| 亚洲天堂狠狠干| 综合久久久久久| 国产精品探花在线播放| 欧美日韩亚洲国产精品| 不卡一区二区三区四区五区| 免费在线看电影| 亚洲国产欧美一区二区丝袜黑人 | 日本成人在线播放| 在线播放视频一区| 精品无码黑人又粗又大又长| 成人高清视频免费观看| 日韩精品视频久久| 欧美理论电影大全| 成人免费福利视频| 毛片网站在线看| 亚洲国产欧美一区二区丝袜黑人| 精品欧美一区二区三区免费观看 | 国产精品国产精品88| 国产精品资源网站| 国产免费黄色小视频| 欧美日韩xxxx| 91久久中文字幕| 黄色18在线观看| 国产午夜精品视频免费不卡69堂| 国产精品女同一区二区| 亚洲一二三区在线观看| 国产精品亚洲无码| 久久国产精品免费| 日韩 欧美 视频| 成人网18免费网站| 成人欧美视频在线| 欧美性xxx| 欧美日韩福利视频| 久蕉依人在线视频| 日韩一区二区在线播放| 国产精品第5页| 亚洲欧美另类久久久精品| 国产精品入口麻豆| 日本欧美在线观看| 丁香婷婷综合激情| 欧美在线电影| 国内精品久久国产| 欧美成人家庭影院| 91成人在线视频| 成人免费高清| 亚洲欧美一区二区精品久久久| 92久久精品一区二区| 精品久久久视频| 国产高潮流白浆| 久久精品视频免费| 欧美性生交xxxxx| 蜜桃久久av一区| 无码人妻精品一区二区三区在线| 中文视频一区| 小说区图片区图片区另类灬| 国偷自产av一区二区三区| 国产精品成人aaaaa网站| 欧美极品少妇videossex| 一区二区三区日韩在线| 蜜臀av中文字幕| 欧美一区二区三区色| 国产精品久久久久久人| 亚洲福利一区二区三区| 黄色香蕉视频在线观看| 国产午夜精品一区二区三区嫩草 | 日韩丝袜视频| 99re国产视频| 日韩城人网站| 国产精品aaaa| 日韩欧美精品一区二区三区| 欧美激情一区二区三级高清视频| 免费黄网站在线播放| 亚洲性夜色噜噜噜7777| 亚洲av成人无码网天堂| 精品美女一区二区| 国产黄频在线观看| 在线不卡欧美精品一区二区三区| 精品国产乱子伦| 黑人精品xxx一区一二区| 国产精品成人网站| 一区二区三区丝袜| 国产午夜手机精彩视频| 国产精品国产三级国产三级人妇 | 国产精品红桃| 成人av在线播放观看| 午夜国产精品视频| 看一级黄色录像| 欧美一区视频| 91免费版看片| 欧美1区3d| 激情成人开心网| 欧美日韩日本国产亚洲在线| 在线观看污视频| 欧美日韩三级电影在线| 精品一区二区三区无码视频| 国产一区二区三区四区老人| 无码日本精品xxxxxxxxx| 影音先锋久久资源网| 日韩人妻无码精品久久久不卡| 影音先锋日韩资源| 亚洲自偷自拍熟女另类| 久久午夜激情| 亚洲欧洲日本精品| 国产综合色在线视频区| 在线播放免费视频| 国产成人av电影在线观看| 亚洲av无码成人精品区| 成人av在线看| a级大片在线观看| 国产精品每日更新在线播放网址| 永久免费看片视频教学| 一区二区三区久久久| 国产无码精品视频| 色狠狠一区二区三区香蕉| 欧美三级网站在线观看| 4438亚洲最大| 免费av网站观看| 亚洲欧洲激情在线| 免费黄色网页在线观看| 色综合久久久久久中文网| 三级在线看中文字幕完整版| 国产精品白嫩初高中害羞小美女 | 强行糟蹋人妻hd中文| 午夜久久电影网| 一区二区视频网站| 日韩欧美国产麻豆| 黄色小视频在线观看| 久久久国产视频91| 98色花堂精品视频在线观看| 国产精品xxxxx| 欧美第一在线视频| 久久综合入口| 亚洲电影影音先锋| 国产免费黄色av| 国内一区二区在线| 国产一级二级在线观看| 国产精品久久久久毛片软件| 精品一级少妇久久久久久久| 欧美日韩综合在线免费观看| 性做久久久久久久久久| 国产一区二区三区直播精品电影| 麻豆传媒视频在线| 日本免费在线精品| 亚洲综合影院| 亚洲精品无人区| 一本久道久久综合狠狠爱| 特黄视频免费观看| 91看片淫黄大片一级| wwwav国产| 欧美三级视频在线播放| 香蕉视频911| 美日韩在线视频| 黄瓜视频成人app免费| 99在线观看视频| 色乱码一区二区三区网站| 免费无码不卡视频在线观看| 国产美女一区二区三区| 免费看的黄色网| 疯狂做受xxxx欧美肥白少妇| av一区二区三| 日韩中文字幕亚洲| 国产精品亚洲一区二区三区在线观看| 成人在线视频电影| 国产精品久久久久9999赢消| 久久人妻精品白浆国产| 成人av资源在线观看| 中文字幕av免费在线观看| 欧美日韩国产123区| 精品视频二区| 青青草国产精品一区二区| 欧美一级三级| 福利在线一区二区| 国产精品99久久久| 日韩在线观看视频一区二区| 欧美日韩视频不卡| 97人人在线| 国产精品视频不卡| 欧美伦理在线视频| 国产淫片av片久久久久久| 不卡一区二区三区四区| 久草视频精品在线| 精品久久久久久久一区二区蜜臀| 成码无人av片在线观看网站| 国产欧美一区二区三区视频| 欧美三级美国一级| av丝袜天堂网| 亚洲国产精品ⅴa在线观看| 高清乱码免费看污| 一区二区三区亚洲| 91成人抖音| 日韩hmxxxx| 蜜臀久久99精品久久久画质超高清 | 欧美韩国日本在线| 久久综合久久综合九色| 日韩中文字幕在线观看视频| 日韩电影在线观看中文字幕 | 人人干在线观看| 正在播放亚洲一区| 91高清在线观看视频| 成人欧美一区二区三区黑人免费| 亚洲国产二区| 醉酒壮男gay强迫野外xx| 色偷偷久久一区二区三区| 国产精品免费观看| 国产欧美最新羞羞视频在线观看| 亚洲乱码电影| 又黄又爽的网站| 色哟哟国产精品| 蜜桃视频网站在线观看| 99久热re在线精品996热视频| 精品动漫3d一区二区三区免费版| 欲求不满的岳中文字幕| 91国产福利在线| 黄网站视频在线观看| 97人人模人人爽视频一区二区| 亚洲东热激情| 中文字幕被公侵犯的漂亮人妻| 欧美日韩视频专区在线播放| 色爱综合区网| 欧美精品一区三区在线观看| 国内精品在线播放| 日韩激情一区二区三区| 亚洲人成在线观看| 亚洲精品第一| 欧美精品久久久久久久久久久| 2020国产精品自拍| 国产精品亚洲lv粉色| 久久免费视频在线| 成久久久网站| 一区二区在线免费观看视频| 欧美色视频日本版| 美女国产在线| 久久久久久久有限公司| 国产综合色在线| 天天干天天干天天| 欧美成人精品影院| 国产99久久| 影音先锋资源av| 欧美午夜精品久久久久久孕妇 | 国产大片精品免费永久看nba| 最新精品国产| 日本一级免费视频| 亚洲精品在线免费观看视频| 懂色aⅴ精品一区二区三区| av免费观看国产| 中文字幕一区二区不卡| 日本又骚又刺激的视频在线观看| 91精品视频免费| 日韩高清一区在线| 国产成人无码一区二区三区在线| 日韩中文字幕在线视频播放|