% !TeX program = xelatex
% 中文课程讲义 LaTeX 模板
% 编译建议：XeLaTeX 或 LuaLaTeX。Windows / macOS / Linux 均可使用 ctex 自动处理中文字体。
\documentclass[UTF8,a4paper,zihao=-4,oneside,openany]{ctexbook}

% 页面与基础排版
\usepackage[
  top=2.6cm,
  bottom=2.6cm,
  left=2.7cm,
  right=2.7cm,
  headheight=15pt
]{geometry}
\usepackage{setspace}
\setstretch{1.25}
\setlength{\parindent}{2em}
\setlength{\parskip}{0.2em}

% 数学、表格、图片
\usepackage{amsmath,amssymb}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{array}
\usepackage{longtable}
\usepackage{multirow}
\usepackage{caption}
\usepackage{subcaption}
\graphicspath{{figures/}{images/}}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,calc}

% 颜色与强调框
\usepackage[most]{tcolorbox}
\usepackage{xcolor}
\definecolor{CourseInk}{HTML}{1F2933}
\definecolor{CourseBlue}{HTML}{24577A}
\definecolor{CourseGreen}{HTML}{2D6A4F}
\definecolor{CourseGold}{HTML}{A16207}
\definecolor{CourseGray}{HTML}{F4F6F8}
\definecolor{CourseLine}{HTML}{D9E2EC}

\tcbset{
  enhanced,
  boxrule=0.6pt,
  arc=2mm,
  left=3mm,
  right=3mm,
  top=2mm,
  bottom=2mm,
  breakable
}

\newtcolorbox{learninggoals}{
  colback=CourseGray,
  colframe=CourseBlue,
  title=学习目标,
  fonttitle=\bfseries
}

\newtcolorbox{importantnote}{
  colback=white,
  colframe=CourseGreen,
  title=重点提示,
  fonttitle=\bfseries
}

\newtcolorbox{examplebox}[1][]{
  colback=white,
  colframe=CourseGold,
  title=例题 #1,
  fonttitle=\bfseries
}

\newtcolorbox{exercisebox}{
  colback=CourseGray,
  colframe=CourseLine,
  title=课堂练习,
  fonttitle=\bfseries\color{CourseInk}
}

% 页眉页脚与链接
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\small 中文课程讲义}
\fancyhead[R]{\small \leftmark}
\fancyfoot[C]{\thepage}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0pt}

\usepackage[
  colorlinks=true,
  linkcolor=CourseBlue,
  urlcolor=CourseGreen,
  citecolor=CourseGold
]{hyperref}

% 章节样式
\ctexset{
  chapter = {
    name = {第,讲},
    number = \chinese{chapter},
    format = \huge\bfseries\color{CourseBlue},
    beforeskip = 0pt,
    afterskip = 22pt
  },
  section = {
    format = \Large\bfseries\color{CourseInk}
  },
  subsection = {
    format = \large\bfseries\color{CourseInk}
  }
}

% 常用命令
\newcommand{\coursename}{中文课程名称}
\newcommand{\semester}{2026 春季}
\newcommand{\teacher}{授课教师}
\newcommand{\school}{学校 / 机构名称}
\newcommand{\lessondate}{\today}

\newcommand{\blankline}{\par\noindent\rule{\linewidth}{0.4pt}\par}
\newcommand{\keyword}[1]{\textbf{\color{CourseBlue}#1}}

\begin{document}

% 封面
\begin{titlepage}
  \centering
  \vspace*{1.5cm}
  {\zihao{1}\bfseries\color{CourseBlue}\coursename\par}
  \vspace{0.8cm}
  {\zihao{3}\bfseries 课程讲义模板\par}
  \vspace{1.2cm}

  \IfFileExists{figures/cover.jpg}{
    \includegraphics[width=0.78\linewidth,height=0.32\textheight,keepaspectratio]{figures/cover.jpg}
  }{
    \fbox{
      \begin{minipage}[c][0.24\textheight][c]{0.78\linewidth}
        \centering
        将封面图命名为 \texttt{cover.jpg} 并放入 \texttt{figures/} 目录后，会自动显示在这里。
      \end{minipage}
    }
  }

  \vfill
  \begin{tabular}{rl}
    \textbf{教师：} & \teacher \\
    \textbf{学期：} & \semester \\
    \textbf{单位：} & \school \\
    \textbf{日期：} & \lessondate \\
  \end{tabular}
  \vspace*{1.2cm}
\end{titlepage}

% 目录
\frontmatter
\pagestyle{plain}
\tableofcontents
\cleardoublepage

% 正文
\mainmatter
\pagestyle{fancy}

\chapter{第一部分}

\chapter{强化学习基础}

许多智能任务并不是对一个静态输入给出一次答案，而是连续作出选择。机器人当前的转向会改变下一时刻的位置，调度系统当前分配的资源会影响后续任务的等待时间，推荐系统展示的内容也可能改变用户之后的行为。此类任务中的动作既影响即时结果，也改变未来能够看到的状态和可以采取的动作。强化学习研究的正是这种\keyword{智能体通过与环境交互，依据反馈学习长期决策策略}的问题。

强化学习并非随着大模型才出现。它吸收了行为心理学中的试错学习、动态规划与最优控制等思想，早期主要用于控制、机器人、资源调度和博弈等序列决策问题。与监督学习依赖“输入—标签”样本不同，强化学习通常只得到奖励或代价：智能体必须探索不同动作，判断延迟出现的结果应当归因于此前哪些决策，并在利用已有经验与尝试未知行为之间作出权衡。价值函数、时序差分学习和策略优化等方法，都是围绕这些困难逐步发展起来的。

深度学习的发展进一步扩大了强化学习能够处理的状态规模。深度神经网络可以直接从图像等高维输入中学习表示，DQN 在一组 Atari 游戏中展示了端到端学习决策策略的能力；随后，深度强化学习与搜索、自我对弈结合，在围棋等复杂博弈中取得重要进展。强化学习的应用也由相对低维的控制问题，扩展到高维感知、复杂策略和大规模函数近似场景。

大模型出现后，强化学习获得了新的角色。预训练通过预测海量语料中的下一个词元学习通用知识和语言能力，但“更像训练语料”并不自动等于更符合用户意图。大模型后训练可以把模型看作策略，把生成过程看作一串动作，再利用人类偏好、奖励模型、规则检查器或可自动验证的任务结果提供反馈。基于人类反馈的强化学习（Reinforcement Learning from Human Feedback, RLHF）已被用于改善指令遵循和人类偏好对齐；在答案能够可靠验证的数学、编程等任务中，强化学习还可用于强化多步推理行为。

因此，在当下的大模型技术体系中，强化学习是连接“已有模型能力”与“目标行为”的重要后训练手段，也是训练可交互智能体和自主决策系统的基础工具。它并不替代预训练、监督微调、搜索或工具调用，也不是所有任务都必须采用的方案：只有当目标能够转化为可信反馈、决策会影响后续过程，并且训练数据与探索成本可以控制时，强化学习的优势才更容易发挥。奖励若不能代表真实目标，策略反而可能更有效地利用奖励漏洞；反馈昂贵或不能在线试错时，也需要离线强化学习、模仿学习或其他方法共同解决。

本章沿着三个问题展开：怎样把持续交互的任务写成一个明确的数学模型；怎样利用有限的交互数据判断动作的长期价值并改进策略；当算法进入真实任务时，怎样检查状态、动作、奖励和评估方案是否设计正确。为使这些抽象问题始终落到同一任务上，下面引入五子棋作为贯穿案例。

设想一个刚开始训练的五子棋程序。它在一局棋中落下几十枚棋子，直到对局结束才得到胜负结果。如果程序输了，究竟是哪一步出了问题？最后一次漏掉防守当然可疑，但更早的一次落子也可能已经让局面无法挽回。反过来，一步当时没有得分的落子，也可能为十几步后的胜利创造条件。程序的每次选择都会改变后续局面，训练数据也会随着策略改变而变化，因而不能只用一次静态的“输入—标签”预测描述这一过程。

五子棋在本章中的作用是说明方法，而不是把某一种算法包装成完整的现成解法。除非另有说明，后文采用同一套设定：棋盘大小为 $15\times15$，智能体执黑棋，对手及棋盘规则属于环境。智能体观察完整棋盘，在每个空位中选择一次落子；环境完成合法性检查、更新棋盘并执行对手回应，然后返回智能体下一次决策时看到的局面。任一方形成五子连线或棋盘填满时，对局自然终止。胜、负、平的核心奖励分别为 $1$、$-1$ 和 $0$。本章中的数值计算只用于解释算法更新，不代表一套经过训练验证的五子棋系统。

\begin{learninggoals}
  \begin{itemize}
    \item 能够把一个序列决策任务表示为马尔可夫决策过程，并区分环境状态、智能体观测、即时奖励和长期回报
    \item 能够解释 Q-learning、策略梯度、Actor-Critic 和 PPO 的更新依据，以及这些方法各自试图解决的问题
    \item 能够根据任务目标设计状态、动作、奖励、约束和评估方案，并识别离线数据、训练稳定性、泛化和奖励偏差带来的风险
  \end{itemize}
\end{learninggoals}

\section{强化学习建模方法}

一个强化学习任务首先要说清楚两件事：谁在作决定，以及一次决定会怎样改变后续处境。如图\ref{fig:framework}所示，作决定的部分称为智能体；其余能够影响决策结果、但不由智能体直接控制的部分统称为环境。智能体接收信息、选择动作，环境执行动作并返回新的信息和奖励。下一次决策建立在这次交互产生的结果之上。

\begin{figure}[htbp]
  \centering
  \IfFileExists{figures/framework.tex}{
    \resizebox{0.78\linewidth}{!}{
      \input{figures/framework.tex}
    }
  }{
    \fbox{
      \begin{minipage}[c][5cm][c]{0.78\linewidth}
        \centering
        强化学习的基本建模框架 \texttt{figures/f\_framework.tex}
      \end{minipage}
    }
  }
  \caption{强化学习的基本建模框架}
  \label{fig:framework}
\end{figure}

图中的边界并非总是唯一的。训练五子棋程序时，可以把对手看作环境的一部分，也可以把双方都看作独立智能体。两种划分会产生不同的数据和训练方法。因此，建模不是给既定对象贴上几个名称，而是决定模型能够观察什么、控制什么，以及环境负责完成什么。

\subsection{马尔可夫决策过程}

马尔可夫决策过程（Markov Decision Process, MDP）是描述上述交互的一种标准模型。它的关键要求不是“任务没有历史”，而是当前状态已经概括了预测未来所需的历史信息。给定当前状态和动作后，更早的状态、动作不应再改变下一状态的条件分布：
\begin{equation}
P(s_{t+1} \mid s_t, a_t, s_{t-1}, a_{t-1}, \ldots, s_0, a_0)
=
P(s_{t+1} \mid s_t, a_t)
\end{equation}
其中，\(s_t\) 是环境在时刻 \(t\) 的状态，\(a_t\) 是随后执行的动作。这个等式是对状态表示的要求，而不是可以无条件接受的事实。如果机器人只输入一张静止图像，它可能无法判断前方物体正在靠近还是远离；此时单帧图像就不是充分状态。可以加入连续观测、速度信息或模型的记忆状态，重新构造更充分的决策信息。

一个 MDP 记为五元组：
\begin{equation}
\mathcal{M} = (\mathcal{S}, \mathcal{A}, P, R, \gamma)
\end{equation}
其中，\(\mathcal{S}\) 是状态空间，\(\mathcal{A}\) 是动作空间，\(P\) 是状态转移分布，\(R\) 是奖励函数，\(\gamma\in[0,1]\) 是折扣因子。转移分布可写为
\begin{equation}
P(s'\mid s,a)=\Pr(S_{t+1}=s'\mid S_t=s,A_t=a)
\end{equation}
奖励函数则描述一次转移产生的即时反馈：
\begin{equation}
R(s,a,s')=\mathbb{E}[R_t\mid S_t=s,A_t=a,S_{t+1}=s']
\end{equation}
正文后续用小写 \(r_t\) 表示一次实际交互得到的奖励样本。奖励函数可以采用其他等价定义，例如只依赖 \((s,a)\)；关键是全章使用同一时间约定：智能体在 \(s_t\) 执行 \(a_t\)，随后收到 \(r_t\) 并进入 \(s_{t+1}\)。

一次从初始状态到终止状态的完整交互称为轨迹：
\begin{equation}
\tau=(s_0,a_0,r_0,s_1,a_1,r_1,\ldots,a_{T-1},r_{T-1},s_T)
\end{equation}
这里 \(s_T\) 是终止状态，最后一次动作和奖励分别是 \(a_{T-1}\) 与 \(r_{T-1}\)。固定这一约定可以避免后续回报和 TD 目标出现一位下标偏差。

\begin{importantnote}
马尔可夫性取决于状态如何构造。任务具有历史依赖，并不意味着它一定无法使用 MDP；真正的问题是当前状态是否已经保存了影响未来的历史信息。
\end{importantnote}

\subsection{关键元素介绍}

表\ref{tab:rl-elements} 将 MDP 中的主要对象与五子棋任务对应起来。这里把对手划入环境，并规定智能体每次只控制自己的落子。

\begin{table}[htbp]
  \centering
  \caption{强化学习基本元素及其在五子棋中的对应关系}
  \label{tab:rl-elements}
  \begin{tabularx}{\linewidth}{>{\bfseries}p{2.2cm}p{3.2cm}X}
    \toprule
    对象 & 数学记号 & 五子棋中的含义 \\
    \midrule
    智能体 & --- & 需要学习落子策略的棋手 \\
    环境 & --- & 棋盘规则、胜负判断以及对手行为 \\
    环境状态 & $s_t$ & 完整棋盘、当前行动方及规则所需信息 \\
    智能体观测 & $o_t$ & 实际提供给策略模型的信息；完全可观测时可与 $s_t$ 相同 \\
    动作 & $a_t\in\mathcal A$ & 在一个合法空位落子 \\
    即时奖励 & $r_t$ & 本次落子及随后转移产生的反馈 \\
    策略 & $\pi(a\mid s)$ & 给定局面时各合法落子的选择规则或概率 \\
    轨迹 & $\tau$ & 从开局到胜、负或平局的完整交互序列 \\
    \bottomrule
  \end{tabularx}
\end{table}

状态与观测的区别值得单独保留。环境状态是对真实决策过程的描述，观测则是智能体实际拿到的输入。五子棋棋盘通常完全可见，因此二者可以相同；机器人被遮挡的视野、推荐系统中未被记录的用户意图则使二者产生差异。后文为了简化公式，在完全可观测的讨论中使用 \(s_t\) 作为策略输入；涉及信息缺失时再显式使用 \(o_t\)。

策略可以是确定性的，也可以是随机的。确定性策略为每个状态指定一个动作；随机策略写成条件分布
\begin{equation}
\pi(a\mid s)=\Pr(A_t=a\mid S_t=s)
\end{equation}
训练的目标不是让策略复现某一条固定轨迹，而是让它在可能遇到的状态中作出长期效果更好的选择。

\subsection{优化目标}

一步动作的即时奖励不能完整说明它是否合理。从时刻 \(t\) 开始，智能体关心的是随后整段交互的折扣回报
\begin{equation}
G_t=\sum_{k=t}^{T-1}\gamma^{k-t}r_k
\end{equation}
折扣因子 \(\gamma\) 决定未来奖励在当前评价中的权重。较小的 \(\gamma\) 强调近期结果；接近 1 的 \(\gamma\) 保留更多长期影响。在有限回合任务中可以取 \(\gamma=1\)；对于可能无限持续的任务，则需要保证回报及其期望有良好定义。

整条轨迹从初始时刻获得的回报记为 \(R(\tau)=G_0\)。参数化策略 \(\pi_\theta\) 会诱导出轨迹分布 \(p_\theta(\tau)\)：策略改变后，智能体访问的状态和收集到的数据也随之改变。策略的性能定义为轨迹回报的期望：
\begin{equation}
J(\theta)
=
\mathbb{E}_{\tau\sim p_\theta(\tau)}[R(\tau)]
\end{equation}
训练希望找到使该期望尽可能大的参数：
\begin{equation}
\theta^{*} = \arg\max_{\theta} J(\theta)
\end{equation}

这个目标有两层难点。第一，不能枚举所有轨迹，只能用采样数据估计策略表现；第二，策略一旦改变，数据分布也会改变。后续算法的差别，主要在于它们怎样估计动作的长期影响，以及怎样利用这种估计更新策略。

\section{强化学习的基本优化算法}
在前一节中，强化学习问题被形式化为长期累积奖励最大化问题，其核心目标是寻找能够使性能函数 $J(\theta)$ 最大化的最优策略。然而，在实际任务中，环境的状态转移规律通常难以完全获得，所有可能的交互轨迹也无法被逐一枚举，因此很难直接计算性能函数并求解最优策略。强化学习算法需要利用智能体与环境交互产生的有限样本，对不同状态和动作所带来的长期收益进行估计，并依据估计结果不断改进决策策略。

根据策略改进方式的不同，强化学习的基本优化算法可以分为基于价值函数的方法和基于策略优化的方法。基于价值函数的方法首先估计某一状态或状态与动作组合能够获得的长期回报，再根据价值估计结果选择动作，将策略优化问题转化为价值函数的迭代更新问题。基于策略优化的方法则直接构建参数化策略，通过调整策略参数，提高高回报动作被选择的概率，从而实现对长期累积奖励的优化。两类方法在优化对象、动作选择方式和适用场景等方面具有不同特点。

在此基础上，Actor-Critic 框架将价值估计与策略优化结合起来。其中，Actor 负责根据当前状态选择动作并更新策略，Critic 负责评估当前策略或动作的长期收益，并为 Actor 的更新提供指导。该框架既保留了策略优化方法处理随机策略和连续动作空间的能力，也利用价值函数降低策略更新过程中的估计波动，成为许多现代强化学习算法的基础。

\subsection{基于价值函数的方法}

五子棋中的多数落子不会立即产生胜负奖励，却会改变后续局面。价值方法要解决的问题正是：当即时奖励不足以评价动作时，怎样估计它对未来回报的影响？

在策略 $\pi$ 下，状态价值函数定义为
\begin{equation}
V^{\pi}(s_t)
=
\mathbb{E}_{\pi}\!\left[G_t\mid S_t=s_t\right]
\end{equation}
它评价的是“处于这个状态，并继续按照 $\pi$ 行动”的期望回报。动作价值函数进一步固定当前动作：
\begin{equation}
Q^{\pi}(s_t,a_t)
=
\mathbb{E}_{\pi}\!\left[G_t\mid S_t=s_t,A_t=a_t\right]
\end{equation}
因此，$V^\pi$ 比较局面，$Q^\pi$ 比较同一局面中的候选动作。两者都依赖后续策略：同一个棋盘局面由强策略继续下和由随机策略继续下，其价值一般不同。

图~\ref{fig:gobang_value} 给出了某一棋盘局面下不同候选落子位置的动作价值，以及智能体依据动作价值进行落子选择的过程。

\begin{figure}[htbp]
  \centering
  \IfFileExists{figures/gobang_value.tex}{
    \resizebox{0.92\linewidth}{!}{
      \input{figures/gobang_value.tex}
    }
  }{
    \fbox{
      \begin{minipage}[c][6cm][c]{0.92\linewidth}
        \centering
        五子棋某一局面下的候选落子位置及动作价值示意\\
        \texttt{figures/gobang\_value.tex}
      \end{minipage}
    }
  }
  \caption{基于动作价值的五子棋落子选择}
  \label{fig:gobang_value}
\end{figure}

图中位置 $(8,8)$ 的估计价值最高。若这些估计足够准确，贪心策略会在合法动作集合 $\mathcal A(s_t)$ 中选择
\begin{equation}
a_t
=
\underset{a\in\mathcal{A}(s_t)}{\arg\max}
Q(s_t,a)
\end{equation}
这里最难的部分不是取最大值，而是得到可信的 $Q$ 值。回报满足
\begin{equation}
G_t=r_t+\gamma G_{t+1}
\end{equation}
所以长期问题可以拆成“本次奖励”和“下一状态之后的回报”。对最优动作价值函数，这一递推成为贝尔曼最优方程：
\begin{equation}
Q^{*}(s_t,a_t)
=
\mathbb{E}\!\left[
r_t+\gamma\max_{a'\in\mathcal{A}(s_{t+1})}
Q^{*}(s_{t+1},a')
\mid s_t,a_t\right]
\end{equation}
期望来自环境转移的不确定性；最大值表示下一状态采用当前认为最优的动作。若 $s_{t+1}$ 是自然终止状态，后续回报为零，最大值项也应置零。

Q-learning 不要求提前知道转移概率。每观察到一次转移 $(s_t,a_t,r_t,s_{t+1})$，它就用单步目标
\begin{equation}
y_t=r_t+\gamma\max_{a'\in\mathcal A(s_{t+1})}Q(s_{t+1},a')
\end{equation}
修正旧估计：
\begin{equation}
Q(s_t,a_t)
\leftarrow
Q(s_t,a_t)
+\alpha\left[y_t-Q(s_t,a_t)\right]
\end{equation}
其中 $\alpha$ 是学习率，差值 $y_t-Q(s_t,a_t)$ 是这次样本带来的时序差分误差。更新目标使用下一状态的最大动作价值，而采集样本时不必始终执行贪心动作；这正是 Q-learning 的离策略特征。

以图中的位置 $(8,8)$ 为例。设旧估计为 $2.0$，落子后的即时奖励为 $0$，下一决策状态的最大动作价值为 $6.0$，并取 $\gamma=0.9$、$\alpha=0.5$。图~\ref{fig:q_learning_update} 展示了这次更新。

\begin{figure}[htbp]
  \centering
  \IfFileExists{figures/q_learning_update.tex}{
    \resizebox{0.94\linewidth}{!}{
      \input{figures/q_learning_update.tex}
    }
  }{
    \fbox{
      \begin{minipage}[c][5.5cm][c]{0.94\linewidth}
        \centering
        Q-learning 动作价值更新过程\\
        \texttt{figures/q\_learning\_update.tex}
      \end{minipage}
    }
  }
  \caption{Q-learning 动作价值更新过程示意}
  \label{fig:q_learning_update}
\end{figure}

单步目标为
\begin{equation}
y_t=0+0.9\times6.0=5.4
\end{equation}
因此
\begin{equation}
Q(s_t,(8,8))
\leftarrow
2.0+0.5\times(5.4-2.0)
=3.7
\end{equation}
目标值高于原估计，说明这次观察到的后续局面比原先预期更好。一次更新只把估计向 $5.4$ 推近，并不会立刻把它改成目标值。反复采样让终局奖励逐步传回更早的状态，但传递速度和估计质量仍取决于数据覆盖、学习率与函数近似方式。

如果始终选择当前估计最高的动作，智能体可能永远收集不到其他动作的数据。常用的 $\varepsilon$-greedy 行为策略是
\begin{equation}
a_t
=
\begin{cases}
\text{从 $\mathcal{A}(s_t)$ 中随机选择动作}, & \text{概率为 }\varepsilon,\\
\displaystyle
\underset{a\in\mathcal{A}(s_t)}{\arg\max}Q(s_t,a),
& \text{概率为 }1-\varepsilon.
\end{cases}
\end{equation}
当 $\varepsilon=0.1$ 时，约 $10\%$ 的决策在合法动作中随机探索。训练后期常逐渐减小 $\varepsilon$，但不能只按固定日程机械衰减：如果重要状态仍未被覆盖，过早停止探索只会把当前误差固化下来。

\begin{importantnote}
Q-learning 的示例说明了价值如何从下一状态传回当前动作，并不意味着表格型 Q-learning 能够直接解决完整五子棋。即使不考虑棋子顺序，$15\times15$ 棋盘的合法局面数量也极其庞大，绝大多数状态不可能被重复访问到足够多次。
\end{importantnote}

小规模任务可以用表格保存每个状态—动作对的估计；大规模任务则要借助神经网络等函数近似器，让相似状态共享统计信息。深度 Q 网络属于后一类方法，但它还需要经验回放、目标网络等稳定化设计，本章不在这里展开。价值方法也更自然地适用于能够枚举或有效比较候选动作的场景。下一节换一个角度：不先为每个动作学习一个价值，再取最大值，而是直接调整动作的选择概率。

\subsection{基于策略优化的方法}

价值方法先回答“每个动作值多少”，再选择价值最高的动作。策略方法跳过这个中间决策规则，直接学习“在当前状态下，各动作应当以多大概率被选择”。这使它能够自然表示随机策略，也不必在连续动作空间中枚举所有候选动作。

设参数化策略为：
\begin{equation}
\pi_{\theta}(a_t\mid s_t)
\end{equation}
其中 $\theta$ 是策略参数。离散动作策略输出概率质量函数；连续动作策略通常输出高斯分布等概率分布的参数。两种情况下，训练期间都可以从分布中采样动作。

在五子棋中，策略网络接收棋盘状态，输出各位置的 logits。合法动作掩码排除已经落子的格点，归一化后得到空位上的概率分布。图~\ref{fig:gobang_policy_distribution} 给出一个简化示例。

% \begin{figure}[htbp]
%   \centering
%   \IfFileExists{figures/gobang_policy.tex}{
%     \resizebox{0.94\linewidth}{!}{
%       \input{figures/gobang_policy.tex}
%     }
%   }{
%     \fbox{
%       \begin{minipage}[c][6cm][c]{0.94\linewidth}
%         \centering
%         策略模型输出的五子棋落子概率分布\\
%         \texttt{figures/gobang\_policy.tex}
%       \end{minipage}
%     }
%   }
%   \caption{策略模型输出的五子棋落子概率分布}
%   \label{fig:gobang_policy_distribution}
% \end{figure}

图中四个候选位置的概率分别为 $0.15$、$0.40$、$0.25$ 和 $0.20$。位置 $B=(8,8)$ 最可能被选中，但并非必然被选中：
\begin{equation}
a_t
\sim
\pi_{\theta}(\cdot\mid s_t)
\end{equation}

这种随机性保留了探索机会。评估时是否继续采样要由评估目标决定；如果只取最大概率动作，测得的是确定性部署规则的表现，而不是训练时随机策略的完整表现。

策略应怎样利用对弈结果改变这些概率？设 $\pi_\theta$ 生成一条轨迹
\begin{equation}
\tau
=
(s_0,a_0,r_0,s_1,\ldots,a_{T-1},r_{T-1},s_T)
\end{equation}
其目标仍是最大化期望轨迹回报：
\begin{equation}
J(\theta)
=
\mathbb{E}_{\tau\sim p_{\theta}(\tau)}
\left[
R(\tau)
\right]
\end{equation}

利用对数导数技巧，可以把无法直接求和的轨迹期望转化为可用采样估计的策略梯度：
\begin{equation}
\nabla_{\theta}J(\theta)
=
\mathbb{E}_{\tau\sim p_{\theta}(\tau)}
\left[
\sum_{t=0}^{T-1}
G_t
\nabla_{\theta}
\log\pi_{\theta}(a_t\mid s_t)
\right]
\end{equation}
其中
\begin{equation}
G_t
=
\sum_{k=t}^{T-1}
\gamma^{k-t}r_k
\end{equation}

梯度中的 $\nabla_\theta\log\pi_\theta(a_t\mid s_t)$ 指向提高已采样动作对数概率的方向，$G_t$ 决定这个方向的权重和符号。这里不能简单说“回报较低就降低概率”：只要回报仍为正，原始 REINFORCE 更新仍可能提高该动作概率。要判断一次结果是好于还是差于当前局面的正常水平，需要引入基线。

直接以蒙特卡洛回报估计上述梯度的经典算法称为 REINFORCE。用当前策略采样 $N$ 条轨迹后，可最小化
\begin{equation}
\mathcal{L}_{\mathrm{PG}}(\theta)
=
-
\frac{1}{N}
\sum_{i=1}^{N}
\sum_{t=0}^{T_i-1}
G_t^{(i)}
\log
\pi_{\theta}
\left(
a_t^{(i)}\mid s_t^{(i)}
\right)
\end{equation}

负号把回报最大化写成损失最小化。REINFORCE 的优点是梯度估计在常见条件下无偏，代价是必须等到后续奖励出现才能计算回报，而且不同轨迹的结果可能相差很大。

仅依靠完整对局的最终结果更新策略，也会带来一些问题。五子棋的一局对弈通常包含多个动作，最终胜负是双方多次落子共同作用的结果。智能体可能在前期连续作出合理决策，却因为后期的一次失误输掉整局。如果将负回报直接作用于此前所有动作，一些原本合理的落子也会受到错误抑制。类似地，获胜对局中也可能包含效果较差的动作，但这些动作可能因为最终获胜而获得正向更新。

这就是时间上的信用分配问题。同一局面还可能因为对手行动和后续采样不同而得到相反结果，所以单条轨迹的 $G_t$ 是噪声很大的估计。增加样本能缓解波动，却不能让模型更早获得反馈。

为了减小回报波动对策略更新的影响，可以引入基线 $b(s_t)$，用动作回报与基线之间的差值代替原始回报：
\begin{equation}
\mathcal{L}_{\mathrm{PG}}(\theta)
=
-
\mathbb{E}
\left[
\sum_{t=0}^{T-1}
\left(
G_t-b(s_t)
\right)
\log\pi_{\theta}(a_t\mid s_t)
\right]
\end{equation}

只要基线不依赖当前采样动作，从策略梯度中减去它不会改变梯度的期望，却能降低方差。状态相关基线可以理解为当前局面的正常回报水平：更新关注的从此不再是“这次回报是否为正”，而是“这次结果是否好于在该局面下的通常表现”。

较为常用的状态相关基线是状态价值函数：
\begin{equation}
b(s_t)=V^{\pi}(s_t)
\end{equation}
此时，回报与基线之间的差值可以写为：
\begin{equation}
\widehat{A}_t
=
G_t-V^{\pi}(s_t)
\end{equation}
这给出优势函数 $A^\pi(s,a)=Q^\pi(s,a)-V^\pi(s)$ 的蒙特卡洛估计。正优势提高已采样动作的概率，负优势降低它；这种相对比较比回报的绝对正负更有意义。

仍以前文的五子棋局面为例。假设智能体在状态 $s_t$ 下选择了位置 $B=(8,8)$，当前选择概率为 $\pi_{\theta}(B\mid s_t)=0.40$。图~\ref{fig:policy_advantage_update} 展示了该动作在两种不同回报情况下的更新结果。

% \begin{figure}[htbp]
%   \centering
%   \IfFileExists{figures/policy_advantage_update.tex}{
%     \resizebox{0.96\linewidth}{!}{
%       \input{figures/policy_advantage_update.tex}
%     }
%   }{
%     \fbox{
%       \begin{minipage}[c][6.2cm][c]{0.96\linewidth}
%         \centering
%         回报与基线对落子概率更新的影响\\
%         \texttt{figures/policy\_advantage\_update.tex}
%       \end{minipage}
%     }
%   }
%   \caption{回报与基线对落子概率更新的影响}
%   \label{fig:policy_advantage_update}
% \end{figure}

在图~\ref{fig:policy_advantage_update} 的第一种情况下，动作 $B$ 获得的实际回报为 $8$，而当前状态的基线为 $6$，因此优势估计为：
\begin{equation}
\widehat{A}_t
=
8-6
=
2>0
\end{equation}
这一结果表明，位置 $B$ 的实际表现高于当前局面的平均水平，策略会提高该动作的选择概率。

在第二种情况下，动作 $B$ 获得的实际回报为 $3$，低于基线 $6$，因此有：
\begin{equation}
\widehat{A}_t
=
3-6
=
-3<0
\end{equation}
此时，策略会降低位置 $B$ 的选择概率。可见，优势估计关注的是动作表现与当前状态一般水平之间的差异，而不是回报的绝对大小。

\begin{importantnote}
原始 REINFORCE 用采样回报给动作加权，并不是简单执行“正奖励鼓励、低奖励惩罚”。引入状态价值基线后，$G_t-V^\pi(s_t)$ 才显式比较这次动作与当前状态正常水平之间的差异。基线降低方差，但不会自动解决长序列中的信用分配问题。
\end{importantnote}

如果不想等到整局结束，可以用一个学习得到的价值模型近似后续回报。这样会引入估计偏差，却能更及时地更新策略。Actor-Critic 正是沿着这一取舍建立的。

\subsection{Actor-Critic 框架}

REINFORCE 用实际采样到的后续回报评价动作。这个评价不依赖一个可能出错的价值模型，却来得晚、波动大。Actor-Critic 用学习得到的价值估计替代一部分尚未发生的回报，在更早更新和更小方差之间换取一定偏差。

框架包含两个可训练部分：Actor 是参数为 $\theta$ 的策略 $\pi_\theta(a\mid s)$，负责行动；Critic 是参数为 $\phi$ 的价值近似器 $V_\phi(s)$，负责预测当前策略下的期望回报。二者可以使用独立网络，也可以共享特征提取层，不能仅凭“两个角色”推断实现中一定存在两张完全独立的网络。

在五子棋任务中，一条样本的产生和使用过程如下。Actor 接收 $s_t$ 并输出
\begin{equation}
\pi_{\theta}(a_t\mid s_t)
\end{equation}
并采样 $a_t$。环境执行动作和约定范围内的对手回应，返回 $r_t$、$s_{t+1}$ 与终止标记。Critic 随后用相邻状态的价值构造训练目标。图~\ref{fig:actor_critic_framework} 展示了这条数据流。

% \begin{figure}[htbp]
%   \centering
%   \IfFileExists{figures/actor_critic_framework.tex}{
%     \resizebox{0.96\linewidth}{!}{
%       \input{figures/actor_critic_framework.tex}
%     }
%   }{
%     \fbox{
%       \begin{minipage}[c][6.2cm][c]{0.96\linewidth}
%         \centering
%         Actor-Critic 框架中的策略选择与价值评价过程\\
%         \texttt{figures/actor\_critic\_framework.tex}
%       \end{minipage}
%     }
%   }
%   \caption{Actor-Critic 框架中的策略选择与价值评价过程}
%   \label{fig:actor_critic_framework}
% \end{figure}

Actor 回答“下一步按什么分布行动”，Critic 回答“从当前状态继续执行该策略，预计能得到多少回报”。动作相对于当前状态平均水平的好坏由优势函数表示：
\begin{equation}
A^{\pi}(s_t,a_t)
=
Q^{\pi}(s_t,a_t)
-
V^{\pi}(s_t)
\end{equation}

正优势表示该动作优于当前策略在这个状态下的平均选择，负优势表示它更差。Actor 分别提高或降低相应动作的对数概率。

真实的 $Q^\pi(s_t,a_t)$ 未知时，可以用一步奖励加下一状态价值构造 TD 目标：
\begin{equation}
y_t=r_t+\gamma(1-d_t)V_{\bar\phi}(s_{t+1})
\end{equation}
其中 $d_t=1$ 表示任务在本次转移后自然终止，否则为 0。记号 $\bar\phi$ 强调计算目标时不通过下一状态价值反向传播梯度；实现中可以对这一项停止梯度，也可以使用单独维护的目标网络。TD 误差为
\begin{equation}
\delta_t
=
r_t+\gamma(1-d_t)V_{\bar\phi}(s_{t+1})-V_{\phi}(s_t)
\end{equation}

在最简单的单步 Actor-Critic 中，可用 $\delta_t$ 近似优势：
\begin{equation}
\widehat{A}_t
=
\delta_t
\end{equation}

仍以前文的棋盘为例。Actor 以 $0.40$ 的概率选择位置 $B=(8,8)$。该动作没有自然终止对局，所以 $d_t=0$，并设
\begin{equation}
r_t=0
\end{equation}
\begin{align}
V_{\phi}(s_t)&=4.0\\
V_{\phi}(s_{t+1})&=6.0
\end{align}
当 $\gamma=0.9$ 时，
\begin{equation}
\delta_t
=
0+0.9\times6.0-4.0
=
1.4
\end{equation}

图~\ref{fig:actor_critic_td_update} 给出了该评价信号对 Actor 和 Critic 的作用。

\begin{figure}[htbp]
  \centering
  \IfFileExists{figures/actor_critic_td_update.tex}{
    \resizebox{0.96\linewidth}{!}{
      \input{figures/actor_critic_td_update.tex}
    }
  }{
    \fbox{
      \begin{minipage}[c][6.5cm][c]{0.96\linewidth}
        \centering
        时序差分误差对 Actor 与 Critic 更新的作用\\
        \texttt{figures/actor\_critic\_td\_update.tex}
      \end{minipage}
    }
  }
  \caption{时序差分误差对 Actor 与 Critic 更新的作用}
  \label{fig:actor_critic_td_update}
\end{figure}

这个样本给出的 TD 目标是 $5.4$，高于 Critic 对 $s_t$ 的旧估计 $4.0$，所以 $\delta_t=1.4$。Actor 把它当作正优势，提高动作 $B$ 的对数概率；Critic 则把 $V_\phi(s_t)$ 向 $5.4$ 调整。需要注意，这只是当前 Critic 提供的学习信号，并不能证明动作 $B$ 客观上一定是好棋。

Actor 使用优势估计更新策略，其损失函数可以写为：
\begin{equation}
\mathcal{L}_{\mathrm{actor}}(\theta)
=
-
\mathbb{E}
\left[
\widehat{A}_t
\log
\pi_{\theta}(a_t\mid s_t)
\right]
\end{equation}

计算 Actor 梯度时，$\widehat A_t$ 应被视为固定目标，不让梯度通过优势估计回流到 Critic。正负优势决定更新方向，绝对值影响单个样本的权重。

Critic 的任务是使当前状态价值接近 TD 目标：
\begin{equation}
y_t=r_t+\gamma(1-d_t)V_{\bar\phi}(s_{t+1})
\end{equation}
在上述例子中：
\begin{equation}
y_t
=
0+0.9\times6.0
=
5.4
\end{equation}
Critic 原先对状态 $s_t$ 的估计为 $4.0$，而新的目标值为 $5.4$，因此需要适当提高 $V_{\phi}(s_t)$。Critic 可以使用平方误差进行训练：
\begin{equation}
\mathcal{L}_{\mathrm{critic}}(\phi)
=
\frac{1}{2}
\mathbb{E}
\left[
\left(
y_t-V_{\phi}(s_t)
\right)^2
\right]
\end{equation}

若下一状态的估计价值只有 $2.0$，则
\begin{equation}
V_{\phi}(s_t)=4.0,\qquad
V_{\phi}(s_{t+1})=2.0
\end{equation}
在即时奖励仍为 $0$、折扣因子为 $0.9$ 时，有：
\begin{equation}
\delta_t
=
0+0.9\times2.0-4.0
=
-2.2
\end{equation}
Actor 会降低该动作的概率，Critic 会把当前状态估计向 $1.8$ 调整。若落子直接结束对局，$d_t=1$，目标只剩最终奖励。时间上限造成的截断不一定等于自然终止：如果任务在时间上限之后本可继续，是否保留 bootstrap 项要根据环境语义处理。

Actor-Critic 框架中，Actor 负责输出动作概率并更新策略，Critic 负责估计状态价值。时序差分误差
  \[
  \delta_t=r_t+\gamma(1-d_t)V_{\bar\phi}(s_{t+1})-V_{\phi}(s_t)
  \]
可以作为单步优势估计，也给出 Critic 当前预测与 TD 目标的差异。它是带有函数近似误差的训练信号，不是动作质量的真实标签。

一条基本更新链可以概括为：Actor 采样动作，环境产生转移，Critic 构造 TD 目标并学习价值，Actor 使用停止梯度的优势信号更新策略。它比纯蒙特卡洛更新更及时、方差通常更小，代价是 Actor 会继承 Critic 的偏差。

二者的学习速度失衡时，这个问题尤其明显。Critic 学得太慢，优势长期带有系统误差；Actor 变化太快，Critic 刚拟合的数据分布已经过时；Critic 在有限样本上过拟合，也会向 Actor 提供过度自信的方向。后续的 PPO 仍采用 Actor-Critic 结构，它重点限制的是策略一次更新的幅度，而不是消除 Critic 的估计误差。

\section{强化学习的进阶优化算法}
Actor-Critic 给出了策略与价值函数协同更新的框架，实际训练还要面对两个具体限制。第一，策略一旦变化太快，旧策略采集的优势估计便不能可靠地描述新策略；第二，有些任务根本不允许当前策略不断进入环境试错。PPO 处理前一种更新尺度问题，离线强化学习处理后一种固定数据问题。二者解决的困难不同，不能因为都“减少训练风险”而混为一谈。

\subsection{近端策略优化方法}

Actor-Critic 有了评价动作的方向，却没有回答一次应当走多远。设旧策略在某个棋盘状态下以 $0.40$ 的概率选择位置 $B$。正优势说明这个概率应当提高，但从 $0.40$ 调到 $0.46$ 和一步调到 $0.80$ 完全不是同一件事。后者会显著改变后续访问的局面，而用于计算优势的样本仍来自概率为 $0.40$ 的旧策略。

单纯减小学习率不能直接解决这个问题。学习率约束参数移动的距离，同样大小的参数变化却可能在不同状态下造成完全不同的概率变化。近端策略优化（Proximal Policy Optimization, PPO）因此直接比较新旧策略对已采样动作给出的概率，并让过于激进的变化不再从代理目标中继续获益。

PPO 仍采用 Actor-Critic 结构。Critic 提供优势估计，主要变化发生在 Actor 的目标函数。“近端”描述的是希望新策略留在采样策略附近，并不是一个由裁剪严格保证的硬约束。

在每一轮 PPO 训练开始时，先固定当前策略，并将其记为旧策略：

\begin{equation}
\pi_{\theta_{\mathrm{old}}}(a_t\mid s_t)
\end{equation}

使用旧策略与环境交互后，可以得到一批状态、动作和奖励数据。更新 Actor 时，新策略与旧策略可能对同一动作给出不同的选择概率。为衡量这一变化，定义概率比：

\begin{equation}
\rho_t(\theta)
=
\frac{
\pi_{\theta}(a_t\mid s_t)
}{
\pi_{\theta_{\mathrm{old}}}(a_t\mid s_t)
}
\end{equation}

概率比反映新旧策略对已采样动作 $a_t$ 的偏好变化。$\rho_t(\theta)>1$ 表示概率提高，$\rho_t(\theta)<1$ 表示概率降低。它只比较样本中实际执行的动作，并不直接约束该状态下整个动作分布。

例如，旧策略选择位置 $B$ 的概率为：

\[
\pi_{\theta_{\mathrm{old}}}(B\mid s_t)=0.40
\]

如果新策略将该概率提高到 $0.48$，则有：

\begin{equation}
\rho_t(\theta)
=
\frac{0.48}{0.40}
=
1.20
\end{equation}

这表示新策略选择位置 $B$ 的概率是旧策略的 $1.20$ 倍。概率比比参数距离更直接地反映这条样本上的行为变化。

若暂时不限制策略变化，可以利用概率比与优势估计构造代理目标：

\begin{equation}
L^{\mathrm{PG}}(\theta)
=
\mathbb{E}
\left[
\rho_t(\theta)\widehat{A}_t
\right]
\end{equation}

其中，$\widehat{A}_t$ 表示 Critic 给出的优势估计。当 $\widehat{A}_t>0$ 时，动作 $a_t$ 的表现高于当前策略的一般水平，提高该动作的概率会增大代理目标；当 $\widehat{A}_t<0$ 时，该动作的表现低于一般水平，降低其选择概率会增大代理目标。

如果对同一批样本反复优化，Actor 可能持续增大正优势动作的概率，或持续减小负优势动作的概率。PPO 为概率比设置裁剪范围：

\[
[1-\epsilon,1+\epsilon]
\]

其中，$\epsilon$ 表示裁剪阈值。PPO 的裁剪代理目标写为：

\begin{equation}
L^{\mathrm{CLIP}}(\theta)
=
\mathbb{E}
\left[
\min
\left(
\rho_t(\theta)\widehat{A}_t,\,
\operatorname{clip}
\left(
\rho_t(\theta),
1-\epsilon,
1+\epsilon
\right)
\widehat{A}_t
\right)
\right]
\end{equation}

式中的 $\min$ 不能忽略：PPO 取原始项与裁剪项中更保守的一个。裁剪只在变化会继续改善代理目标的方向上截断收益，并不是把所有概率比强制投影到区间内。$\epsilon$ 是需要验证的超参数，不能脱离批量大小、更新轮数和学习率单独判断。

裁剪机制对正优势动作和负优势动作的作用可以通过五子棋中的概率变化进行说明。图~\ref{fig:ppo_clipping_mechanism} 给出了旧策略概率为 $0.40$、裁剪阈值为 $\epsilon=0.2$ 时的两种情况。

% \begin{figure}[htbp]
%   \centering
%   \IfFileExists{figures/ppo_clipping_mechanism.tex}{
%     \resizebox{0.96\linewidth}{!}{
%       \input{figures/ppo_clipping_mechanism.tex}
%     }
%   }{
%     \fbox{
%       \begin{minipage}[c][6.8cm][c]{0.96\linewidth}
%         \centering
%         PPO 裁剪机制对策略概率更新的限制\\
%         \texttt{figures/ppo\_clipping\_mechanism.tex}
%       \end{minipage}
%     }
%   }
%   \caption{PPO 裁剪机制对策略概率更新的限制}
%   \label{fig:ppo_clipping_mechanism}
% \end{figure}

在图~\ref{fig:ppo_clipping_mechanism} 中，裁剪区间为：

\[
[1-\epsilon,1+\epsilon]=[0.8,1.2]
\]

当位置 $B$ 的优势估计为正时，PPO 允许适当提高该动作的选择概率。若新策略将概率从 $0.40$ 提高到 $0.48$，概率比值为：

\[
\rho_t(\theta)=\frac{0.48}{0.40}=1.2
\]

该比值位于裁剪上界，概率增加仍然能够反映在代理目标中。若新策略进一步将概率提高到 $0.60$，概率比值变为：

\[
\rho_t(\theta)=\frac{0.60}{0.40}=1.5
\]

此时概率比值已经超过上界。对于正优势动作，超过上界的部分不会继续增加裁剪目标，因而优化过程不再强烈推动该动作概率继续增大。

当某一动作的优势估计为负时，PPO 会降低该动作的选择概率。如果新策略将概率从 $0.40$ 降低到 $0.32$，概率比值为：

\[
\rho_t(\theta)=\frac{0.32}{0.40}=0.8
\]

该比值位于裁剪下界。如果概率继续降低到 $0.20$，概率比值变为：

\[
\rho_t(\theta)=\frac{0.20}{0.40}=0.5
\]

对于负优势动作，低于裁剪下界的变化不会继续带来更多优化收益，策略因而缺少进一步大幅降低该动作概率的动力。

裁剪机制并不会将新策略的实际概率强制固定在某个区间内。它限制的是过大概率变化能够从代理目标中获得的收益。策略仍然可以发生变化，但当变化超过一定范围后，继续扩大变化不再受到目标函数的鼓励。

这种做法与信任域思想相近。信任域可以理解为旧策略附近的一定范围，策略更新尽量在这一范围内完成。PPO 不需要直接求解带有严格约束的复杂优化问题，而是通过裁剪代理目标近似控制更新幅度。在实际训练中，还可以监测新旧策略之间的 KL 散度。当二者差异超过设定范围时，可以提前结束当前批次的策略更新。

除了限制策略变化，PPO 还会在有限范围内重复使用同一批交互数据。它先用旧策略采集一批样本，再将数据划分为小批次，对 Actor 和 Critic 进行多轮训练。裁剪机制减弱了策略在这些更新中偏离采样策略过远的动机，但并不保证偏离一定不会发生。

图~\ref{fig:ppo_training_process} 展示了 PPO 一次训练迭代的主要过程。

% \begin{figure}[htbp]
%   \centering
%   \resizebox{0.94\linewidth}{!}{
%     \input{figures/ppo_training_process.tex}
%   }
%   \caption{PPO 的一次采样与更新过程}
%   \label{fig:ppo_training_process}
% \end{figure}

实际实现通常还把策略目标、价值误差和熵正则合并训练。价值损失用于拟合回报或优势计算所需的基线，熵项用于延缓策略过早变得确定。三个分量的尺度不同，因此应分别记录，而不能只观察相加后的总损失。若价值误差持续增大，单靠缩小 PPO 的裁剪范围通常不能解决问题；若近似 KL 很大或大量样本触发裁剪，则说明同一批数据上的更新可能过多。

\begin{importantnote}
  PPO 的裁剪目标限制的是过大策略变化继续获得的优化收益，并不把新策略严格约束在某个概率区间，也不保证每次更新后性能都提高。
\end{importantnote}

\subsection{离线强化学习方法}

在线强化学习可以用当前策略继续采样，离线强化学习则只使用预先收集并固定的数据集
\begin{equation}
\mathcal D=\{(s_i,a_i,r_i,s_i',d_i)\}_{i=1}^{N}
\end{equation}
其中 $d_i$ 记录转移是否因自然终止而结束。数据可能来自人工操作、旧策略或多个不同版本的系统。训练期间不能让目标策略进入环境补充它最缺少的样本，这是离线学习与经验回放之间的关键区别。

\begin{figure}[htbp]
  \centering
  \resizebox{0.92\linewidth}{!}{
    \input{figures/online_offline_rl.tex}
  }
  \caption{在线强化学习与离线强化学习的数据来源}
  \label{fig:online_offline_rl}
\end{figure}

困难不只在于数据有限，还在于学习得到的策略可能主动选择数据中罕见的动作。价值网络必须在这些位置外推，而最大化操作又偏好估计偏高的动作。一个偶然的高估会使策略更常选择该动作，但固定数据无法提供新的后果来纠正它，于是形成“分布偏移—价值高估—策略进一步偏移”的循环。

\begin{figure}[htbp]
  \centering
  \resizebox{0.92\linewidth}{!}{
    \input{figures/offline_rl_distribution_shift.tex}
  }
  \caption{离线强化学习中的分布偏移与价值高估}
  \label{fig:offline_rl_distribution_shift}
\end{figure}

不同离线算法以不同方式限制这种外推。BCQ 和 BEAR 约束目标策略不要轻易离开行为数据覆盖的动作范围；CQL 对缺少数据支持却被估计得很高的动作施加保守惩罚；IQL 主要在数据中的动作上学习价值关系，再用优势加权方式拟合策略。这些方法共同承认一个事实：没有记录的动作不一定差，但现有数据不足以证明它好。约束越强，外推风险通常越小，同时也越难发现数据之外的改进。

方法选择以前，先要弄清数据由哪些策略产生、关键状态和动作是否出现、奖励规则是否一致，以及终止与截断是否被正确记录。同一条轨迹不应拆散到训练集和验证集两边，否则相邻转移会造成泄漏。行为克隆提供了重要基线：如果复杂离线算法甚至不能稳定超过对历史动作的模仿，就很难把性能提升归因于长期价值学习。

离线指标也有边界。保留数据上的 Bellman 误差较低，只说明模型能拟合选定的自举目标，不能直接证明新策略有效。离线策略评估、模拟器测试和重要性采样各自依赖额外假设；目标策略离行为数据越远，结论通常越不可靠。高风险任务仍需经过受控测试和可回退的小范围部署。

\begin{importantnote}
  离线强化学习的核心问题不是样本总数，而是目标策略的选择是否有数据支持。重复很多次相似轨迹，并不能补上从未出现过的关键状态和动作。
\end{importantnote}

\section{强化学习的应用设计方法}

选定算法以前，任务定义已经决定模型能看到什么、能改变什么，以及什么结果会被当成成功。下面继续使用本章开头的五子棋设定，把这些决定落实为可以执行和评估的系统。

\subsection{任务边界与转移定义}

本章把智能体定义为执黑的一方，对手和规则属于环境。一次转移从黑方决策前开始：策略选择一个空位，环境检查合法性、落下黑子；若对局尚未结束，环境再执行白方回应，随后返回新的黑方决策局面。这样，数据中的 $(s_t,a_t,r_t,s_{t+1})$ 与算法使用的时间步保持一致。

如果改成黑白双方各自都是智能体，或者让同一个策略在每一个落子回合都被调用，状态中的行动方、奖励归属和轨迹结构都要随之改变。这并非实现细节，而是另一个任务定义。比较算法时应冻结环境版本、对手来源、开局分布和终止规则，否则性能差异无法只归因于算法。

最小规模实验很适合暴露边界错误。随机策略若能落到已占位置，问题在动作执行或掩码；相同局面得到互相矛盾的输入，通常意味着行动方或坐标编码不一致；训练回报上升而独立胜率不变，则应先核对奖励和评估目标。只有任务定义能够稳定地产生正确轨迹，扩大训练规模才有意义。

\subsection{状态表示与动作空间}

环境状态不一定等于策略能够观察到的信息。本章的棋盘完全可见，且策略只在黑方回合调用，因此可以令 $o_t=B_t$。若同一模型控制双方，还需加入当前行动方 $p_t$，否则同一棋盘在黑方和白方回合会得到相同输入。

棋盘可以用单个整数矩阵表示
\begin{equation}
B_t\in\{-1,0,1\}^{15\times15}
\end{equation}
也可以使用两个二值通道分别记录双方棋子
\begin{equation}
B_t\in\{0,1\}^{2\times15\times15}
\end{equation}
前者紧凑，适合作为最小基线；后者把类别含义分开，更便于卷积网络处理。表示方式不应包含对局结束后才能得到的信息，归一化统计量也只能由训练数据计算。

动作空间对应棋盘的 $225$ 个位置。策略网络可以为每个位置输出一个得分 $z_\theta(s_t,a)$，再用合法动作集合 $\mathcal A(s_t)$ 构造掩码后的分布
\begin{equation}
\pi_\theta(a\mid s_t)
=
\frac{\exp z_\theta(s_t,a)}
{\sum_{a'\in\mathcal A(s_t)}\exp z_\theta(s_t,a')}
\end{equation}
已经有棋子的格点由规则确定为非法，可以直接屏蔽；一手棋即使很差，只要符合规则就仍是合法动作。把棋力启发式写入掩码，会使策略失去发现其他解法的机会。

动作编码还要与环境坐标严格一致。把二维位置展平时，可以固定使用 $a=15i+j$，并用边角位置和往返转换做单元测试。训练阶段若允许随机策略直接产生未掩码动作，环境也应给出明确错误，而不是静默地改成另一个位置。

\subsection{奖励与约束}

在固定设定中，胜、负、平分别得到 $1$、$-1$ 和 $0$，非终止步骤奖励为 $0$。这种稀疏奖励与真实目标接近，却让早期落子的评价依赖整局结果。加入棋型分数等过程反馈能够降低学习难度，但也改变了算法实际优化的目标。


密集反馈缩短了动作与奖励之间的距离，也把设计者的棋型偏好写进了优化目标。若“形成活三”可重复计分，策略可能维持局部棋型来刷取奖励，而不是尽快获胜。过程奖励因此不是免费的训练加速器。

将任务奖励和多个辅助奖励组合时，可以写为：

\begin{equation}
r_t
=
r_t^{\mathrm{task}}
+
\sum_{i=1}^{K}
\lambda_i r_t^{(i)}
\end{equation}

其中 $r_t^{\mathrm{task}}$ 是核心奖励，$r_t^{(i)}$ 是辅助项。判断 $\lambda_i$ 不能只比较单步数值，还要估算每项在一个回合中的累计上限和出现频率。

奖励权重的大小还会影响不同目标之间的取舍。例如，机器人控制任务可能同时希望提高移动速度、降低能量消耗并保持动作平稳。总奖励可以由多个部分组成：

\begin{equation}
r_t
=
\lambda_1 r_t^{\mathrm{progress}}
-
\lambda_2 r_t^{\mathrm{energy}}
-
\lambda_3 r_t^{\mathrm{instability}}
\end{equation}

权重会改变策略的取舍：能耗惩罚过大可能让机器人静止，每步惩罚过大可能让处于劣势的棋手主动寻求快速失败。奖励尺度还影响价值目标和梯度数值。加入任何新项后，都要分别记录各项回报以及独立任务指标；总回报上升无法说明究竟是哪一项被优化。

约束是否进入奖励，取决于它能否被权衡。机械极限、非法落子和不可突破的安全边界应用掩码、动作范围或安全控制器保证；能耗、平稳性和延迟等允许折中的要求才适合写成软成本：

\begin{equation}
r_t'
=
r_t
-
\lambda c_t
\end{equation}

其中 $c_t$ 是成本，$\lambda$ 表示任务愿意为降低成本牺牲多少核心回报。若需求方无法接受任何违反，就不存在这个权衡，也不应仅靠把 $\lambda$ 调得很大来模拟硬约束。


巨大负奖励不能替代硬约束。随机策略仍可能先执行危险动作再收到惩罚，而真实系统可能没有承受这次探索的余地。

奖励信号还可能被智能体以设计者没有预料到的方式利用。智能体只会优化实际给出的奖励，而不会自动理解设计者的真实意图。当奖励函数存在漏洞时，策略可能获得很高回报，却没有完成预期任务。这种现象通常称为奖励投机或奖励漏洞。

例如，如果只根据连续棋子数量奖励五子棋智能体，策略可能偏好不断扩展已有棋型，而忽略对手已经形成的直接威胁。如果机器人任务只奖励向目标方向的瞬时速度，机器人可能通过剧烈摆动获得较高速度信号，却没有稳定到达目标位置。

奖励漏洞要靠行为审计和独立指标发现。五子棋至少应检查真实胜率、先后手表现、不同对手下的结果及典型失败棋局。如果辅助奖励上升而胜率下降，应回滚该奖励版本，而不是继续调高训练步数。

新奖励项加入后，应单独记录并做消融。除了比较总回报，还要检查辅助项在整回合尺度上是否压过核心奖励，以及高回报轨迹的行为是否符合预期。

奖励版本确定后，还要建立彼此隔离的训练、验证和测试流程。

\subsection{训练与评估过程设计}

训练、验证和测试承担不同职责，混用会让结果失去解释性。

\begin{table}[htbp]
  \centering
  \caption{训练、验证与最终测试的职责}
  \label{tab:train-validation-test}
  \begin{tabularx}{\linewidth}{>{\bfseries}p{2.3cm}p{4.3cm}X}
    \toprule
    阶段 & 可以做什么 & 不能做什么 \\
    \midrule
    训练 & 采集或读取训练数据、探索、更新参数、监控优化指标 & 用训练回报宣称最终任务性能 \\
    验证 & 比较检查点、选择超参数、触发早停、诊断失败 & 把反复调参后的验证结果当成无偏测试结果 \\
    最终测试 & 在冻结方案上报告预先定义的任务指标与波动 & 继续选模型、改奖励、调对手或回流测试数据 \\
    \bottomrule
  \end{tabularx}
\end{table}


采样量决定梯度方差和数据新鲜度。只用一局五子棋更新，胜负偶然性可能支配梯度；等待过多对局，策略又长期使用旧数据。PPO 对同一批样本更新过多轮还会使当前策略偏离采样策略。批量大小、更新轮数和学习率必须联合报告，并结合 KL、裁剪比例、价值误差和策略熵诊断。

探索规则属于实验配置。始终取最大概率动作容易固化早期偏好，随机性过强又会掩盖已经学到的能力。训练可以采样并调节熵，验证和测试则要预先规定使用采样策略还是确定性策略；两种评估回答的问题不同，不能在看到结果后择优报告。

五子棋训练还需要设计对手来源。如果智能体始终与一个固定的弱对手进行比赛，它可能很快取得较高胜率，但这种胜率并不代表策略具有普遍能力。智能体可能只是发现了该对手的某些固定漏洞。

自我对弈是一种常见的数据生成方式。当前策略同时控制对弈双方，使对手能力随着训练同步提高。这样可以不断产生与当前策略水平接近的比赛，减少固定对手过强或过弱的问题。

单纯使用最新策略进行自我对弈也存在局限。如果新策略暂时形成某一种棋路，双方可能反复围绕这一棋路训练，逐渐遗忘对旧策略有效的行为。为增加对手多样性，可以定期保存历史策略，并从不同版本中随机选择对手。还可以加入规则策略、随机策略和外部棋谱策略，使训练数据覆盖不同水平和不同风格的对局。


对手池中的角色应预先定义：随机策略检查基本能力，规则策略提供稳定锚点，历史策略检查遗忘，当前策略提供相近难度。训练对手可以参与数据生成，测试对手不得因为测试结果而被加入当前模型的训练循环。

五子棋验证应使用独立种子、开局和对手，并交换先后手。只报合并胜率会掩盖先手优势，因此还应分别报告先手、后手及各对手上的结果。

设评估总局数为 $N_{\mathrm{eval}}$，获胜局数为 $N_{\mathrm{win}}$，则评估胜率可以写为：

\begin{equation}
\widehat{p}_{\mathrm{win}}
=
\frac{
N_{\mathrm{win}}
}{
N_{\mathrm{eval}}
}
\end{equation}

训练指标用于解释优化过程：策略损失、价值误差、熵、KL、回合长度和各奖励分项都属于诊断信息。任务指标用于评价结果：五子棋的胜率、平局率和对手分项才回答棋力是否提高。两类曲线相关时也不能互相替代。

如果使用动作掩码，还应检查非法动作在掩码前是否获得过高得分。如果模型长期为大量非法位置分配较高原始得分，只是依靠掩码将其删除，说明策略网络对棋盘状态的理解可能仍然不足。掩码保证了动作合法，但不能代替模型学习合理的动作偏好。

网络初始化、环境随机性、动作采样和小批次顺序都会改变训练轨迹。应使用多个训练随机种子，在固定测试协议下报告均值与离散程度，不能从多次实验中只挑最好的一次。

检查点应包含策略、Critic、优化器、训练步数、归一化统计量和环境版本。验证集负责选择检查点和触发早停；最终测试只对冻结的候选方案运行。短期胜率波动不应触发即时早停，平滑窗口和耐心周期应在实验前设定。

在分析训练失败原因时，应区分任务设计问题和优化问题。如果策略损失剧烈变化、价值估计不断发散，问题可能来自学习率、更新频率或算法实现；如果训练过程稳定但策略始终选择无效行为，问题可能来自状态、动作或奖励设计；如果训练表现很好而独立评估较差，则需要检查训练场景是否过于单一。

训练集用于更新参数，验证集用于选择模型和调整设计，最终测试用于报告冻结方案。测试结果一旦反过来影响奖励、超参数、对手或检查点选择，这部分数据就已经参与了开发过程，需要重新建立未使用过的测试协议。

即使流程隔离正确，规模、训练波动和环境变化仍会带来新的困难。下一节从失败现象出发讨论这些问题。

% \section{强化学习的前沿方向}
% \subsection{多智能体强化学习}
% \subsection{面向样本重放的强化学习方法}
% \subsection{强化学习方法的稳定性改进}

\section{强化学习方法的挑战}

一条最终上升的训练曲线可能掩盖不同问题。有些重要局面从未进入训练数据，有些结果换一个随机种子便无法复现，还有些策略只适用于训练对手或当前奖励。下面从这些现象追查原因。

\subsection{面向大规模决策的挑战}

“任务规模大”可能指完全不同的瓶颈。高维状态首先造成覆盖困难，模型不得不对未见局面作出外推；动作候选太多时，计算和探索会分散在大量选择上；回合过长则拉开动作与结果的距离，使信用分配更加困难。扩大网络主要增加函数近似能力，并不会自动解决动作搜索或长时域问题。

继续以五子棋任务为例。一个 $15\times15$ 棋盘包含 $225$ 个格点。若暂时不考虑棋局规则，每个格点可能为空、黑子或白子，棋盘状态数量的上界为：

\begin{equation}
|\mathcal{S}|
\leq
3^{225}
\end{equation}

实际合法棋局的数量远小于这一上界，但仍然十分庞大。智能体不可能遍历全部棋盘状态，也无法为每个状态单独保存一个精确价值。训练只能利用有限对局学习不同棋型之间的共同规律，并将已学到的判断推广到没有出现过的局面。

这说明，表格形式的价值函数只适合状态数量较少的任务。在大规模问题中，通常需要使用神经网络近似价值函数或策略函数：

\begin{equation}
V_{\phi}(s)
\approx
V^{\pi}(s)
\end{equation}

\begin{equation}
\pi_{\theta}(a\mid s)
\approx
\pi(a\mid s)
\end{equation}

神经网络能够利用相似状态之间的共享结构。例如，五子棋中的连续三子、两端开放和对手威胁等局部棋型，可能出现在棋盘的不同位置。卷积结构可以提取这些局部特征，使模型不必分别记忆每一个具体棋盘。

不过，函数近似并没有消除状态空间过大的问题。模型只能根据训练数据学习状态之间的相似性。如果某类棋型在训练中很少出现，网络对这些局面的判断仍可能不准确。随着状态维度增加，覆盖具有代表性的环境情况需要更多数据，模型训练和存储成本也会随之上升。


除了状态空间，动作空间也会带来明显挑战。五子棋在空棋盘状态下最多有 $225$ 个候选落子位置，策略模型需要为这些位置分别给出动作得分。随着棋盘逐渐被填满，合法动作数量会减少，但训练早期仍需要在大量候选位置之间进行比较。

在推荐、调度和组合优化任务中，动作规模可能远大于五子棋。例如，推荐系统可能需要从大量候选物品中选择一个或多个结果，生产调度需要同时决定任务顺序、执行设备和开始时间。若将所有可能组合直接视为独立动作，动作数量会迅速超过模型能够逐一评价的范围。

假设每一步平均有 $b$ 个候选动作，一段决策过程包含 $H$ 步，则可能形成的动作序列数量约为：

\begin{equation}
N_{\mathrm{seq}}
\approx
b^H
\end{equation}

即使每一步的动作数量并不特别大，随着决策长度增加，完整动作序列仍会呈指数增长。智能体无法逐一尝试所有序列，只能根据有限经验判断哪些早期动作更可能带来较好的长期结果。

较大的动作空间还会增加探索难度。训练初期，策略对不同动作的判断较为接近，有限的交互次数会被分散到大量候选动作上。许多动作只能获得少量样本，价值估计因而难以稳定。

在五子棋中，真正值得重点考虑的落子位置通常集中在已有棋子附近、己方棋型延伸位置和对手威胁位置。如果策略在训练初期对所有空白格点进行近似均匀探索，大量对局会消耗在与当前棋局关系较小的位置上。

处理大规模动作空间的一种方法是先缩小候选范围，再由强化学习策略进行精细选择。候选集合可以由任务规则、启发式方法或单独训练的候选生成模型产生。设原始动作空间为 $\mathcal{A}$，候选生成过程得到状态相关集合：

\begin{equation}
\mathcal{A}_{\mathrm{cand}}(s_t)
\subseteq
\mathcal{A}
\end{equation}

策略只需要在候选集合中计算动作概率：

\begin{equation}
\pi_{\theta}
\left(
a\mid s_t,
a\in\mathcal{A}_{\mathrm{cand}}(s_t)
\right)
\end{equation}

这种方式可以显著降低单次决策的计算量，但候选生成过程本身也可能引入偏差。如果真正的最优动作被提前排除，后续策略无论如何训练都无法选择它。因此，候选集合既要足够小，又需要保留较高的有效动作覆盖率。


除了候选筛选，还可以将复杂动作拆分为多个较小决策。例如，在调度任务中，可以先选择待处理任务，再选择执行设备，最后确定开始时间。原本需要一次完成的组合动作被分解为多个阶段，每个阶段只处理其中一部分选择。

分解动作能够降低单次输出规模，但也会延长决策过程，并使后续选择依赖前面已经作出的决定。如果早期阶段选错了任务，后续阶段即使选择合理，也难以得到好的最终结果。因此，动作分解需要在单步决策难度和整体序列长度之间进行权衡。

分层强化学习采用相近思路，将长任务划分为不同层次。高层策略负责选择阶段目标，低层策略负责完成具体操作。例如，机器人导航可以先由高层策略选择需要到达的区域，再由低层策略控制移动方向和速度。这样可以减少高层策略需要处理的决策步数，也使低层策略能够重复用于不同目标。

长决策序列本身也是大规模任务的重要难点。在五子棋中，一步失误可能要经过多轮对弈后才表现为最终失败。随着回合长度增加，早期动作和最终奖励之间的距离越来越远，智能体更难判断每一步对结果的影响。

如果回合长度为 $T$，时刻 $t$ 的动作需要考虑之后的全部奖励：

\begin{equation}
G_t
=
\sum_{k=t}^{T-1}
\gamma^{k-t}r_k
\end{equation}

当 $T$ 较大时，回报会受到许多后续随机事件影响。同一个早期动作在不同轨迹中可能得到差异较大的回报，使价值估计和策略梯度具有较高方差。

折扣因子 $\gamma$ 可以降低远期奖励对当前动作的影响，但过小的折扣因子会使智能体过度关注短期收益。在五子棋中，如果策略只关注少数几步后的局面，可能会偏好立即形成局部棋型，却忽略更长时间后的防守风险。因此，长序列任务不能简单依靠减小折扣因子解决，还需要更准确的价值估计、合理的过程反馈或分层任务结构。

大规模问题还会提高环境交互成本。状态和动作覆盖不足时，通常需要采集更多轨迹；模型规模增加后，每次前向计算和参数更新也会消耗更多资源。在仿真环境中，可以通过并行运行多个环境提高数据采集速度：

\begin{equation}
\mathcal{D}
=
\bigcup_{i=1}^{M}
\mathcal{D}_i
\end{equation}

其中，$M$ 表示并行环境数量，$\mathcal{D}_i$ 表示第 $i$ 个环境采集的数据。

并行采样能够缩短收集相同数量数据所需的时间，但不能减少任务本身的样本需求。在真实机器人、工业设备和人工交互任务中，同时运行大量环境往往并不现实。此时可以利用历史数据、模拟环境或已有策略减少真实交互次数。

模拟环境能够低成本产生大量数据，但模拟过程与真实环境之间可能存在差异。若策略过度依赖模拟环境中特有的状态特征或动态规律，部署到真实系统后可能无法保持原有性能。因此，模拟训练通常还需要配合环境随机化、少量真实数据调整和独立测试。

在大规模任务中，课程学习也可以降低初始训练难度。课程学习先让智能体处理较简单的状态和任务，再逐渐增加环境复杂度。例如，五子棋训练可以先在较小棋盘或预设中期局面中学习基本进攻和防守，再逐步过渡到完整棋盘和完整对局。

课程设置必须保持前后任务之间的连续性。如果早期任务与最终任务差异过大，智能体在简单环境中学到的行为可能无法迁移到复杂环境。课程学习的作用是调整学习顺序，而不是替代对最终任务的训练。

这些方法都在改变困难的位置，而不是消灭困难。函数近似把表格存储变成分布外预测；候选筛选用较小计算量换取漏掉关键动作的风险；动作分解降低单步输出规模，却增加阶段依赖；模拟器扩大数据量，也引入模拟—现实偏差；课程学习降低早期难度，但课程断层会阻止能力迁移。

选择扩展方法时，要先找到实际瓶颈。候选动作方法需要报告候选召回率，函数近似需要检查分布外状态，动作分解则要评估早期错误能否恢复。并行采样能够缩短训练时间，却没有改变任务所需的样本数量。

规模问题解决后，仍需区分“同样条件能否复现”和“条件变化后是否有效”。

\subsection{强化学习训练的不稳定性和泛化性问题}

训练数据由策略产生，Critic 又用这些数据评价策略，于是形成反馈环：策略改变访问分布，访问分布改变价值估计，价值估计再改变策略。早期一次偶然胜局因此可能被后续自我对弈反复放大。

本节区分三个容易混用的概念。

\begin{table}[htbp]
  \centering
  \caption{稳定性、泛化性与鲁棒性的区别}
  \label{tab:stability-generalization-robustness}
  \begin{tabularx}{\linewidth}{>{\bfseries}p{2.5cm}p{4.2cm}X}
    \toprule
    性质 & 问题 & 检查方式 \\
    \midrule
    训练稳定性 & 相同配置重复训练，结果是否接近？训练中是否突然退化？ & 多随机种子、学习曲线、梯度和价值诊断 \\
    泛化性 & 规则不变但状态、初始条件或对手未见时，性能是否保持？ & 冻结策略，在预先划分的未见场景测试 \\
    鲁棒性 & 观测噪声、参数扰动或有限对抗变化下，性能是否平稳退化？ & 分级扰动和压力测试 \\
    \bottomrule
  \end{tabularx}
\end{table}

训练曲线平滑只提供第一类问题的部分证据，不能证明后两类性质。


图中的波动可以从四个位置诊断：样本是否过少而放大偶然轨迹；Actor 是否移动过快；Critic 是否在变化的数据上产生系统偏差；探索是否过早消失或长期过强。它们可能同时发生，不能仅凭“回报下降”判断超参数方向。

在 Actor-Critic 框架中，时序差分误差为：

\begin{equation}
\delta_t
=
r_t
+
\gamma V_{\phi}(s_{t+1})
-
V_{\phi}(s_t)
\end{equation}

TD 目标中的当前价值与下一状态价值都来自正在变化的 Critic，下一状态误差会通过 bootstrap 向前传播。Actor 过快会让 Critic 追逐不断移动的数据分布，Critic 在小批次上过拟合又会向 Actor 提供过度自信的优势。PPO 裁剪只缓解策略目标的一部分，不能修正错误价值目标。

诊断时应成组观察采样规模、近似 KL、裁剪比例、策略熵、解释方差、价值误差和梯度范数。单独把学习率调小可能只是让错误方向走得更慢。梯度裁剪可以拦住个别异常更新：

\begin{equation}
g
\leftarrow
g
\cdot
\min
\left(
1,
\frac{c}{\|g\|}
\right)
\end{equation}

其中，$g$ 表示当前梯度，$c$ 表示允许的最大梯度范数。梯度裁剪可以避免个别异常样本造成过大的参数更新，但不能解决价值目标错误或奖励设计不合理等根本问题。

多次重复实验也是判断训练稳定性的重要手段。设使用 $M$ 个随机种子得到的评估结果分别为 $J_1,J_2,\ldots,J_M$，可以计算平均性能：

\begin{equation}
\overline{J}
=
\frac{1}{M}
\sum_{i=1}^{M}
J_i
\end{equation}

同时还应报告不同实验之间的波动。如果一种方法只有少数实验能够取得较高性能，而多数实验表现较差，仅报告最好结果会高估方法的可靠性。

多随机种子均值与离散程度用于回答训练能否复现，仍不能回答未见场景是否有效。

在五子棋任务中，如果智能体始终与同一个规则对手进行训练，它可能学会专门利用该对手的固定弱点。当评估对手改变棋路时，策略的胜率可能迅速下降。此时，训练过程本身可能十分稳定，训练胜率也持续提高，但模型学习到的是针对单一对手的行为，而不是普遍适用的棋局判断能力。


泛化问题常与训练数据覆盖范围有关。如果训练过程中只出现少量初始状态，策略便可能记住这些状态下的有效动作，而没有学会更一般的决策规律。五子棋若始终从空棋盘开始，并且对手开局方式十分固定，模型可能只熟悉少数常见开局。

为了检查这种情况，可以在评估时使用不同的开局状态，例如随机放置少量合法棋子后开始比赛，或从历史棋谱的中间局面继续对弈。若策略只能在标准空棋盘开局中取得较好结果，说明其局面适应能力仍然有限。

环境中的无关特征也可能被策略错误利用。假设训练环境中某类棋盘显示方式总是与某个对手绑定，模型可能根据显示差异识别对手，而不是根据棋盘局面判断动作。当显示方式改变后，性能便会下降。

在机器人和自动驾驶任务中，类似问题可能来自光照、背景、传感器噪声或模拟环境中的固定纹理。策略可能依赖这些与任务目标无关的特征，导致环境外观稍有变化时无法正常决策。

提高泛化能力的一种方法是增加训练环境的多样性。五子棋可以使用不同水平、不同棋风和不同历史版本的策略组成对手池，使智能体不能只依赖某个对手的固定行为。训练中还可以随机交换先后手、改变初始棋盘状态，并加入不同类型的规则策略。

对于连续控制任务，可以在合理范围内随机改变物体质量、摩擦系数、传感器误差和环境布局。策略只有在多种条件下都取得较好回报，才更可能学到稳定的控制规律。这种做法通常称为环境随机化或域随机化。

状态数据增强也可以利用任务中的对称结构。五子棋棋盘经过旋转或翻转后，棋局的基本规则保持不变。训练时可以对同一棋盘进行旋转和镜像变换，并对动作位置作出相应调整，使模型接触更多等价局面。

设状态变换为 $T_s$，对应的动作变换为 $T_a$。如果变换不改变任务含义，则策略应当满足近似一致性：

\begin{equation}
\pi_{\theta}
\left(
T_a(a)\mid T_s(s)
\right)
\approx
\pi_{\theta}(a\mid s)
\end{equation}

这种一致性要求可以通过数据增强自然学习，也可以通过额外损失进行约束。它能够减少模型对棋盘绝对方向的依赖，提高对等价局面的利用效率。

模型结构也会影响泛化能力。与任务结构相匹配的网络通常更容易学习可复用特征。五子棋使用卷积网络能够在不同棋盘位置共享局部棋型检测参数，比为每个格点独立设置大量参数更有利于位置泛化。

正则化方法可以减少模型对训练数据的过度拟合，例如限制网络规模、使用权重衰减或在状态输入中加入适量噪声。不过，强化学习中的泛化问题不能只通过监督学习中的正则化解决，因为训练数据分布还取决于策略本身。更重要的是扩大训练场景和评估场景的覆盖范围。

评估变化需要分级，否则无法解释性能下降。第一层保持训练分布，检查任务是否学会；第二层保持规则不变，只更换合法开局、随机种子和未见对手，检查泛化；第三层加入观测噪声或合理参数扰动，检查鲁棒性。规则和目标都发生改变时，测到的是任务迁移，不应继续称为同一任务的泛化。

五子棋应分别测试训练对手、冻结的未见对手、合法中间局面、先后手和旋转翻转等价局面。失败类型决定修正方向：未见对手下降指向对手覆盖，中间局面下降指向状态覆盖，对称变换下降则说明模型没有学到规则本身具有的对称性。

稳定与泛化并不总是同步。单一训练分布可能让策略平滑地收敛到一个对手特化解；训练波动较大时，不同检查点又可能表现出不同的泛化结果。因此，多种子重复训练回答“能否复现”，未见场景测试回答“能否迁移到同一任务的新条件”，扰动测试回答“性能怎样退化”。一条平滑曲线不能代替后两种实验。

最后一种失败更隐蔽：训练可复现、未见场景也表现稳定，但策略优化的根本不是设计者真正关心的目标。

\subsection{强化学习方法的奖励构建问题}

前文讨论了怎样设置奖励，这里进一步看一种更棘手的情况：奖励已经可以计算，训练也能收敛，结果仍然可能不符合预期。训练回报上升而真实指标不变，往往说明可计算奖励只是一个不完整的代理目标；终局结果明确而早期动作更新混乱，问题来自反馈延迟；策略反复利用某条规则刷取高分，则属于奖励投机。任务同时追求速度、安全和能耗时，困难又不只是计算奖励，而是这些目标之间本来就需要人为取舍。

若可计算奖励为 $R$，算法求解的是

\begin{equation}
\pi_R^*
=
\underset{\pi}{\arg\max}
\;
\mathbb{E}_{\pi}
\left[
\sum_{t=0}^{T-1}
\gamma^t R(s_t,a_t,s_{t+1})
\right]
\end{equation}

这只定义了奖励最优策略 $\pi_R^*$。设计者真正关心的任务效用若记为 $U$，一般没有理由保证最大化 $R$ 同时最大化 $U$。五子棋胜率接近真实目标，但活三数量只是代理指标；暂时放弃局部棋型可能反而是长期好棋。代理指标越容易反复获取，错位越容易被优化放大。


当奖励只在任务结束时给出时，还会出现明显的信用分配问题。信用分配关注的是最终结果应当归因于此前哪些动作。五子棋智能体在一局对弈结束后得到了失败奖励，但这次失败可能来自最后一步没有阻挡，也可能来自更早之前破坏了自身棋型，还可能是连续多步选择共同造成的结果。

设一条轨迹包含动作序列：

\begin{equation}
a_0,a_1,\ldots,a_{T-1}
\end{equation}

如果只有终止时刻得到奖励 $r_{T-1}$，那么较早动作与最终奖励之间相隔较远。强化学习需要依靠回报和价值估计，将最终结果逐步传递到此前状态：

\begin{equation}
G_t
=
\sum_{k=t}^{T-1}
\gamma^{k-t}r_k
\end{equation}

当决策序列较长时，早期动作的回报会受到大量后续动作和环境变化影响。同一个动作在不同轨迹中可能获得完全不同的结果，使模型难以准确判断它对最终目标的贡献。


过程奖励缩短信号延迟，也把人工判断写进目标。为“形成活三”加分无法表达“此刻必须先防守”的局面依赖。更详细的规则未必更准确，只可能让策略更快学会设计者已经写出的启发式偏好。加入塑形奖励后必须重新检查最优行为是否发生变化。

奖励投机比一般的目标近似误差更具体：策略找到了一条规则允许、但设计者没有预料到的高回报路径。同一棋型被重复计分、机器人靠摆动刷取瞬时速度、推荐系统靠诱导性内容刷点击都属于这种情况。测试不能只验证“预期好行为能否得高分”，还要反向搜索“还有哪些行为能得到同样高分”。

复杂任务通常还包含多个目标。例如，一个控制系统既需要完成任务，又需要降低能耗、减少时间并保证安全。常见方法是将多个奖励项进行加权组合：

\begin{equation}
r_t
=
\sum_{i=1}^{K}
\lambda_i r_t^{(i)}
\end{equation}

其中 $\lambda_i$ 不是纯技术超参数，而是对速度、能耗、安全等目标作出的偏好声明。完成更快但能耗更高，与更慢但更安全的策略之间可能不存在唯一最优解。调权重不能替代需求方作出取舍，而且相同权重也不代表相同影响：各项的尺度和出现频率不同。多智能体协作还会叠加个体贡献分配问题，本章不在此展开。

难以手写奖励时，可以借助专家示范、逆强化学习或成对偏好。它们改变的是监督来源，不会消除目标错位：示范只覆盖专家到达的状态，评价者可能存在分歧，学习到的奖励模型仍会在训练分布外外推。策略持续优化这个模型时，同样可能发现模型漏洞。

无论奖励来自规则还是学习模型，都要保留与它不同源的评估信号。五子棋用独立对局胜率和失败棋局审计；控制任务可以使用任务完成率、安全事件和资源消耗。如果训练回报提高而这些指标不变，继续增加训练时间只会更充分地优化错误目标。

奖励审查应以轨迹为单位。分别抽取高回报、低回报、指标冲突和约束边界附近的轨迹，检查策略怎样获得每一项分数；再做奖励消融和权重敏感性实验，观察行为是否发生预期变化。只看奖励公式和均值曲线，无法发现策略实际利用的路径。

高回报只说明策略善于优化当前奖励。代理指标是否错位、反馈是否过度延迟、规则是否存在可利用路径，还需要通过独立指标、轨迹审计和消融实验判断。

几类挑战会相互放大：覆盖不足使奖励模型在数据外失真，训练波动改变策略利用奖励的方式，单一环境又让这些问题在训练指标中隐藏起来。因此，算法诊断、奖励审计和独立评估不能彼此替代。

\section{本章小结}

强化学习关注的是带有反馈和时间关联的序列决策：当前动作不仅产生即时结果，还会改变后续状态、数据分布和可选动作。从早期的控制、调度和博弈，到深度强化学习处理高维状态，再到大模型利用人类偏好或可验证结果进行后训练，应用对象不断变化，但核心问题始终是怎样用有限反馈改进长期行为。强化学习在大模型时代是连接已有能力与目标行为的重要工具，却不能替代预训练、监督微调和可靠评估。

五子棋把这一问题具体化：程序在终局才知道输赢，它怎样评价几十步以前的落子？回报把当前动作与未来结果联系起来，价值函数把这种联系写成可以递推估计的形式，策略梯度则直接改变动作概率。Actor-Critic 用正在学习的价值模型提供更及时的评价，因此减小了蒙特卡洛回报的部分波动，也把 Critic 的偏差带进了策略更新。PPO 试图让这种更新不要一次走得太远，但裁剪不是稳定性的保证。

当训练只能依靠历史数据时，问题从“怎样探索”变成“哪些判断有数据支持”。离线强化学习可以在行为数据之上改进策略，却无法现场验证陌生动作。进入具体任务后，算法只是整个系统的一部分：观测是否充分、动作能否执行、奖励是否代表真实目标，以及测试数据是否独立，都会改变最终结论。

因此，训练曲线上升之后仍要回到任务本身：策略究竟依据了哪些信息，数据怎样随策略改变，最后报告的指标是否真的对应任务目标。只说明实验采用了哪一种算法，还不足以回答这些问题。

训练回报高只说明当前奖励被有效优化；PPO 裁剪不保证训练稳定；离线数据量大不等于关键动作得到覆盖；输入更多信息也可能造成泄漏；密集奖励未必更接近真实目标；最后一个检查点未必优于验证集选出的检查点。这些反例指向同一个原则：算法输出只能在任务定义、数据来源和评估协议给定的范围内解释。

\section*{练习}

\begin{exercisebox}
  \begin{enumerate}
    \item \textbf{基础·价值递推} 设智能体从时刻 $t$ 开始获得的折扣回报为
    \[
    G_t=\sum_{k=t}^{T-1}\gamma^{k-t}r_k
    \]
    请先证明
    \[
    G_t=r_t+\gamma G_{t+1}
    \]
    再根据这一递推关系，写出策略 $\pi$ 下动作价值函数 $Q^\pi(s_t,a_t)$ 的贝尔曼期望方程，并说明最优动作价值函数中为什么会出现
    $\max_{a'}Q^*(s_{t+1},a')$。

    \item \textbf{基础·Actor-Critic} 在某一五子棋状态 $s_t$ 下，Actor 选择位置 $B$ 落子，且该转移没有自然终止。已知即时奖励为
    $r_t=0$，折扣因子为 $\gamma=0.9$，Critic 对落子前后状态的价值估计分别为
    \[
    V_\phi(s_t)=3.5,\qquad V_\phi(s_{t+1})=5.0
    \]
    计算时序差分目标 $y_t$ 和时序差分误差 $\delta_t$。根据计算结果，说明 Actor 应提高还是降低位置 $B$ 的选择概率，并说明 Critic 应如何调整对 $V_\phi(s_t)$ 的估计。

    \item \textbf{进阶·PPO 裁剪} 在一次 PPO 更新中，旧策略选择动作 $a_t$ 的概率为 $0.40$，裁剪阈值为
    $\epsilon=0.2$。分别考虑以下两种情况：
    \[
    \text{情况一：}\quad \widehat{A}_t=2,\qquad \pi_\theta(a_t\mid s_t)=0.56
    \]
    \[
    \text{情况二：}\quad \widehat{A}_t=-3,\qquad \pi_\theta(a_t\mid s_t)=0.20
    \]
    对每种情况计算概率比 $\rho_t(\theta)$、裁剪后的概率比，以及 PPO 裁剪目标中的两个候选项。判断最终采用哪一项，并解释裁剪机制如何限制策略发生过大变化。

    \item \textbf{进阶·离线强化学习} 判断下列说法是否正确，并简要说明理由：  
    “离线强化学习使用固定历史数据进行训练，因此只要数据量足够大，就可以像在线强化学习一样放心地选择数据集中从未出现过的动作。”

    回答时应说明行为策略与目标策略的区别，并结合分布偏移、外推误差和保守价值估计解释离线强化学习为什么需要对未知动作保持谨慎。

    \item \textbf{设计·任务建模} 现需要设计一个仓库移动机器人强化学习任务。机器人需要从起点到达指定货架，同时尽量缩短时间、降低能耗，并避免与障碍物发生碰撞。请完成以下设计：
    \begin{enumerate}
      \item 给出一种状态表示和动作空间
      \item 区分任务中的核心奖励、辅助奖励和惩罚项
      \item 判断“不能穿过障碍物”和“尽量减少能耗”分别应采用硬约束还是软约束
      \item 说明至少两个用于独立评估策略性能的指标
    \end{enumerate}
    并简要分析奖励权重设置不合理时，机器人可能出现的非预期行为。

    \item \textbf{设计·实验诊断} 某五子棋智能体在训练对手上的胜率达到 $90\%$，但更换为未参与训练的规则策略后，胜率下降到 $45\%$。同时，使用不同随机种子重复训练时，最终胜率波动较大。请分别从训练不稳定性和泛化性两个方面分析可能原因，并提出改进方案。

    回答中至少应涉及以下内容中的四项：数据采样规模、Actor 与 Critic 的更新速度、策略熵、对手池、随机开局、棋盘旋转与翻转增强、多随机种子评估、独立测试环境。
  \end{enumerate}
\end{exercisebox}

\end{document}
