Candlest 的博客

Back

白葱Blur image

0x00 前言#

0.1 我的动机#

距离最初接触强化学习已经过了半年。2025 年的 12 月,看完李沐的 《动手学深度学习》 以后,我便马不停蹄地开始看 《动手学强化学习》 。但是,那本参考书实在是过于简略晦涩,像其他中式教材一样,并不适合初学者阅读,而是适合对相关主题已有基本了解的人用来复习。

所以,结合最近半年我接触的强化学习实践,我希望把我入门强化学习的感受和路径记录下来。不但是检验我的知识边界,同时也是未来帮助更多人入门强化学习。

当然我也不是完全面向 0 基础的人,我们假定读者已经完整学完微积分、线代、概率统计,学完李沐的 《动手学深度学习》,有基础的编码能力和计算机系统常识(因为我要尝试以 kaiwudrl, verl, rlinf 为例,在这个总结综述里面穿插 ai infra 的内容)。

0.2 参考资料#

站在巨人的肩膀上。

我会把我用到的所有材料,以及怎么用都尝试梳理清楚。

0.2.1 书籍#

《强化学习的数学基础》#

《强化学习的数学基础》

《动手学强化学习》#

见:https://hrl.boyuai.com/。

0.3 内容规划#

大致分为四个 PART:

  1. MDP 与传统 RL 方法,以介绍数学概念为主,辅以简单场景介绍传统控制算法。
  2. POMDP 与 RL4MOBA,以 kaiwu deep RL 为背景,介绍 RL 在游戏场景上的铺开。
  3. RL4LLM,以训练 8b onerec(qwen2.5) 为例,探讨如何在 post-train 阶段使用 RL 提高 agentic 表现。(同时我也要表达我对 RLAIF 的隐忧:这正是 gpt-5.6 和 opus 5 现在的结症)
  4. RL 的未来,只介绍我感兴趣的两个部分: Robotic RL 和 Test-Time RL。同时也许会来一点 Diffusion RL, FlowMatching RL。

总之要完完全全写下来是不少的工作量。但是既然我对这个领域还没有祛魅,对它怀有虔诚——此刻的我相信它有改变世界的力量。

同时我也怀疑我是否有能力完整地讲这个故事讲述出来——我的高中物理老师李忱家曾经说过,「自己有一桶水,才能倒出半桶来匀给别人」。但愿我的储量足够。亦或者,我可以慢慢完善这个故事。

那么现在我们开始吧。

0x01 从马尔可夫链到马尔可夫决策过程#

1.1 马尔可夫链#

1.1.1 从一道高考题开始#

如果你像我一样,没有任何奥赛基础,那么你第一次接触这个名词应该是高中做高考往年题的时候——2019年的全国一卷高考压轴题正是马尔科夫链(Markov Chain),此后各地的一模二模的 Markov 题便如雨后春笋般长了出来。

对于我们今天要讨论的主题,最合适的例子应该是 2024 年武汉二调的填空题压轴

(武汉市 2024 届高三二月调考 14)“布朗运动”是指微小颗粒永不停息的无规则随机运动。

在如图所示的试验容器中,容器由三个仓组成,某粒子作布朗运动时每次会从所在仓的通道口中随机选择一个到达相邻仓或者容器外,一旦粒子到达容器外就会被外部捕获装置所捕获,此时试验结束。已知该粒子初始位置在 1 号仓,则试验结束时该粒子是从 1 号仓到达容器外的概率是?

武汉二调容器示意图

这道题里面一共有四种状态:{1,2,3,out}\{1,2,3,\text{out}\}。每个状态都有一个概率分布,表示从这个状态出发下一步会去哪个状态。整个问题可以用有向带权图表示:

P=[01302313013130120120001]P = \begin{bmatrix} 0 & \frac{1}{3} & 0 & \frac{2}{3} \\[0.2em] \frac{1}{3} & 0 & \frac{1}{3} & \frac{1}{3} \\[0.2em] 0 & \frac{1}{2} & 0 & \frac{1}{2} \\[0.2em] 0 & 0 & 0 & 1 \end{bmatrix}

1.1.2 解法一#

老师当时是这样教的:

设运动 nn 次后在 1 号仓的概率为 ana_n,2 号仓为 bnb_n,3 号仓为 cnc_n。 根据状态转移图,我们可以列出:

a0=1,b0=c0=0a_0=1,\qquad b_0=c_0=0 {an=13bn1bn=13an1+12cn1cn=13bn1\begin{cases} a_n = \frac{1}{3} b_{n-1} \\ b_n = \frac{1}{3} a_{n-1} + \frac{1}{2} c_{n-1} \\ c_n = \frac{1}{3} b_{n-1} \end{cases}

粒子在第 nn 步位于 1 号仓的概率是 ana_n,而在 1 号仓时有 23\tfrac23 的概率下一步就走出容器。

这些事件互不相交,可直接相加:

p1=n0an23=23n0anp_1 = \sum_{n \ge 0} a_n \cdot \tfrac23 = \tfrac23 \sum_{n \ge 0} a_n

于是只要求出 A=n0anA = \sum_{n\ge0} a_n

B=bnB = \sum b_nC=cnC = \sum c_n,把三条递推式两边都对 n1n \ge 1 求和:

{Aa0=13BBb0=13A+12CCc0=13BA=1513, B=613, C=213\begin{cases} A - a_0 = \tfrac13 B \\[2pt] B - b_0 = \tfrac13 A + \tfrac12 C \\[2pt] C - c_0 = \tfrac13 B \end{cases} \quad\Longrightarrow\quad A = \tfrac{15}{13},\ B = \tfrac{6}{13},\ C = \tfrac{2}{13} p1=231513=1013p_1 = \tfrac23 \cdot \tfrac{15}{13} = \tfrac{10}{13}

占用量#

A=n0an=1513>1A = \sum_{n\ge0} a_n = \tfrac{15}{13} > 1

AA 表示粒子在 1 号仓出现的期望次数,因此数值可以超过 1。

1{Xn=1}\mathbf{1}\{X_n=1\} 表示粒子在第 nn 步是否位于 1 号仓,那么

A=n0Pr(Xn=1)=E[n01{Xn=1}].A =\sum_{n\ge0}\Pr(X_n=1) =\mathbb E\left[\sum_{n\ge0}\mathbf{1}\{X_n=1\}\right].

同理,BBCC 分别表示粒子在 2、3 号仓出现的期望次数。这三个量从粒子的初始位置出发,记录概率在各个状态上的累计结果。后面我们会把这一组量称为占用量

1.1.3 解法二#

当时知乎上还有一个做法:

pip_i = 从 ii 号仓出发、最终从 1 号仓离开容器的概率,然后列方程组:

pi=jPijpjp_i = \sum_j P_{ij}\, p_j

最后解方程:

{p1=231+13p2p2=13p1+13p3+130p3=12p2+120p1=1013, p2=413, p3=213\begin{cases} p_1 = \tfrac23 \cdot 1 + \tfrac13 p_2 \\[2pt] p_2 = \tfrac13 p_1 + \tfrac13 p_3 + \tfrac13 \cdot 0 \\[2pt] p_3 = \tfrac12 p_2 + \tfrac12 \cdot 0 \end{cases} \quad\Longrightarrow\quad p_1 = \tfrac{10}{13},\ p_2 = \tfrac{4}{13},\ p_3 = \tfrac{2}{13}

终止转移#

但是高中的我不能理解的是,明明还有一条方程:

pout=jPout,jpj=1poutp_{\text{out}} = \sum_j P_{\text{out},j}\,p_j = 1\cdot p_{\text{out}}

为什么 poutp_{\text{out}}p1p_1 表达式被 1 替代了,而在 p2p_2p3p_3 的表达式中被 0 替代了?

如果只问粒子从 out 出发以后是否还会从 1 号仓离开,可以约定 pout=0p_{\text{out}}=0。但是,一个统一的 poutp_{\text{out}} 无法记录粒子从哪个仓进入 outp1p_1 表达式中的 1,以及 p2p_2p3p_3 表达式中的 0,取决于进入 out 之前所在的仓。

pip_i 展开:

pi=jPijP(最终从 1 号仓离开    第一步走 ij)p_i = \sum_j P_{ij}\cdot P\big(\text{最终从 1 号仓离开} \;\big|\; \text{第一步走 } i \to j\big)

  • j{1,2,3}j \in \{1,2,3\}:粒子还在容器内,剩下的事情等价于从 jj 重新开始,条件概率就是 pjp_j
  • j=outj = \text{out}:实验在这一步结束。是否算「从 1 号仓离开」完全由出发的那个仓 ii 决定,条件概率是 1{i=1}\mathbf{1}\{i = 1\}

于是

  pi=joutPijpj  +  Pi,out1{i=1}  \;p_i = \sum_{j \ne \text{out}} P_{ij}\, p_j \;+\; P_{i,\,\text{out}} \cdot \mathbf{1}\{i = 1\}\;

能够解决当时的疑惑。

这段分类讨论说明,目标事件取决于进入 out 的转移,而合并后的 out 状态没有记录转移的起点。

1.2 马尔可夫奖励过程#

1.2.1 解法三:为转移赋值#

接下来我们换一种建模方式:

规定「从 1 号仓走到容器外」这一步产生 11 分,其余所有转移产生 00 分,然后问:从 ii 号仓出发,期望总得分是多少?

1.2.2 为什么概率等于期望总得分#

我们定义「奖励」:

r(i,j)=1{i=1, j=out},G=t=0τ1r(Xt,Xt+1).r(i,j)=\mathbf 1\{i=1,\ j=\text{out}\}, \qquad G=\sum_{t=0}^{ \tau -1}r(X_t,X_{t+1}).

在一次粒子的轨迹中:

G={1,粒子最终从 1 号仓离开,0,粒子从其他仓离开.G= \begin{cases} 1,& \text{粒子最终从 1 号仓离开} ,\\ 0,& \text{粒子从其他仓离开} . \end{cases}

所以定义价值函数(从 ii 号仓出发,期望总得分):

V(i)=Ei[G]=Pri(最终从 1 号仓离开).V(i)=\mathbb E_i[G] =\Pr_i(\text{最终从 1 号仓离开}).

1.2.3 用下一步的价值计算当前价值#

V(i)=jPij[r(i,j)+V(j)],V(out)=0V(i) = \sum_j P_{ij}\Big[\,r(i,j) + V(j)\,\Big],\qquad V(\text{out}) = 0

展开 i=1i = 1

V(1)=23[1r(1,out)+V(out)]+13[0+V(2)]=23+13V(2)V(1) = \tfrac23\big[\underbrace{1}_{r(1,\,\text{out})} + V(\text{out})\big] + \tfrac13\big[0 + V(2)\big] = \tfrac23 + \tfrac13 V(2)

而展开 i=2,i=3i = 2, i = 3,就不需要再讨论 poutp_{\text{out}} 了:

V(2)=13[0r(2,1)+V(1)]+13[0r(2,3)+V(3)]+13[0r(2,out)+V(out)]=13V(1)+13V(3)V(2) = \tfrac13\big[\underbrace{0}_{r(2,\,1)} + V(1)\big] + \tfrac13\big[\underbrace{0}_{r(2,\,3)} + V(3)\big] + \tfrac13\big[\underbrace{0}_{r(2,\,\text{out})} + V(\text{out})\big] = \tfrac13 V(1) + \tfrac13 V(3) V(3)=12[0r(3,2)+V(2)]+12[0r(3,out)+V(out)]=12V(2)V(3) = \tfrac12\big[\underbrace{0}_{r(3,\,2)} + V(2)\big] + \tfrac12\big[\underbrace{0}_{r(3,\,\text{out})} + V(\text{out})\big] = \tfrac12 V(2)

联立三条方程,我们就可以在不用分类讨论的情况下得到:

V(1)=1013,V(2)=413,V(3)=213.V(1)=\tfrac{10}{13},\qquad V(2)=\tfrac{4}{13},\qquad V(3)=\tfrac{2}{13}.

1.2.4 刚才写出的就是贝尔曼方程#

r(i,j)r(i,j) 这种「为转移赋值」的方式正是强化学习常用的建模方式。马尔可夫链加入奖励以后,就得到了马尔可夫奖励过程(Markov Reward Process, MRP)。

刚才使用的递推关系

V(i)=jPij[r(i,j)+V(j)],V(out)=0V(i)=\sum_j P_{ij}\left[r(i,j)+V(j)\right],\quad V(\text{out})=0

表达了同一件事:当前状态的价值,等于一步奖励与下一状态价值之和的期望。这就是当前马尔可夫奖励过程的贝尔曼方程。这道题在有限步内以概率 1 进入终止状态,因此这里可以取折扣因子 γ=1\gamma=1

在一般的马尔可夫奖励过程中,从第 tt 步开始的回报定义为

Gt=k0γkRt+k+1,0γ1,G_t=\sum_{k\ge0}\gamma^k R_{t+k+1},\qquad 0\le\gamma\le1,

其中 γ\gamma 称为折扣因子。价值函数 V(s)=E[GtSt=s]V(s)=\mathbb E[G_t\mid S_t=s] 满足更一般的贝尔曼方程:

V(s)=sP(ss)[r(s,s)+γV(s)].V(s)=\sum_{s'}P(s'\mid s)\left[r(s,s')+\gamma V(s')\right].

1.2.5 回头看解法一和解法三#

解法一算出的 A,B,CA,B,C,表示粒子在各个仓出现的期望次数。解法三算出的 V(1),V(2),V(3)V(1),V(2),V(3),表示从各个仓出发的期望总得分。

在这道题中,只有位于 1 号仓时可能在下一步得到分数,单步期望得分为 23\tfrac23。因此,解法一从状态的期望访问次数出发:

151323+6130+2130=1013.\tfrac{15}{13}\cdot\tfrac23 +\tfrac6{13}\cdot0 +\tfrac2{13}\cdot0 =\tfrac{10}{13}.

解法三从初始状态的价值出发:

1V(1)+0V(2)+0V(3)=1013.1\cdot V(1)+0\cdot V(2)+0\cdot V(3)=\tfrac{10}{13}.

前一种计算从初始位置沿时间向前累计各状态的访问次数,后一种计算从每个状态出发的未来价值。这里先记录这种前向与后向的配对;后面引入占用度量时,我们再给出一般形式。

1.3 马尔可夫决策过程#

1.3.1 动作改变转移概率#

原题中的粒子只能按照给定的转移矩阵 PP 移动。现在假设粒子在每个仓可以选择不同的运动方式,不同选择会产生不同的转移概率。我们把选择记为动作 aa,转移概率就从 P(ss)P(s'\mid s) 变成了

P(ss,a).P(s'\mid s,a).

状态、动作、转移概率、奖励共同构成了马尔可夫决策过程(Markov Decision Process, MDP)。

1.3.2 策略决定怎样选择动作#

策略 π(as)\pi(a\mid s) 表示处于状态 ss 时选择动作 aa 的概率。固定一个策略以后,动作会按照 π\pi 给出的概率被选中,于是得到策略 π\pi 下的状态转移概率:

Pπ(ss)=aπ(as)P(ss,a).P^\pi(s'\mid s)=\sum_a\pi(a\mid s)P(s'\mid s,a).

因此,固定策略会把一个 MDP 转换成一个 MRP。我们可以继续使用刚才的价值函数和贝尔曼方程。

1.3.3 贝尔曼期望方程#

给定策略 π\pi,状态价值函数记为 Vπ(s)V^\pi(s)。把策略对动作的选择和环境对下一状态的转移都展开,可以得到:

Vπ(s)=aπ(as)sP(ss,a)[r(s,a,s)+γVπ(s)].V^\pi(s) =\sum_a\pi(a\mid s) \sum_{s'}P(s'\mid s,a) \left[r(s,a,s')+\gamma V^\pi(s')\right].

这个方程在给定策略下对动作和下一状态求期望,因此称为贝尔曼期望方程。它回答的是:如果以后一直按照策略 π\pi 行动,从状态 ss 出发能获得多少期望回报?

1.4 贝尔曼最优方程#

1.4.1 哪个策略能够得到更高回报#

贝尔曼期望方程用于评估一个已经给定的策略。强化学习还需要在可选策略中找到期望回报最高的策略。定义最优价值函数:

V(s)=maxπVπ(s).V^*(s)=\max_\pi V^\pi(s).

1.4.2 贝尔曼最优方程#

在状态 ss 下,可以比较每个动作带来的一步奖励与后续最优价值。于是

V(s)=maxasP(ss,a)[r(s,a,s)+γV(s)].V^*(s) =\max_a \sum_{s'}P(s'\mid s,a) \left[r(s,a,s')+\gamma V^*(s')\right].

这就是贝尔曼最优方程。贝尔曼期望方程在固定策略下对动作求期望;贝尔曼最优方程在可选动作中取最大值。

1.4.3 策略评估与策略改进#

给定策略以后,可以用贝尔曼期望方程计算 VπV^\pi,这个过程称为策略评估。根据当前价值选择回报更高的动作,可以得到改进后的策略,这个过程称为策略改进。在有限 MDP 中,重复进行策略评估和策略改进,最终得到满足贝尔曼最优方程的价值函数与策略。

RL 入土(一):数理基础篇
https://blog.candlest.cc/blog/ai/rl/rl-1
Author Candlest
Published at 2026年8月22日