1.7 KiB
1.7 KiB
title, created, updated, type, tags, sources
| title | created | updated | type | tags | sources | ||||
|---|---|---|---|---|---|---|---|---|---|
| Token Duplication (Token 复制) | 2025-06-02 | 2025-06-02 | concept |
|
|
Token Duplication
在多轮推理训练的 one-pass-fine-tuning 中,将每个助手回复的 response token 复制为两份以解决可见性冲突的技术。
为什么需要复制
推理模型的多轮对话中存在一个根本矛盾:
- 生成时:ri 必须能关注 ti(推理 token)来产生正确回复
- 作为上下文时:ri 不应关注 ti(推理 token 已被丢弃)
单一 token 序列无法同时满足这两个条件 → 需要两份副本。
两份副本的角色
| 副本 | 符号 | 职责 | 注意力范围 | 参与 loss |
|---|---|---|---|---|
| 上下文副本 | ri_in | 为后续轮次提供历史 | A(H_{<i}, hi) — 不看 ti | ❌ |
| 生成副本 | ri_out | 实际生成+L-loss 计算 | A(H_{<i}, hi, ti) — 看 ti | ✅ |
内容上:ri_in = ri_out = ri(完全相同),差异仅在注意力行为和 loss 参与上。
位置 ID 分配
s_ti = s_ri_in = e_hi + 1 # 推理和 ri_in 都从当前人类消息后开始
s_ri_out = e_ti + 1 # ri_out 从推理 token 后开始
s_h_{i+1} = e_ri_in + 1 # 下一轮从 ri_in 后开始(模拟 N-Pass 的上下文结构)
内存代价
复制使输入长度从 (|hi|+|ti|+|ri|) ≈ 3Nℓ 增加到 ≈ 4Nℓ,带来约 33% 的额外 GPU 内存。