简介:西湖大学赵世钰教授的《强化学习的数学原理》英文书稿,面向有一定数学基础、希望从零系统理解强化学习本质的读者。全书从网格世界等大量例子入手,依次讲解MDP、状态值与贝尔曼方程、最优贝尔曼方程、值迭代与策略迭代、蒙特卡洛方法、随机近似、时序差分、值函数近似、策略梯度与Actor-Critic方法,并以附录补充序列收敛性,内容循序渐进,强调数学推导与直观解释的结合。资源为单个PDF文件,压缩包约18.9MB,适合下载后离线阅读或配合笔记学习。当前已有845人学习/下载。通过这本书,读者既能获得从基本概念到前沿算法的完整理论框架,也能通过书中的动机示例和详细推导掌握强化学习背后的数学原理,为后续算法设计与论文研读打下坚实基础。
1. 先别被“数学”两个字吓跑:这本书到底在讲什么
很多人第一次搜“强化学习”的时候,要么被一堆算法缩写劝退,要么被“数学原理”四个字劝退。但强化学习的核心思想其实特别朴素:让智能体像小朋友学走路一样,靠试错和奖励找到好行为。这本书是一份英文书稿,来自某高校一位长期给研究生讲授强化学习的导师,目标是把强化学习中的数学讲清楚,同时不让数学难度失控。它专门服务零基础的人:先用一个格子棋盘把所有概念串起来,再把隐藏在算法背后的公式一个个拆开。它适合那些不满足于“调到能跑就行”、想知道算法为什么有用的人。如果你只打算复制代码交差,这本书可能有点慢;但如果你愿意从第一个例子开始手算,它会给你一条很踏实的入门路径。
2. 为什么非要学数学:从只会调包到能自己改算法
2.1 一个新手最常见的卡点:模型不收敛,只能瞎试参数
很多人觉得强化学习就是“调包加调参”。代码很好拿,网上随便一搜就有现成的实现,但一旦训练不收敛,就进入了“玄学”阶段。我见过不少新手在一个项目里连续调了几十组参数,运气好跑通了,运气不好就卡死,最后也不知道是奖励设错了,还是学习率太大了。
懂数学的人会怎么做?他会先检查奖励设计、折扣因子、策略改进方式这几件事。数学不是拿来考试的,是拿来在翻车的时候定位问题的。强化学习和普通机器学习有一个本质区别:普通机器学习有“标准答案”数据集,模型学不好可以翻着标签对比;强化学习没有标准答案,你只能告诉智能体什么行为给什么奖励,剩下的全靠它自己摸索。这时候如果不理解价值、策略、回报这些概念之间的关系,调试就完全是盲人摸象。
我第一次跑强化学习代码时,就经历了这种痛苦。训练曲线一会儿上一会儿下,网上说“多调几个随机种子就好”,我换了五个种子还是不行。后来才意识到问题出在奖励函数上:我给智能体的奖励太稀疏,它探索了很久都摸不到一次正向反馈,自然学不出东西。这个结论不是靠运气想出来的,而是当我理解了“回报是折扣累积奖励”之后,自己倒推出来的。数学不是门槛,而是下水道里的地图。
2.2 这本书的数学有多深:只需要概率、线代和一点耐心
正因为有上面这个痛点,这本书才值得认真读。先说门槛。作者在序言里说得很清楚:这本书不要求你有强化学习背景,因为它会从最基础的概念开始讲,但要求你具备一点概率论和线性代数的知识。如果你已经忘了,也不用慌,附录里有概率论基础、序列收敛、梯度下降预备知识。换句话说,作者把你可能缺的数学工具都打包好放在了书后面。
更贴心的是,整本书的数学深度被刻意控制在“够用”的程度。它会告诉你某个定理为什么成立、在什么条件下成立,但不会把读者拖进取测度论这种纯数学领域。书中还有一些灰色框的内容,属于选读材料,第一遍完全可以直接跳过。这一点对新手太重要了,因为我见过太多人被数学书里“顺手证个引理”的写法劝退,而这本不会。
我第一次翻开这本书时,最怕的是“一个陌生符号突然出现”。但这本书的符号是一步步引入的,而且全书例子都发生在同一个网格世界上。你会先看到一个概念在一个小棋盘上出现,然后再推广成公式。这种“先具体、后抽象”的顺序,对新手来说非常友好。很多视频课恰恰相反,先给你抽象定义,再举例子,结果新手第一步就倒下了。另外提一句,书稿是纯英文的,但句子都不长,术语非常统一。你可以一边读原文一边写中文笔记,几章之后就会发现,看英文公式反而比看翻译更不容易产生歧义。
2.3 全书就一条主线:10章是怎么排出来的
这本书一共10章加附录,看起来厚,其实主线极其清晰。前4章是有模型的情况:假设你已知环境的转移概率,可以直接用数学推导出最优策略。从第5章开始,假设你不知道环境,只能靠智能体自己去采样、去试错,于是出现了蒙特卡洛、时间差分等方法。第8章之后,把“查表”换成了“函数”,为深度强化学习铺路;第9章和第10章则转向策略梯度这类直接优化策略本身的方法。
整本书的路线其实可以概括成三对关键词:有模型到无模型,表格到函数,基于值到基于策略。看懂这张地图,你就不会在章节里迷路。下面这张表可以帮助新手建立大局观:
| 章节 | 核心内容 | 一句话记住它 |
|---|---|---|
| 第1章 | 基础概念 | 认识状态、动作、策略、奖励 |
| 第2~3章 | 贝尔曼方程与最优方程 | 价值的递归公式 |
| 第4章 | 值迭代与策略迭代 | 用方程求解最优策略 |
| 第5~7章 | 蒙特卡洛、随机近似、时间差分 | 无模型时怎么学 |
| 第8章 | 值函数近似 | 从表格走向神经网络 |
| 第9~10章 | 策略梯度、演员-评论家 | 直接优化策略本身 |
第一遍读的时候,第6章随机近似可以快速跳过,不影响主线。等第二遍回来补,你会发现它其实是连接蒙特卡洛和时间差分的数学桥梁。这本书还有一个特点,每个算法都会先把核心思想单独剥离出来,再处理那些容易分心的细节。这也是为什么新手不容易被细节淹没。
3. 全书就靠一个棋盘格打天下:认识强化学习的四件套
3.1 认识网格世界:最小但完整的强化学习环境
这本书的几乎所有例子,都发生在一个网格世界上。想象一个棋盘,每个格子代表一个状态;你控制的智能体站在某个格子上,可以往上、下、左、右移动;某些格子有正奖励,比如找到了宝藏,某些格子是陷阱,会给出负奖励,边界墙还会挡住去路。
在这个环境里,强化学习关心几件最基本的事。第一是状态,也就是智能体当前所处的位置,它“看到的局面”。第二是动作,就是在某个状态上能做的事,比如“向右移动一格”。第三是状态转移,执行某个动作之后会到哪个新状态。注意,转移可以是随机的,比如“向右走”有0.8的概率真的到了右边,有0.2的概率滑到了下面一格,这就叫随机动态。第四是奖励,走一步之后环境返回的即时数值,正数鼓励,负数惩罚。第五是策略,智能体在每个状态选择动作的规则。
这些概念看起来简单,却是整套数学的地基。书中还会提到轨迹、回报、回合这三个词。轨迹就是从开始到结束走过的一串状态和动作;回合是一次完整的交互过程,比如在网格世界里从起点走到终点,或者掉进陷阱,都算一个回合结束。新手刚开始接触这些词会觉得多,但它们之间的关系其实很直接:智能体按策略行动,走出一条轨迹,获得一系列奖励,累计起来就是回报。
3.2 策略:智能体的“行为手册”
策略是新手最容易忽略的概念,但它决定了智能体的一切行为。策略分两种:确定性策略是“在这个状态,我百分之百走右边”;随机策略是“70%走右边,30%走左边”。为什么非要随机?因为在未知环境里,如果总走同一条路,就永远不会发现更好的路线。这就是强化学习里著名的“探索与利用”矛盾:到底该选已知最好的动作,还是冒险试试新动作。
这本书在第5章会用ε-greedy策略专门讲这个问题:以大概率选择当前认为最好的动作,但留一个小概率随机试探。这个策略写作π(a|s),读作“在状态s下采取动作a的概率”。这个简单记号贯穿了全书,从基础概念一直到第9章策略梯度,你都在跟它打交道。
书中还有一个很关键的观点:策略是“概率分布”而不是“规则表”。很多新手写成代码时,习惯用if-else硬编码策略,但强化学习里的策略是一组概率,它允许智能体在相同状态下做出不同选择。这个区别在数学上很重要,因为它让“改进策略”这件事变得平滑:你可以一点点调概率,而不是一下子切换规则。理解了这一点,后面看策略梯度方法时会轻松很多。
3.3 回报与折扣因子:为什么往后看要“打折”
光知道单步奖励不够,因为一个动作好不好,要看它长期能带来多少收益。书里定义了回报:从一个时刻开始,把未来每一步奖励按折扣因子γ折现后加起来。公式是G_t = R_{t+1} + γR_{t+2} + γ²R_{t+3} + …,γ介于0和1之间。
为什么要“打折”?第一,人天然更看重眼前的收益,今天的100块比明年的100块更实在;第二,未来充满不确定性,远期奖励不一定拿得到;第三,数学上,如果没有折扣,无限长过程的奖励之和可能变成无穷大,那就没法比较了。所以γ不是一个随便调的超参数,它直接塑造了智能体的“性格”:γ接近0,智能体变得短视,只看眼前;γ接近1,它愿意为长期目标忍耐很多步。
我曾经拿γ做过一个实验:在同一个网格任务里,把γ从0.9改成0.99,智能体的行为立刻变了。0.9时它急着冲向最近的奖励,0.99时它愿意绕远路去拿更高的奖励。这个差异不调代码是感受不到的。下面这段代码演示了“回报”怎么算,你可以复制到本地跑一跑:
import numpy as np rewards = [1, 1, 1, 1, 1] # 每一步拿到的即时奖励 gamma = 0.9 # 折扣因子,越接近1越看重远期 G = 0 for t, r in enumerate(rewards): G += (gamma ** t) * r # 第 t 步的奖励,乘以 gamma 的 t 次方 print(f"回报 G = {G:.3f}") # 输出:G = 4.095(因为 1 + 0.9 + 0.81 + 0.729 + 0.6561)代码里最关键的是gamma ** t,它表示折扣随时间指数衰减,越靠后的奖励被乘得越小。你可以改一改γ的值试试:γ=0时,回报只剩第一步的奖励1;γ=1时,五步奖励直接相加等于5。这个小实验虽然简单,却能让你直观地理解,为什么强化学习的目标是“最大化回报”,而不是“最大化下一步奖励”。
3.4 马尔可夫决策过程:强化学习的“宪法”
把前面所有元素放到一起,就得到了马尔可夫决策过程,缩写是MDP。它不是一个新概念,而是强化学习的标准建模框架。核心假设是“无记忆性”:未来只由当前状态决定,和更早的历史无关。就像下棋时,只看当前盘面就能决定下一步,不需要回忆刚才怎么走到这一步。
MDP通常被写成五元组(S, A, P, R, γ):状态集合、动作集合、状态转移概率、奖励函数、折扣因子。这本书第1章最后一节把这些元素收拢起来,让你看到强化学习的所有问题都可以放回这个框架里表述。如果你在后续章节里迷路,就回到这个框架问自己两个问题:我们现在估计的是哪个量?这个算法需要知道环境模型吗?这两个问题能帮你快速找回主线。
对于新手,我强烈建议在第一遍读第1章时,自己动手把网格世界画一遍,然后在纸上写出它的状态集合、动作集合、转移概率和奖励。不用画复杂的,一个3×3的格子就够。这个练习能让你明白:所谓“环境”,在数学上就是一张表;所谓“智能体”,就是在这张表上做决策的程序。搞懂这个,后面的贝尔曼方程就不那么可怕了。
4. 全书的灵魂公式:状态价值与贝尔曼方程
4.1 状态价值的直觉:给每个格子估个价
有了回报,下一个问题自然是:站在某个格子,未来平均能拿到多少收益?这就是状态价值。用生活类比一下:你评估一家奶茶店的位置好不好,不能只看它今天卖出多少杯,而要估算“在这里长期经营,未来累计能赚多少”。状态价值就是“从某个状态出发,按某个策略行动,未来回报的期望”。
注意“期望”这个词。因为环境有随机性,策略也可能是随机的,所以每次从同一个状态出发,得到的回报不一定相同。状态价值把所有可能情况按概率加权平均,得到一个“平均意义上”的长期收益。这个量是强化学习的基石,几乎所有算法都在直接或间接地估计它。
书里最核心的一步,是把这句大白话写成递归方程。为什么能递归?因为从状态s出发的回报,可以拆成“走一步的即时奖励”,加上“从下一个状态继续走能拿到的奖励”。于是状态价值变成了一个等式,这个等式叫贝尔曼方程。它是本书第一个、也是最重要的数学工具,后面的最优策略、值迭代、Q-learning,全都建立在它上面。
4.2 从一句话到方程:把贝尔曼方程每个符号都认全
公式长这样:
vπ(s) = Eπ[ R_{t+1} + γ vπ(S_{t+1}) | S_t = s ]
对新手来说,最劝退的不是数学,而是“每个符号单独认识、放一起就不认识”。我们把每个符号拆开看:
- vπ(s):在策略π下,状态s的价值。
- Eπ[...]:在策略π决定的随机过程上取期望,通俗说就是“重复很多次后取平均”。
- R_{t+1}:走这一步立即拿到的奖励。
- γ:折扣因子,给未来价值“打折”。
- vπ(S_{t+1}):下一步到达状态的价值。注意它的下标是t+1,而不是t。
这个公式最妙的地方在于,方程右边也有vπ,出现在下一状态那里。也就是说,vπ被表示成了“当前奖励加未来价值”,而未来价值本身又是一个vπ。这种自我引用叫递归,它是全书所有计算方法的发动机。后面你会反复看到同一件事:要么想办法解出这个方程里的vπ,要么想办法逼近它。
我第一次读到这里时,其实很困惑:一个方程里同时有未知数和它自己,这怎么解?后来我明白了,这正是迭代法的用武之地。你先给vπ猜一个初始值,比如全是0,然后把它代入右边,算出新的vπ,再把新的代入右边……重复下去,vπ就会越来越接近真实解。这个过程就是下一节你要亲手做的小实验。
4.3 第一个能跟做的小例子:三个状态,手算迭代
纸上谈兵没有用,动手算一下才踏实。假设一个迷你世界里有三个状态A、B、C,排成一条线:A到B,B到C。策略固定为“一直向右走”。每走一步的即时奖励为:从A到B拿1,从B到C拿2,从C继续走就以概率1结束,结束之后没有奖励。设γ=0.9,所有状态价值初始为0。
用迭代法解这个贝尔曼方程,规则是不断用方程右侧更新左侧:
# 状态价值迭代的核心代码(一维直线世界) gamma = 0.9 states = ['A', 'B', 'C'] v = {'A': 0.0, 'B': 0.0, 'C': 0.0} # 离开该状态时拿到的即时奖励 reward = {'A': 1.0, 'B': 2.0, 'C': 0.0} # 转移关系:A 的下一个是 B,B 的下一个是 C;C 继续走就结束(未来价值为0) next_state = {'A': 'B', 'B': 'C', 'C': None} for step in range(1, 4): new_v = {} for s in states: ns = next_state[s] future = v[ns] if ns is not None else 0.0 new_v[s] = reward[s] + gamma * future v = new_v print(f"第{step}次迭代: A={v['A']:.2f}, B={v['B']:.2f}, C={v['C']:.2f}")跑完三次你会看到这样的规律:第一次迭代,A只看到了马上拿到的奖励1,所以A=1,B=2;第二次迭代,A看到了“到B拿1,加上从B到C拿2的打折”,变成1+0.9×2=2.8,B变成2+0=2;第三次之后,价值继续向后传播。这就是“价值传播”最直观的演示:一个状态的价值,会随着迭代把更远未来的信息一点一点吸收进来。
如果你第一次看这段代码有点晕,抓住三行就行。第一行,future是下一个状态当前的价值;第二行,new_v[s] = reward[s] + gamma * future就是贝尔曼方程的代码形态;第三行,多迭代几次,远处的奖励会逐步传回更靠前的状态。这就是第4章值迭代算法的雏形:不停用旧价值算出新价值,直到数值不再变化,就得到了稳定解。对新手来说,亲手把这个循环写一遍,比看十遍公式更有用。
4.4 这本书如何把贝尔曼方程讲透
可能有人会问:不就是递归吗,为什么值得写整整三章?因为同一个方程,在三种场景下扮演不同角色。第2章把贝尔曼方程本身讲清楚,并给出两种解法:闭式解和迭代解。第3章把方程右侧的期望换成最大值,得到贝尔曼最优方程,这给了你“什么是最好的策略”的数学定义。第4章把解方程变成了算法:值迭代和策略迭代,一个从价值出发改进价值,一个从策略出发改进策略。
这三章的递进关系,新手务必看明白:先有价值定义,再有最优价值定义,最后有求最优价值的算法。很多教程一上来就讲Q-learning,把这三层铺垫全跳过,所以新手学完只会“背公式”。这本书记住了这层关系,所以它给读者的感觉是:每个算法都有出处,都不用死记。看到后面你还会发现,蒙特卡洛、时间差分这些方法,本质上都是在没有环境模型时,想办法估计同一个贝尔曼方程里的东西。主线一直没有变。
5. 新手最容易踩的五个坑:阅读顺序、手算与代码练习
5.1 先给你一张可执行的阅读路线图
书是按10章写的,但新手不必“老实”地从第1章逐字读到第10章。我建议第一遍这样走:第1章、第2章、第3章、第4章、第5章、第7章、第8章。第6章随机近似可以先跳过,它不是主线;第9章和第10章作为第二遍的进阶目标。第一遍的目标是:理解贝尔曼方程、值迭代、蒙特卡洛、时间差分和Q-learning这几个核心站点。下面这张表可以贴在手边:
| 顺序 | 章节 | 核心收获 | 建议用时 |
|---|---|---|---|
| 第1步 | 第1章 | 概念、MDP、四件套 | 1周 |
| 第2步 | 第2~3章 | 贝尔曼方程、最优方程 | 2周 |
| 第3步 | 第4章 | 值迭代、策略迭代 | 1到2周 |
| 第4步 | 第5章 | 蒙特卡洛方法 | 1周 |
| 第5步 | 第7章 | 时间差分、Sarsa、Q-learning | 1到2周 |
| 第6步 | 第8章 | 从表格到函数、Deep Q-learning | 1到2周 |
第一遍不需要吃透所有定理的证明。读懂定理在说什么,把例子和公式对上,就足够了。剩下的留给第二遍。
5.2 坑一:一上来直奔深度强化学习;坑二:把选读当必读
先看坑一。现象:很多新手学强化学习,目标是“我会用DQN打游戏”,于是从第8章倒着看,甚至直接从网上的现成代码开始。结果看到“经验回放”“目标网络”时一头雾水,因为这些概念的价值,只有在理解了Q-learning的缺陷之后才能体现出来。原因:深度强化学习是“函数近似加时间差分”的组合,不是独立学科。没有前面第7章的Q-learning基础,直接看DQN,只能得到一堆名词。解决:跟着路线图先走完第7章。当你自己实现过Q-learning后,再看DQN时会觉得它只改了两个地方:用神经网络代替表格,加了一个目标网络。这时你学到的不是又一个新算法,而是一个升级补丁。
再看坑二。现象:这本书里有些灰色框和附录是选读的,比如测度论概率论相关的严谨推导。有人从第一个灰色框开始死磕,结果几周过去还停在第2章,最终放弃。原因:新手分不清主线和支线。这本书刻意把核心思想与数学细节分离,就是为了保护主线不被淹没。初学者强行读所有证明,等于还没学会走路就先学跑。解决:第一遍把灰色框内容标记为“以后再看”。遇到收敛性证明时,先接受结论,比如“迭代法保证收敛”,不必自己动手证一遍。第二遍再回来看这些选读部分,那时你会惊讶地发现,难啃的证明变得顺畅多了。
5.3 坑三:只看不手算;坑四:拿这本书当代码教程
坑三:看书时每个公式都“读得懂”,合上书却写不出来。特别是第2章的贝尔曼方程,看例子觉得简单,但让自己给一个新环境列方程,大脑一片空白。原因:阅读的“熟悉感”不等于“理解”,数学书尤其如此,看和做之间有一条巨大的鸿沟。解决:每学完一章,把该章里的例子自己动手算一遍,不看答案。比如第2章算状态值,第3章算最优价值,第4章手动迭代三回合,算完再用代码验证。别小看手算,它是一切信心的来源。我第一次手算出三状态的价值时,才觉得强化学习没那么玄。手算的意义不在于精确,而在于强迫你把公式的每一步变成自己的动作。
坑四:有人抱怨“读完全书,我还是不会写强化学习代码”。这其实不是这本书该做的事。它的定位是原理书,不是代码书,目标是让你理解“为什么这么做”,而不是“API怎么调”。解决:读完第4章后,找一个最简单的网格世界编程练习,把值迭代写出来;读到第7章后,再写一个Q-learning。你可以用Python加一个简单的小游戏环境来画网格,但核心逻辑都来自书里的公式。原理越清楚,代码越短,真实代码往往只是把书里的更新公式翻译成几十行程序而已。
5.4 坑五:跳过每章末尾的Q&A
现象:每章末尾的Q&A小节看起来像“课后题”,很多人从不看,直接进下一章。原因:在常见的学习习惯里,题目通常是为了考试,而不是为了自测,所以这部分最容易成为“可选项”。但这一章的Q&A凝聚了作者多年的教学经验,很多困惑是真实学生提过的。解决:把Q&A当成免费的测验。每章读完先合上书,尝试回答两三个问题,再打开对照。如果答不上来,说明这章的核心概念还没建立,回看对应章节比硬往前继续更高效。我自己试过一次,发现第一章的某个问题就把我问住了,于是乖乖回去重读了状态转移那一节,后面的路反而顺畅了。
6. 下一步怎么学:把这本书变成你的强化学习“母语”
6.1 第一遍读完,带着问题进入第二遍
第一遍读完,你已经知道了核心概念。第二遍不要按章节顺序读,而是按问题读。比如问自己:“Q-learning的收敛靠什么?”“策略梯度为什么能工作?”“为什么函数近似会引入不稳定?”然后回到相应章节找答案。带着问题重读,你会发现原来不起眼的一段推导,正是解决问题的那把钥匙。此时灰色框不再是负担,反而成为你的进阶材料。
还有一个具体的建议:把每章的Q&A当作阅读笔记的目录。读完一章后,把你回答不上来的问题记下来,过两天再试一次。能答上来的问题就划掉,答不上来的就回看对应的例子。这个习惯会让你的学习进度变得非常透明,不会出现“看了三个月才意识到啥也没记住”的情况。
6.2 亲测有效的三条学习习惯
如果不知道从哪里开始动手,我推荐三条路径。第一,在一个3×3网格世界里,先用值迭代找出最优策略,把第2章的贝尔曼方程写成代码,对比每一行对应方程的哪一项。第二,把表格值函数替换成一个小型神经网络,再跑一次Q-learning,体会从表格到函数的转变。第三,读完第9章后,用策略梯度重做同一个网格任务,对比它和价值迭代的差别。等这三步做完,你已经从“看懂书”走到了“能做最简单的算法实验”。
说句真心话,我刚开始拿到这本书时,也被“数学”两个字压得不敢翻开。后来我给自己定了一条规矩:每个新算法,必须先画网格世界的小例子,再写贝尔曼方程,再写十行代码。从那以后,我每次学新算法都强制走一遍这个流程,翻车次数大幅减少。这条路走通只需要一个晚上的手算,但它带来的踏实感,能支撑你走完后面所有的章节。希望帮到你。
本文还有配套的精品资源,点击获取