资料摘要:personal chatgpt 18 — llama2 源码分析 RoPE 相对位置编码的复数形式
本讲由真实视频转录与作者 notebook/代码交叉整理。原始层:🔒 带时间戳视频转录;课程总览:personal chatgpt — LLMs 实践系列。
本讲先回顾欧拉公式、复平面和单位圆,再把正弦位置编码中相邻的 sin/cos 维度组成一个复数,解释 Llama 2 如何用 torch.polar 预计算单位复数频率 freqs_cis。该表示为下一讲对 Q/K 执行复数乘法、得到相对位置性质做准备。
1. 欧拉公式与单位复数
Section titled “1. 欧拉公式与单位复数”
当模长为 1 时,角度 决定复平面上的旋转。复数乘法会让角度相加,这正适合表达“按位置旋转”。
2. 正弦位置编码回顾
Section titled “2. 正弦位置编码回顾”课程用偶数维 sin、奇数维 cos 回顾经典位置编码。Notebook 把 sequence positions 与各维频率做 outer product,得到 [max_sequence_length, d_model/2] 的角度矩阵,再交错拼回实数特征。
3. precompute_freqs_cis
Section titled “3. precompute_freqs_cis”Llama 2 的预计算函数先生成不同维度的频率:
再令位置 与频率做外积 ,最终用 torch.polar(1, angle) 生成:
4. 与普通 sin/cos 表示的关系
Section titled “4. 与普通 sin/cos 表示的关系”Notebook 通过 torch.view_as_real 把复数恢复为实部/虚部,并用翻转与 flatten 对齐此前的 sin/cos 排列。这里证明的是两种表示之间的重排关系;它还没有证明 attention score 只依赖相对位置,第 19 讲才完成该推导。
公式 / 代码
Section titled “公式 / 代码”经典位置编码:
def precompute_freqs_cis(dim: int, end: int, theta: float = 10000.0): freqs = 1.0 / ( theta ** (torch.arange(0, dim, 2).float() / dim) ) t = torch.arange(end, device=freqs.device) freqs = torch.outer(t, freqs).float() return torch.polar(torch.ones_like(freqs), freqs)若 dim=6、end=10,角度和复数结果的形状都是 [10, 3]。
| 时间 | 内容 |
|---|---|
| 01:05 | 引入复平面与 complex number |
| 01:13 | 欧拉公式与单位圆 |
| 02:33 | 回顾 sinusoidal position encoding |
| 03:26 | 位置与不同频率做 outer product |
| 05:22 | 进入 Llama 的 precompute_freqs_cis |
| 08:56 | 解释 CIS 记号 |
| 10:23 | torch.polar 生成单位复数 |
| 11:18 | 复数表示转回交错的 sin/cos 实数表示 |
- 运行标签:direct-static。 仅需 PyTorch、NumPy、Matplotlib,使用小张量,CPU 可运行。
- Notebook 中 Wikipedia URL 的自动提取会因括号截断;正文原意是 CIS 数学条目,不影响本地代码。
- 课程没有在本讲实现
apply_rotary_emb,不得把第 19 讲的 Q/K 旋转代码倒灌为本讲已讲内容。 - 本次未重跑 Notebook,但静态上没有模型下载、CUDA 或写盘副作用。
与前后讲关系
Section titled “与前后讲关系”- 承接第 17 讲: 在 Llama block 中,RMSNorm 后得到的表示会投影为 Q/K,再施加 RoPE。
- 引出第 19 讲: 本讲只预计算旋转因子;下一讲把它广播到 Q/K,并推导 相对位置。
- 引出第 20 讲: 旋转后的 K 会与 V 一起进入 KV Cache。
- 为什么 可以看成单位圆上的旋转?
precompute_freqs_cis(dim, end)的两个输出维度分别代表什么?torch.outer(t, freqs)计算了什么?- 本讲与第 19 讲在 RoPE 流程中的分工是什么?
- 把复数
freqs_cis转回实数后,为什么会出现 sin/cos 两个分量?
- 视频:llama2 源码分析 RoPE 相对位置编码的复数形式
- 转录:🔒 personal chatgpt 18 视频转录
- 课件 / 代码:🔒 llama2_src_03_RoPE_01_complex_position_encoding.ipynb
- 滴答清单抓取时学习状态:已完成。
- 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
- notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。