---
title: "Token Duplication (Token 复制)"
created: 2025-06-02
updated: 2025-06-02
type: concept
tags: [training-optimization, attention-mask, multi-turn-reasoning]
sources: ["[[goru-one-pass-to-reason-2025]]"]
---

# 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 内存。

## 相关

- [[one-pass-fine-tuning]]
- [[block-sparse-attention]]
- [[visibility-constraint]]
- [[goru-one-pass-to-reason-2025|One-Pass to Reason 论文]]
