20260617:目前有914 页
This commit is contained in:
57
concepts/position-id-discrepancy.md
Normal file
57
concepts/position-id-discrepancy.md
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
title: "Position ID Discrepancy (位置 ID 偏差)"
|
||||
created: 2025-06-02
|
||||
updated: 2025-06-02
|
||||
type: concept
|
||||
tags: [position-encoding, multi-turn-reasoning, training]
|
||||
sources: ["[[goru-one-pass-to-reason-2025]]"]
|
||||
---
|
||||
|
||||
# Position ID Discrepancy
|
||||
|
||||
> 在多轮推理训练中,回复 token 在"生成时刻"与"作为上下文"两种场景下的位置不一致问题。
|
||||
|
||||
## 问题
|
||||
|
||||
考虑第 i 轮对话:
|
||||
|
||||
**生成时刻**(训练时的前向传播):
|
||||
```
|
||||
... hi-1, ri-1, hi, [ti, ri] ← ri 跟在 ti 后面
|
||||
```
|
||||
ri 的绝对位置:`length(H_{<i}) + |hi| + |ti|`
|
||||
|
||||
**作为上下文时刻**(后续轮次训练时):
|
||||
```
|
||||
... hi-1, ri-1, hi, ri, hi+1, ... ← ri 直接跟在 hi 后面,ti 已丢弃
|
||||
```
|
||||
ri 的绝对位置:`length(H_{<i}) + |hi|`
|
||||
|
||||
同一 token 在不同场景中有不同的位置编码 → 如果不加处理,模型学到的位置关系是错的。
|
||||
|
||||
## 根本原因
|
||||
|
||||
这是 [[multi-turn-reasoning|多轮推理]] 的特有现象:
|
||||
- 普通多轮对话没有推理 token → ri 的位置始终一致
|
||||
- 推理对话中 ti 被丢弃 → ri 的位置在两种场景中不同
|
||||
|
||||
## One-Pass to Reason 的解决方案
|
||||
|
||||
通过 [[token-duplication]] + 策略性位置 ID 分配:
|
||||
|
||||
```python
|
||||
s_ti = s_ri_in = e_hi + 1 # ti 和 ri_in 共享同一位置起点
|
||||
s_ri_out = e_ti + 1 # ri_out 从 ti 之后开始(模拟生成场景)
|
||||
s_h_{i+1} = e_ri_in + 1 # 下一轮从 ri_in 后开始(模拟上下文场景)
|
||||
```
|
||||
|
||||
这个分配方案确保:
|
||||
- ri_out 与 ti 的相对位置关系正确(模拟生成)
|
||||
- 后续轮次看到的位置关系正确(ri_in 在 hi 后,模拟上下文)
|
||||
|
||||
## 相关
|
||||
|
||||
- [[token-duplication]]
|
||||
- [[multi-turn-reasoning]]
|
||||
- [[position-encoding]]
|
||||
- [[goru-one-pass-to-reason-2025|One-Pass to Reason 论文]]
|
||||
Reference in New Issue
Block a user