最近在系统地重刷《强化学习的数学原理》(中文版),发现一个挺有意思的现象:这本书越往后公式越密集,贝尔曼方程、策略迭代、时序差分……每一章都能劝退一批人,但真正的分水岭其实在第一章。第一章叫“基本概念”,看起来只是把状态、动作、奖励、策略、回报这些名词过一遍,很多同学两周翻完就急着去推公式,结果学到马尔可夫决策过程时又回头补课。我前两遍就是这样,直到第三遍才意识到,第一章里每一个符号约定都在为后面的证明埋伏笔,跳过任何一句,后面看推导都像缺了一块地图。
这篇笔记不打算复述原书的全部内容,而是把我重读时觉得“值得停下来想想”的地方整理出来——包括我自己踩过的理解误区、几个容易混淆的符号,以及从这一章出发去看整本书的视角。适合正在读这本书、或者准备系统学强化学习数学基础的人参考。如果你只是想快速调包跑demo,这一章似乎用不上;但如果你想看懂论文里那些公式,第一章就是全部故事的起点。
1. 翻开这一章之前,先弄清楚强化学习到底在求解什么问题
1.1 它不是监督学习的变体,是另一类问题
很多人是从监督学习转过来的。监督学习给你一堆 (x, y) 对,目标是学一个从输入 x 到标签 y 的映射,模型好坏用误差来衡量。强化学习的输入输出关系没这么干净:没有成对标签,只有一串状态、动作、奖励,而且奖励往往延迟出现。你走了一步棋,可能二十步之后才知道这步好不好。所以强化学习的核心不是“拟合”,而是“在交互中做出一系列决策,使累积奖励最大”。这个区别必须在一开始想清楚,否则后面读到“回报”和“策略梯度”时,总忍不住往监督学习的框架里套。
我当年第一次接触这个区别时,是在一个简单的迷宫任务里悟到的。迷宫里每一步给一个很小的惩罚,终点给一个大奖励,监督学习根本没法直接学,因为没有“正确动作”的标签,只有最终一个延迟奖励信号。强化学习的做法,是通过反复试错去估计“哪个状态更接近终点”“哪个动作更可能通向大奖励”,这本质上是一个序贯决策问题,而不是一个输入输出映射问题。
1.2 智能体与环境的交互循环:从s0到r1的第一处细节
第一章一定会画那张经典图:智能体在时刻 t 观测到状态 s_t,选择动作 a_t,环境收到后回传奖励 r_{t+1} 和下一个状态 s_{t+1},循环往复。这里第一处容易看漏的细节是下标:奖励和时间差一个节拍。r_{t+1} 是 s_t 和 a_t 被执行完的结果,不是在 t 时刻凭空出现的。很多数学推导里,“当前步的奖励”到底写作 r_t 还是 r_{t+1},不同教材习惯不同,但语义都指“动作之后得到的那个标量”。我第一次推贝尔曼公式时,因为没注意这个错位,符号匹配了很久。
这个循环在实际代码里特别直观。常见环境库的交互接口里,通常就是执行一个动作后返回下一状态、奖励、是否结束这几个值,这个返回的奖励就对应书里的 r_{t+1},它由上一轮的 s_t 和 a_t 共同决定。看书时觉得抽象,跑一次交互循环,下标问题马上就通了。所以读第一章时,我建议手边备一个极简的环境交互示例,把 s_t、a_t、r_{t+1}、s_{t+1} 按顺序抄下来,比单纯看图印象深刻得多。
1.3 所以第一章的“基本概念”不是在凑页数
从“求解什么问题”的角度看,第一章其实就是把整个问题定义说清楚:用状态、动作、奖励描述交互,用策略描述智能体的行为方式,用回报描述优化目标。它没有一个特别吓人的公式,但所有后续章节都在为“如何找到最优策略”服务。我建议读第一章时时刻记着主线:问题定义 → 数学符号 → 优化目标 → 算法。别把注意力全放在背符号上,先看它解决什么问题。顺着这条线走,后面引入价值函数、贝尔曼方程时,你会有一种“早就在这里等着了”的感觉。
2. “状态-动作-奖励”三元组:整个强化学习的原材料
2.1 状态是什么:不是“画面”本身,而是可用于决策的信息集合
在入门阶段,最容易把“状态”理解成“眼睛看到的东西”。在第一章的抽象层面,状态是智能体对环境的某种刻画,是能帮助决策的全部信息。围棋的状态是一张 19×19 的盘面;机器人控制里状态可能是关节角度和角速度;推荐系统里状态可能是用户最近浏览序列的压缩特征。同一个问题也可以用不同粒度的状态来描述,状态定义得好不好,直接决定后面学起来难不难。第一章不讨论状态表征学习,但你要养成一个习惯:拿到一个强化学习问题,先问“状态里到底放了什么信息”。
这个问题的答案往往决定算法选型。比如状态是完整可观测的向量,可以直接用价值网络;状态如果是高维图像,就要考虑卷积结构;状态如果缺失关键信息,就得想清楚这个马尔可夫假设到底成不成立。第一章可能只给你一个抽象定义,但你在笔记本上写下的每一个状态定义,都会在后面转化为输入向量的维度、网络结构的选择,甚至训练效果的差异。
2.2 动作空间:离散和连续,直接影响后面算法的思路
动作的类型通常分成离散动作和连续动作两类。离散动作在游戏和棋类里常见,比如网格世界只能上下左右;连续动作出现在机器人控制、自动驾驶里,比如给油门踏板一个 0 到 1 之间的实数。这个区分为什么值得在第一章留意?因为后面几乎所有算法都在处理“动作空间长什么样”:离散空间可以用表格或策略网络输出分类概率;连续空间往往要输出高斯分布的均值和方差。
现在先理解到“动作就是智能体可以改变环境的手段”,后面看到策略表示时再回来对照。我自己的体会是,很多人学 DQN 系列算法时觉得自然,学到 DDPG、PPO 这些连续控制算法时突然开始懵,很大程度上是因为在第一章没有建立“动作空间类型”这个坐标系。如果你早早在笔记里写下“离散空间用分布、连续空间用参数化分布”,后面看论文时就不会被策略输出的形式搞晕。
2.3 奖励:一个标量,但语义很重
奖励是环境反馈给智能体的实时信号,定义为标量。强化学习几乎所有数学推导都建立在这个标量假设上。奖励不是智能体自己给的,是环境根据规则产生的。很多人会在这里产生一个误区:以为“奖励就是我设置的目标”。其实奖励更像是环境的局部反馈,一次动作给一次,而真正的目标通常是整个交互过程的累积回报。比如训练一个智能体走迷宫,你可以每前进一步给一个小的惩罚,到达终点给一个大奖励;但“走到终点”这件事本身不是奖励,而是由回报体现的长期目标。
关于奖励,第一章不会花太多篇幅讲设计技巧,但强烈建议先记住循环图里奖励的位置——它总是在动作之后出现。这个位置感会直接影响你对回报公式的理解。到后面你会看到稀疏奖励、奖励塑形、奖励黑客这些话题,都是基于这个基础位置展开的。现在能分清“单步奖励”和“累积回报”,已经比很多快进型选手强了。
2.4 一点个人体会:先别纠结“状态怎么编码”
学习第一章时,常见的问题是“如果状态是图像怎么办”“如果动作很多怎么办”。这些在后续章节各自有对应解法,第一章用数学符号统一描述它们就够了。我见过很多同学在第一章就卡在状态编码上,非要搞清楚卷积网络怎么处理图像,其实没必要。这章的任务是把三元组的关系刻在脑子里,而不是实现细节。你只需要知道:状态是一个集合里的元素,动作是一个集合里的元素,奖励是一个标量。这个抽象层级是整本书的地基。
3. 策略:这一章里最容易被低估的主角
3.1 π(a|s) 与 π(s,a):同一个策略的两种写法
第一章很快会引入策略 π。中文书里你会看到两种写法:π(a|s) 和 π(s,a)。前者明确表示“给定状态 s 时选择动作 a 的条件概率”,后者则经常被简写成“策略函数”。我第一次读的时候很困惑,为什么同一章里符号不统一。后来明白了,π(a|s) 强调概率语义,π(s,a) 是一种简化记号,不同教材习惯不同,读到论文时还会看到 π_θ 等形式。你要掌握的其实是一个意思:策略描述了智能体在每个状态下如何选择动作。代码里对应策略网络前向传播输出的一个概率分布,离散情形下就是 softmax 之后的结果。
如果你和我一样学过一点概率论,可以这样理解:π(a|s) 是一个条件概率分布,它对所有可能的 a 求和等于 1;π(s,a) 则是一个关于“状态-动作对”的函数记号,在某些上下文里也指联合分布。读的时候盯住上下文,不要被符号吓到。后面策略梯度定理里那个 log π(a|s) 的意义,提前用“条件概率”去读,会顺畅很多。
3.2 为什么策略必须是一个概率分布
刚学的时候我有个疑问:最优行为明明是确定的,为什么策略要用概率分布表示?原因至少有三个。第一,交互过程中存在随机性,环境的转移是随机的,所以策略保留概率才能处理不确定性。第二,强化学习需要探索:如果策略完全确定,智能体只会重复当前最优的动作,永远发现不了更优的选项;保持一定随机性,才能对未知区域进行采样。第三,在很多理论推导中,随机策略更自然地写进期望里,比如策略梯度定理中策略的对数概率会出现。用概率分布描述策略,是一种数学上省事、实现上也通用的做法。确定性策略可以看成概率分布的退化情况,某个动作概率为 1,其余为 0。
一个生活化的类比:策略像一份“在各种局面下的行动预案”,而不是一个“当前动作”。预案里每个局面下可能列了好几种应对方式,有的方式概率高,有的概率低。这份预案好不好,要看长期表现,而不是某一次执行的结果。这个类比帮我避开了很多困惑,比如为什么同一个策略可以走出不同的轨迹、为什么评价策略要用期望而不是单次结果。
3.3 强化学习的终极目标:找到最优策略 π*
第一章通常会给一个式子:找到一个策略 π,使得从任意初始状态出发的期望回报最大,这个最优策略记作 π*。这里有一个新手容易忽略的点:我们要优化的是一整个策略,而不是单个动作的好坏。单步动作的价值可以用立即奖励估计,但完整策略的价值要看长期回报。这就是为什么同一个状态 s,不同策略下的表现可以天差地别。第一章不会展开怎么求 π*,但“策略是最优化的对象”这层定位,值得在笔记开头就写下。
我还记得自己第一次学着去比较两个策略好坏,不是比较它们在某个状态下的动作,而是比较它们从同一个初始状态出发、各跑很多次之后得到的平均回报。这个视角贯穿整本书:价值函数、策略迭代、Q-learning,本质上都是在回答“当前策略好不好”和“能不能更好”。把策略当成主角,第一章就成功了一半。
4. 回报与折扣因子:为什么未来奖励要打折
4.1 先从直觉理解 G_t 这个求和公式
给定一条交互轨迹 s_t, a_t, r_{t+1}, s_{t+1}, a_{t+1}, r_{t+2}, ...,回报定义为从当前时刻开始的折扣累积奖励:G_t = r_{t+1} + γ r_{t+2} + γ² r_{t+3} + ...。直觉上很好理解:未来的奖励要打折扣,今天的奖励比明天的奖励更值钱。但为什么非要打折呢?教材给了一半理由:如果序列无限长,不打折的总和可能发散。不过更重要的是,折扣因子 γ 还表达了决策者的“远视程度”。
第一次看到这个公式时,我觉得它像金融里的现值计算:今天的钱比未来的钱更值钱,把未来现金流折现到现在。强化学习和它有相似之处,但也有本质区别:这里的折现不只是财务概念,它还决定了一个策略在数学上是否良定义、算法能否收敛。所以别把 γ 当成一个可有可无的系数,它是整个回报定义的组成部分。
4.2 γ=0 与 γ 接近 1:两个极端场景
γ=0 时,智能体只看当前一步的奖励 r_{t+1},后面的全部忽略。这时候策略可能会选“立刻收益最高”的动作,哪怕它导致后面灾难。γ 接近 1 时,未来二十步的奖励都接近全额计入,智能体会愿意为长期收益牺牲眼前利益。举个简单例子,一个迷宫场景里,入口右边有 1 块钱,左边要走很多步才发现 10 块钱,γ=0 的智能体永远选右边;γ=0.9 时,只要 10 块钱被折扣后仍大于 1,它就可能选左边。不需要精确计算,理解折扣因子在“眼前收益”和“长期收益”之间做权衡就够了。
这个权衡在实际调参时非常明显。回合制游戏里 γ 取 0.99 很常见,因为一个回合可能上百步,太小的折扣会让长远收益在几十步后几乎归零;一些单步决策问题里,γ 取 0 甚至都有道理。重要的是你得知道调 γ 不只是调一个数字,而是在声明“你希望智能体为多远以后的未来负责”。
4.3 折扣因子也是数学上的收敛开关
从数学角度看,如果每一步奖励都有上下界,比如 |r| ≤ R_max,那么 G_t 的每一项都被 γ 的幂次压制。只要 0 ≤ γ < 1,无限级数求和就是有界的,保证回报是一个良定义的实数。这个性质在后面推导贝尔曼期望方程、证明策略迭代收敛时都用得上。很多初学者觉得折扣因子只是个“拍脑袋调的超参数”,其实它在理论层面承担了让期望回报可定义、可求极限的角色。当然实践中 γ 也确实有调参的余地,不同问题里 0.9、0.99、0.999 都是常见取值,但你要知道它为什么存在,而不是只会填数字。
我当时自己动手算过一个小例子:γ=0.5,奖励序列是 1, 2, 3,算出来 G_1 = 1 + 0.5×2 + 0.25×3 = 3.75。看似简单,但这个计算把我从“看懂公式”推进到了“会用公式”。后面读贝尔曼公式的时候,我觉得自己比那些只背定义的同学多了一层直观感受,知道求和拆开之后会发生什么。
4.4 一个容易被忽略的角度:回报本身是随机变量
G_t 的每一项 r 都是随机变量,因为它们由环境转移的随机性决定。所以 G_t 也是一个随机变量,我们真正关心的其实是它的期望。第一章很多地方会在“回报”和“期望回报”之间来回切换,我建议读到后文时始终记住:目标函数通常是 E[G_t],而不是某一条轨迹上的回报。这个区分对理解价值函数尤其关键。
很多入门博客会用一条轨迹的回报来举例,有的同学就误以为强化学习就是“把一条轨迹上的奖励加起来”。但实际训练中,同一策略每次跑出来的轨迹都可能不同,必须用多轮交互的期望来衡量策略。第一章可能只在某个角落里提到“期望”两个字,但它是后面价值函数定义的核心。我现在每次读推导,只要看到 E 符号,就会条件反射地问一句:这个期望是对哪个分布取的?这个习惯就是从第一章的随机回报概念开始建立的。
5. 马尔可夫性质:一笔带过但绝不能放过的假设
5.1 “未来只取决于当前”的直觉与反直觉
第一章介绍马尔可夫性质通常就一句话:下一个状态只与当前状态和当前动作有关,与更早的历史无关。听起来像废话,其实是个很强的假设。棋类是很好的例子:围棋的当前局面已经完整包含了所有历史信息,不需要知道怎么走到这一步的。但现实问题不一定满足这个条件,比如金融交易里,完全用当前价格预测未来走势往往不够,历史波动率可能更重要。强化学习教材在入门阶段默认问题满足马尔可夫性质,当状态表示足够充分时,前序交互信息都浓缩在状态里了。如果状态信息不充分,就会出现部分可观测的情况,那要等 POMDP 的框架来解决,第一章不碰。
第一次读到“与更早的历史无关”时,我脑子里冒出来的反例是围棋里“打劫”的规则,需要记住之前的局面,似乎不是马尔可夫的。但后来想清楚了:如果把整个棋盘、当前提子顺序、甚至打劫禁着点都放进状态定义里,那么下一状态的确只依赖这个完整状态,历史信息被编码进了状态里。所以马尔可夫性质不是一个对错问题,而是一个“你的状态描述是否足够”的问题。
5.2 状态转移概率:模型的分水岭
一旦承认马尔可夫性质,环境的动力学就可以写成转移概率 P(s'|s,a):给定当前状态 s 和动作 a,下一个状态 s' 的概率分布。这是第一章里第一个明确点出“随机性在环境”的符号。很多人在学到 model-based 和 model-free 才回头理解这个概率,其实它一直在背景里。后面价值函数的定义中会出现 E_{s'~P(·|s,a)} 这种期望,含义就是对下一个状态按转移概率取平均。我建议第一遍读到这里时,停下来手写一个小例子:一个三状态格子,手动算一下某个策略下的转移概率分布,这比背诵定义管用得多。
这里有一个关键区分值得写下来:P 描述环境“怎么变”,π 描述智能体“怎么选”。两个都是概率分布,但作用对象完全不同。我自己最开始总把这俩搞混,后来用一个土办法记住:P 是环境的身体,π 是智能体的脑子。环境负责响应动作产生新状态,智能体负责根据状态挑动作。第一章里这两个符号一起出现时,整个交互循环就完整了。
5.3 为什么它“轻”到只有几句话,却贯穿全书
第一章几乎没有展开讲 MDP,因为那是第二章的内容。但马尔可夫性质这个假设,是后面一切推导的前提:贝尔曼方程里价值函数之所以能递归展开,就是因为它只需要当前状态就够;策略评估之所以能写成线性方程组,也是因为转移概率只依赖当前步。我看很多人在第二章第四章之间迷路,回来补课才发现,根子全在第一章那两段话里:状态转移概率的定义 + 期望回报的定义。这两个定义一结合,价值函数就呼之欲出。
所以我的建议是:读到这一节时,哪怕原书只给了两段话,也要自己多花点时间。试着写下一个三状态转移概率矩阵,再想一下“如果状态不够马尔可夫,我的估计会发生什么偏差”。这个思考过程不会白费,它会在你学到部分可观测问题和 RNN 策略时产生共鸣。第一章里最容易被跳过的地方,恰恰是全书最硬的骨架。
6. 第一章符号速查:我背完就不混了的记忆方法
6.1 一张符号表,后面推导全靠它校准
我现在把第一章出现最频繁的符号列举如下。这个表不是抄教材,是我自己的整理版本,后面几章每次推到公式不明晰时,我都用这个表快速校准。
| 符号 | 含义 | 常见范围/示例 |
|---|---|---|
| S | 状态集合 | 棋盘局面、传感器读数 |
| A | 动作集合 | 离散动作列表或连续区间 |
| r | 即时奖励 | 标量,可正可负 |
| P(s' | s,a) | 状态转移概率 |
| π(a | s) | 策略 |
| γ | 折扣因子 | [0,1),常见0.9、0.99 |
| G_t | 折扣回报 | 从t时刻开始的加权奖励和 |
这张表我会建议你贴在第一页笔记里。每次看推导卡住时,不要去网上搜答案,先回到这张表问自己:这个符号到底表示什么?它和前后符号的关系是什么?很多卡壳其实只是符号语义没校准。
6.2 最容易混淆的三组概念
第一组是奖励 r 和回报 G。前者是单次反馈,后者是累积折扣和;翻译到代码里,一个交互过程中产生的所有 reward 组成了一个数组,G 是对这个数组的加权求和结果。第二组是转移概率 P 和策略 π。刚才说过,P 描述环境怎么变,π 描述智能体怎么选。我的记忆法是“P 是环境的身体,π 是智能体的脑子”,两个概率分布不要混在一个公式里。第三组是状态 s_t 和观测 o_t。第一章默认 s_t 就是可用于决策的充分信息,观测可能是状态的一部分或一个映射;在部分可观测问题里两者严格不同。初学阶段知道有这层区别就够了。
这三组概念我都在不同阶段混淆过。尤其是奖励和回报——有一阵子写代码时,我把每一步的 r 直接当成目标函数优化,没有意识到目标函数应该是累积的期望回报,训练效果自然很差。后来回到第一章重新看定义,才意识到我在算法层搞错了优化对象。越是基础的区分,越值得反复确认。
6.3 三个实操建议,帮你把这一章学到位
第一,别死记符号,每个符号都用自己的话说一遍。比如 G_t“就是从现在起,把每一步奖励按 γ 的幂打折再相加”,说得通就说明真懂了。第二,手动推一个极简例子。设 γ=0.5,奖励序列是 1, 2, 3,自己算 G_1 等于多少。这种计算一分钟都不到,但许多初学者翻完一章没有亲手算过一个数,后来读论文到处卡。第三,把“智能体-环境交互”循环画在笔记本第一页,后面学策略迭代、Q-learning 时反复回来对照,你会有一种“原来全是在这个圈上做文章”的贯通感。
具体来说,我建议你画完交互循环后,在旁边写上三类问题:状态是什么、动作是什么、奖励是什么。每遇到一个新问题,都先按这个模板拆一遍。拆过十个问题之后,你会发现自己看论文案例时,直觉明显比之前准。第一章的内容不多,但在这一章建立的提问方式,会影响你读后续所有章节的速度。
最后说点个人感觉比较深的事。我重学第一章最大的收获,不是记住了符号,而是发现这本书的思路其实很连贯:它先用基本概念把问题定义清楚,再用回报把目标写清楚,再用马尔可夫性质把环境建模清楚,后面所有算法都在这三个基座上长出来。所以如果你正在读这一章,我建议别赶进度,把每一个定义都试着用自己的话翻译一遍,多想一步“这个概念在后面哪一步会被用到”。第一章慢一点,整本书反而会快很多。