跳转到内容

基础原理第 5 篇,共 13 篇

Embedding 与位置信息

把 token 索引映射为可训练向量,再区分位置相加与 RoPE

更新于 阅读约 2 分钟

输入 ID 只负责选词表中的条目。Embedding 查出一行可训练参数,得到模型可以计算的向量。位置信息让模型区分这些条目出现的顺序。

先读:分词。接着读:Attention。

设 E∈R^(100×8)。ids=[[11,23,37]] 查出 E 的第 11、23、37 行,得到 [1,3,8]。

Xb,t,:=Eidsb,t,:X_{b,t,:}=E_{ids_{b,t},:}

例如人为令 E[11]=[1,0,0,0,0,0,0,0]。这只方便手算,不意味着第一维天然表示“小猫”。这些向量通常随训练更新,不是固定的人类语义编码。同一 ID 的初始 token 向量相同,经过上下文计算后的 hidden state 可以不同。

GPT-2 的学习式位置表让 X_t=E[id_t]+P[t]。例如位置 0 的 P[0]=[0,1,0,0,0,0,0,0],上面的 token 向量相加后为 [1,1,0,0,0,0,0,0]。相加保持 8 维,不变成 16 维。

原论文使用正弦/余弦位置编码,并缩放 token embedding:

Xt=DE[idt]+PE(t)X_t=\sqrt D E[id_t]+PE(t) PE(t,2i)=sin⁡(t/100002i/D),PE(t,2i+1)=cos⁡(t/100002i/D)PE(t,2i)=\sin(t/10000^{2i/D}),\quad PE(t,2i+1)=\cos(t/10000^{2i/D})

RoPE 常在 Attention 内旋转 Q/K 的成对维度,而不是在输入上加一个位置表。对向量的两维 (a,b),角度 θ 的旋转为 (a cosθ−b sinθ, a sinθ+b cosθ)。不同位置使用不同角度;点积因此含相对位置信息。可计算更远位置不等于模型已经学会长上下文。

Embedding 是 ID → D 维向量;LM Head 是 D 维向量 → Vocab 个分数。若共享权重,logits=hEᵀ。共享会减少独立参数,但并非所有模型都默认共享。它也不是把 Embedding 做可逆解码。

来源:原论文 §3.4–3.5。