\documentclass[a4paper]{article}
\usepackage[fontset=fandol]{ctex}
\usepackage{amsmath, amssymb}
\usepackage{graphicx}
\usepackage[margin=2.5cm]{geometry}
\usepackage[most]{tcolorbox}
\usepackage{etoolbox}
\usepackage{listings}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{float}
\newtcolorbox{knowledgebox}[1]{enhanced, colback=blue!5!white, colframe=blue!75!black, colbacktitle=blue!75!black, coltitle=white, fonttitle=\bfseries, title=#1, attach boxed title to top left={yshift=-2mm, xshift=2mm}, boxrule=1pt, sharp corners}
\newtcolorbox{importantbox}[1]{enhanced, colback=yellow!10!white, colframe=yellow!80!black, colbacktitle=yellow!80!black, coltitle=black, fonttitle=\bfseries, title=#1, sharp corners}
\newtcolorbox{warningbox}[1]{enhanced, colback=red!5!white, colframe=red!75!black, colbacktitle=red!75!black, coltitle=white, fonttitle=\bfseries, title=#1, sharp corners}
\lstset{language=Python, basicstyle=\ttfamily\small, keywordstyle=\color{blue}, stringstyle=\color{red!60!black}, commentstyle=\color{green!60!black}, breaklines=true, frame=single, numbers=left, numberstyle=\tiny\color{gray}, captionpos=b, extendedchars=false}
\newcommand{\notetitle}{Tokenizer 编解码不可逆与训练崩溃}
\newcommand{\noteauthors}{基于公开课程资料整理}
\newcommand{\notedate}{2025}
\newcommand{\videochannel}{五道口纳什}
\newcommand{\videopublishdate}{2025}
\newcommand{\videoduration}{约25分钟}
\newcommand{\videourl}{}
\newcommand{\videocoverpath}{cover.jpg}
\newcommand{\repourl}{https://github.com/hqhq1025/ai-course-notes}

% Footer with repo info
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[C]{\thepage}
\fancyfoot[R]{\footnotesize\color{gray}\href{\repourl}{AI Course Notes}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}

\begin{document}
\begin{titlepage}\centering
{\Large 课程笔记\par}\vspace{1.2cm}{\huge\bfseries \notetitle\par}\vspace{0.8cm}{\large \noteauthors\par}\vspace{0.3cm}{\large \notedate\par}\vspace{1.2cm}
\ifdefempty{\videocoverpath}{}{\includegraphics[width=0.82\textwidth,height=0.45\textheight,keepaspectratio]{\videocoverpath}\par}
\vfill
\begin{tcolorbox}[width=0.9\textwidth, colback=black!2!white, colframe=black!60, sharp corners]
\textbf{视频作者/频道}：\videochannel\par\textbf{发布日期}：\videopublishdate\par\textbf{视频时长}：\videoduration\par
\ifdefempty{\videourl}{}{\textbf{视频链接}：\href{\videourl}{\nolinkurl{\videourl}}\par}\par
\textbf{项目主页}：\href{\repourl}{\nolinkurl{\repourl}}\par
\end{tcolorbox}
\end{titlepage}
\tableofcontents\newpage

\section{引言}
本期介绍 veRL 做 RL post-training 时的一个著名 issue：tokenizer 编解码不可逆导致的训练崩溃。

\begin{warningbox}{核心问题}
Tokenizer 的编解码在很多情况下\textbf{不可逆}：
\begin{itemize}
  \item 多个不同的 token ID list 解码后得到相同的文本
  \item 但对同一文本编码只会得到唯一的 token ID list
  \item 即：decode $\to$ encode $\neq$ 原始 token IDs
\end{itemize}
\end{warningbox}

\section{问题的根源}
\subsection{编解码的多对一关系}
对一个文本先 encode 再 decode 是确定的。但对 token IDs 先 decode 再 encode，可能得到不同的 token IDs。这是因为多个 token ID 组合可以解码为相同的文本。

\subsection{对 RL Training 的影响}
在 Multi-turn tool call 场景中：
\begin{enumerate}
  \item 模型生成 token IDs（如 tool call 格式）
  \item 工具返回文本结果
  \item 将结果 encode 回 token IDs 拼接到上下文
  \item 如果 encode 结果与原始 IDs 不同，训练分布出现偏差
  \item 严重时导致训练崩溃
\end{enumerate}

\subsection{以 Qwen2.5-7B 为例}
展示了具体的 token ID 不一致案例，说明问题的普遍性。

\subsection{本章小结}
Tokenizer 编解码不可逆是 Multi-turn RL Training 的隐患，需要在数据处理中特别注意。

\newpage
\section{工程防线：保证 token 与文本往返一致}
这节课揭示的是一个非常工程化、但足以毁掉训练的细节：如果 tool call 或工具返回结果在 decode/encode 往返中发生变化，训练上下文就会悄悄偏离原始轨迹。对多轮 RL 来说，这种偏差会在每一轮被进一步放大。

\begin{warningbox}{最值得建立的检查项}
\begin{itemize}
  \item 对关键格式串做 encode/decode 一致性测试
  \item 把工具返回文本的重新编码结果写入日志
  \item 对高风险 tokenizer 单独做回归测试
\end{itemize}
\end{warningbox}

\subsection{本章小结}
Tokenizer 的细节并不“底层到可以忽略”。在 Multi-turn RL 里，它直接决定了上下文是否稳定可复现。

\newpage
\section{总结与延伸}
\begin{enumerate}
  \item Tokenizer encode-decode 不总是可逆的
  \item 这会导致 Multi-turn RL Training 的分布偏差
  \item 解决方案：确保 token IDs 的一致性处理
\end{enumerate}
\end{document}
