\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}{SFT 训练细节补充：无需 Decoding 的监督学习}
\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{引言}
本期补充 SFT 的更多细节：SFT 训练时不需要 decoding，以及 Cross-Entropy Loss 的计算。

\begin{importantbox}{SFT 训练不需要 Decoding}
SFT 是有监督学习，我们已经知道 target response。训练时\textbf{不需要}模型逐 token 生成（decoding），而是一次性并行计算所有位置的 loss。这与推理时的 auto-regressive generation 有本质区别。
\end{importantbox}

\section{Cross-Entropy Loss 详解}
对于 GPT 这样的 decode-only 模型：
\begin{itemize}
  \item 输入完整序列（prompt + response）
  \item 模型并行输出所有位置的 logits
  \item 只对 response token 的位置计算 cross-entropy loss
  \item Prompt 部分通过 loss mask 屏蔽
\end{itemize}

\section{Training vs. Inference}
\begin{warningbox}{关键区别}
\begin{itemize}
  \item \textbf{Training}：Teacher Forcing，并行计算所有位置
  \item \textbf{Inference}：Auto-regressive，逐 token 生成
\end{itemize}
\end{warningbox}

\subsection{本章小结}
SFT 的高效性来自 Teacher Forcing：并行计算所有位置的 loss，无需逐 token decoding。

\newpage
\section{效率来源：训练与推理为什么差这么多}
很多初学者第一次接触 SFT 时会疑惑：同样是语言模型，为什么训练能并行算完所有位置，而推理却必须一个 token 一个 token 地生成？这正是 Teacher Forcing 和 Auto-regressive decoding 的本质区别。

\begin{importantbox}{一句话抓住差异}
训练阶段知道完整目标序列，因此可以并行计算所有 response 位置的 loss；推理阶段不知道下一个 token，只能逐步生成。这也是 SFT 往往比 RL rollout 便宜得多的根本原因。
\end{importantbox}

\subsection{本章小结}
理解 Teacher Forcing，不只是理解一个训练技巧，而是在理解为什么监督学习阶段和在线 rollout 阶段的系统成本差异如此巨大。

\newpage
\section{总结与延伸}
\begin{enumerate}
  \item SFT 训练不需要 decoding（Teacher Forcing）
  \item 只对 response 部分计算 Cross-Entropy Loss
  \item 这是 SFT 比 RL 训练快得多的根本原因
\end{enumerate}
\end{document}
