> For the complete documentation index, see [llms.txt](https://yeasy.gitbook.io/llm_internals/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yeasy.gitbook.io/llm_internals/di-yi-bu-fen-ji-chu-pian/04_position_encoding/summary.md).

# 本章小结

本章沿着注入点的迁移，梳理了位置编码从原始 Transformer 到现代大语言模型的设计演进，核心要点如下：

**正弦位置编码**用一组等比排布的频率给每个位置发一个向量。它的关键性质是位置偏移等于一个只依赖偏移量的分块旋转，两个编码的点积因此只依赖距离。但这条性质在真实注意力里只落在四项展开的最后一项上，中间还隔着 $$W\_Q^T W\_K$$；实测可用的外推余量是几十个词元量级，不是成倍。

**可学习位置编码**把位置表交给训练，参数代价可以忽略（GPT-2 Small 占 0.63%），真正的代价是长度上限被写进了权重形状，越界时是查表报错而非质量下滑。更隐蔽的问题是靠后的行拿到的梯度远少于靠前的行。

**旋转位置编码（RoPE）** 是当前的默认方案。它在每层的查询和键上施加位置相关的旋转，使注意力分数成为相对距离的函数，且不占用残差通道。它仍然外推失败，原因是波长超过训练长度的那些低频对从未转满一圈，实际承担的是绝对位置。位置内插、NTK 感知缩放（即调大底数）、NTK-by-parts 与 YaRN 做的都是把超长位置**内插**回见过的角度范围，多数还需要额外微调。

**ALiBi** 用一条线性距离惩罚替代位置向量，好处是 K 缓存里不含位置。把偏置换算成 Softmax 乘子就能看清它的边界：八个头相当于八扇宽度从 9 到约 1,200 个词元的软窗，因此“困惑度不随长度崩掉”与“能在长上下文里检索远处的信息”不是同一件事。

**设计趋势**从绝对到相对、从嵌入层到注意力层、从固定长度到可扩展，近年又多出一条从全局统一到分层混合：同一模型的不同层用不同的位置方案或不同的底数，把局部分辨率与长程覆盖分开处理。

至此，第一部分“基础篇”结束。全章把每种方案的成败都押在“训练时见过的长度”上，而“训练”本身用的是什么目标、要吃掉多少数据，一次也没有打开。

***

> 📝 **发现错误或有改进建议？** 欢迎提交 [Issue](https://github.com/yeasy/llm_internals/issues) 或 [PR](https://github.com/yeasy/llm_internals/pulls)。
