# 4.2 可学习位置编码：灵活性与局限

GPT、BERT 等早期预训练模型没有使用正弦编码，而是选择了**可学习的位置编码**（Learned Positional Embedding）。这种方案更简单直接，但也带来了新的限制。

## 4.2.1 设计思路

可学习位置编码的想法很直观：**为每个位置分配一个可学习的嵌入向量，像词嵌入一样让模型在训练中自行学习最优的位置表示。**

具体实现是创建一个位置嵌入矩阵 $$P \in \mathbb{R}^{L\_{\max} \times d\_{\text{model}}}$$，其中 $$L\_{\max}$$ 是预设的最大序列长度。位置 $$pos$$ 的编码就是取出矩阵的第 $$pos$$ 行。

## 4.2.2 优势：完全数据驱动

可学习位置编码的最大优势是**灵活性**——模型不受任何预设的数学形式（如正弦函数）的约束，可以自由地学习最适合当前任务和数据的位置表示。

实验表明，可学习位置编码在许多任务上与正弦编码效果相当甚至略好，这也是 GPT 和 BERT 选择它的原因。学习到的位置嵌入在可视化后通常展现出平滑的模式——**相邻位置的嵌入向量彼此接近，远离的位置向量则渐行渐远**——表明模型确实学到了位置的连续性。

## 4.2.3 根本局限：无法外推

可学习位置编码的致命缺陷是**无法外推到训练中未见过的位置**。

如果训练时最大序列长度为 512，那么位置 513、514、... 的嵌入向量根本不存在。推理时如果收到更长的序列，模型将无法处理。

这个限制在早期模型（BERT 最大 512、GPT-2 最大 1024）中尚可接受，但随着长上下文需求的增长（现代模型需要处理数万甚至上百万词元），可学习位置编码的局限性变得越来越突出。

## 4.2.4 绝对位置 vs 相对位置的思考

正弦编码和可学习编码都属于**绝对位置编码**——它们为每个位置分配一个固定的（或固定维度的可学习）向量。但语言中真正重要的往往是**相对位置**：两个词相距多远，而非它们各自在句子中的绝对位置。

“猫吃鱼”这个片段，无论出现在句子的开头还是中间，“猫”和“吃”之间的关系不应改变。但绝对位置编码中，同样的词在不同位置会有不同的编码，可能导致模型学习到对位置过度敏感的模式。

这一思考推动了**相对位置编码**方案的发展——其中最成功的是旋转位置编码（RoPE），将在下一节详细讨论。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://yeasy.gitbook.io/llm_internals/di-yi-bu-fen-ji-chu-pian/04_position_encoding/4.2_learnable.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
