Tokenizer 编解码不可逆与训练崩溃
| 字段 | 内容 |
|---|---|
| 作者/整理 | 基于公开课程资料整理 |
| 来源 | 五道口纳什 |
| 日期 | 2025 |

引言
本期介绍 veRL 做 RL post-training 时的一个著名 issue:tokenizer 编解码不可逆导致的训练崩溃。
核心问题
Tokenizer 的编解码在很多情况下不可逆:
- 多个不同的 token ID list 解码后得到相同的文本
- 但对同一文本编码只会得到唯一的 token ID list
- 即:decode \(\to\) encode \(\neq\) 原始 token IDs
问题的根源
编解码的多对一关系
对一个文本先 encode 再 decode 是确定的。但对 token IDs 先 decode 再 encode,可能得到不同的 token IDs。这是因为多个 token ID 组合可以解码为相同的文本。
对 RL Training 的影响
在 Multi-turn tool call 场景中:
- 模型生成 token IDs(如 tool call 格式)
- 工具返回文本结果
- 将结果 encode 回 token IDs 拼接到上下文
- 如果 encode 结果与原始 IDs 不同,训练分布出现偏差
- 严重时导致训练崩溃
以 Qwen2.5-7B 为例
展示了具体的 token ID 不一致案例,说明问题的普遍性。
本章小结
Tokenizer 编解码不可逆是 Multi-turn RL Training 的隐患,需要在数据处理中特别注意。
工程防线:保证 token 与文本往返一致
这节课揭示的是一个非常工程化、但足以毁掉训练的细节:如果 tool call 或工具返回结果在 decode/encode 往返中发生变化,训练上下文就会悄悄偏离原始轨迹。对多轮 RL 来说,这种偏差会在每一轮被进一步放大。
最值得建立的检查项
- 对关键格式串做 encode/decode 一致性测试
- 把工具返回文本的重新编码结果写入日志
- 对高风险 tokenizer 单独做回归测试
本章小结
Tokenizer 的细节并不“底层到可以忽略”。在 Multi-turn RL 里,它直接决定了上下文是否稳定可复现。
总结与延伸
- Tokenizer encode-decode 不总是可逆的
- 这会导致 Multi-turn RL Training 的分布偏差
- 解决方案:确保 token IDs 的一致性处理