简介西湖大学赵世钰教授的《强化学习的数学原理》是一本从零开始、带大量例子的纯英文数学专著面向有线性代数与微积分基础的强化学习初学者、算法工程师和研究者。全书从网格世界引入基本概念依次讲清状态值、贝尔曼方程、贝尔曼最优方程、值迭代、策略迭代、蒙特卡洛方法、随机近似、时间差分、值函数近似、策略梯度与演员-评论家方法并在附录中给出序列收敛性分析能帮助读者把马尔可夫决策过程与现代深度强化学习算法背后的数学逻辑连贯起来。资源包共 1 个 PDF 文件压缩后约 18.9MB便于在电脑、平板等设备离线翻阅章节编号清晰、公式排版完整。已有 845 人学习下载适合作为理论自学教材、研究生课程配套读物或算法推导时的案头参考。1. 先搞懂一个概念强化学习到底在学什么你有没有想过一个完全没接触过围棋规则程序的人是怎么学会下赢世界冠军的答案不是有人把棋谱规则一条条写死给他而是让他自己在棋盘上不断试错赢了就记住输了就调整几百万局之后他自然懂得什么局面该下哪一步。强化学习Reinforcement LearningRL做的就是这件事——它不教智能体“正确答案”而是让它在环境里反复行动、拿奖励、踩坑、再调整最终自己摸索出一套好策略。所以很多新手第一次听说它都会觉得这不像在写程序更像在养一个孩子。这份资源是《强化学习的数学原理》的英文原版书稿它的特别之处在于不直接把各种算法甩给你背而是从最朴素的问题出发——状态是什么、奖励怎么算、为什么这个公式长这样——一步步把强化学习的骨架搭给你看。它适合完全没有强化学习背景、但有点概率论和线性代数基础的人也适合那些“看了很多代码但总觉得是黑匣子”的初学者。换句话说如果你想知道 Q-learning 为什么能收敛、策略梯度那个梯度到底怎么来的这本书就是帮你拆开黑匣子的那把螺丝刀。2. 为什么入门要死磕数学不搞懂公式代码就是玄学2.1 先别急着跑代码表格法才是理解一切的起点很多新手学强化学习上来就装环境、跑 DQN几十行代码跑通了但问他一万个 episode 之后网络到底学到了什么他答不上来。这是典型的“代码会跑、原理不懂”。这本书的第一章到第四章用的都是表格法tabular representation意思是你把每个状态、每个动作的价值都写在一张表格里算法更新的就是这张表。表格法虽然看起来原始但它把所有数学逻辑都摊在明面上没有神经网络的“玄学”干扰。我用第一次读这本书的经历举例我当时刚看完第一章的网格世界grid world就试着在纸上画了一个 3x3 的格子手动迭代了一次贝尔曼方程。那个过程很慢但当我亲眼看着那些数字从乱跳变得稳定我突然明白了“价值”到底是什么——它不是某个神仙给的分数而是“从这格出发未来能拿到的期望回报”。这种顿悟是直接跑代码永远给不了你的。2.2 状态、动作、策略、奖励四个词串起整个框架强化学习有一套标准术语这本书用网格世界例子把它们讲得非常具体。状态state就是智能体当前所处的位置在网格世界里就是“我在第几行第几列”动作action就是上下左右四个方向策略policy就是“我在每个状态下选择动作的规则”可以是确定的左转就是左转也可以是随机的70% 概率往上30% 概率往左奖励reward则是你走一步之后环境给你的即时反馈可能是一格 -1 表示还没到终点也可能到达终点 10。这四样东西组合起来就有了“轨迹”“回报”和“episode”。轨迹就是你从起点到终点走过的状态-动作序列回报是把每个时刻的奖励按折扣因子 gamma 累加起来的总和episode 则是“从开局到结束的完整一盘”。你会发现强化学习的核心问题就一句话怎么调整策略让从任意状态出发的期望回报尽量大。2.3 为什么必须有马尔可夫决策过程MDP前面四个概念合起来就构成了马尔可夫决策过程MDP。新手最容易被这个词吓到其实它就是一句话下一步的状态只取决于当前状态和你采取的动作跟之前怎么走到这一步无关。你下围棋的时候不需要记得前三手分别下在哪——因为当前的棋面已经包含了所有历史信息你玩迷宫游戏的时候也不需要一个“历史记忆模块”因为当前位置和剩余体力已经足够决定下一步最优动作。本书用一整个小节讲 MDP是因为所有经典算法Q-learning、Sarsa、策略梯度都是建立在 MDP 这个假设上的。如果环境不满足马尔可夫性那些漂亮的收敛性证明就都失效了。我第一次读到这里心里想的是原来这世界上的大部分问题只要设计得好都可以近似看成 MDP。这个认知让我后来看任何强化学习论文都舒服了很多。3. 最核心的一课贝尔曼方程为什么是“后悔药计算器”3.1 状态值是什么从“我在这格能拿多少”说起书里第二章用两个激励例子引出状态值。先说直观理解状态值就是“我现在站在这个格子按某个策略走下去未来能拿到的期望总回报”。请注意“期望”这个词因为从当前状态出发你每一步会走向哪个格子是有随机性的所以只能算平均意义上的回报。书里的做法是用一个 4x4 网格世界反复举例每个格子的值代表“从这个格子出发、按当前策略走、长期累积回报的数学期望”。我第一次跟着算的时候发现一个有趣现象离终点越近的格子状态值越高而死角位置的格子状态值可能是负的因为它容易让你绕远路。状态值把这种“距离感”量化成了数字这正是后续所有算法操作的对象。3.2 贝尔曼方程的核心当前价值 即时奖励 未来价值贝尔曼方程Bellman equation是这本书真正的主角。它的思想特别朴素你现在站在 s执行策略里的动作 a拿到即时奖励 r然后跳到新状态 s。那么 V(s) 应该等于当前奖励 r 加上下一状态的价值 V(s)只不过因为未来有折扣所以要乘一个 gamma。写成公式就是V(s) E[ R gamma * V(s) ]这个方程的精妙之处在于它把一个无限长的时间序列问题变成了一个“前后两步的关系式”。这就像你用手机导航不需要算完整条路的每个路口只需要知道“下一步怎么走以及从下一个路口到终点还要多久”就能不断递归地算出全路径。书中用大量网格世界的小例子反复演示这个方程读的时候不要跳着看跟着它一笔一笔算两个例子你就能彻底摆脱“符号恐惧”。3.3 两种解法直接算出来还是慢慢逼近贝尔曼方程既然是个方程就可以解。这本书给出了两条路。第一条路是闭式解closed-form solution说白了就是把方程写成矩阵-向量形式然后用线性代数的方法直接求逆V (I - gamma * P) 的逆矩阵乘以奖励向量。这个方法理论上完美但问题在于当状态空间很大时矩阵求逆根本算不动。我第一次看到那个逆矩阵符号就明白了难怪实际算法不用它。第二条路是迭代解iterative solution也就是随便给每个状态一个初始值比如全是 0然后不断套用贝尔曼方程去更新。你不需要求逆矩阵只需要一次次往回代。这个过程每一步的运算量都很小而且保证收敛。我照着书里那个表格手动迭代了二十轮看着状态值从乱跳变成平滑就知道这条路才是实用算法的祖先。3.4 从状态值到动作值为什么要 Q 值状态值描述的是“这个状态好不好”但智能体做决策时需要回答的问题是“我现在该执行哪个动作”。于是就有了动作值也就是 Q 值在状态 s 下执行动作 a然后继续按策略走期望回报是多少。书里专门有一小节讲这个转换关系公式是 Q(s,a) E[ R gamma * V(s) ]也就是动作值等于“执行这个动作的即时奖励加上跳过去那个状态的价值”。从状态值到动作值是理解 Q-learning 的必经之路因为几乎所有实用强化学习算法DQN、Sarsa、Q-learning学习的都是 Q 值而不是 V 值。我第一次读到这儿才明白为什么网上那些代码里到处都是 Q 表格或 Q 网络——因为只有 Q 值才能直接用于动作选择。4. 第一个迈步亲手用 Python 跑通网格世界的最小闭环4.1 环境准备你要的其实只有 Python 本身入门强化学习你需要安装的东西比想象中少得多。这本书的所有早期例子都基于网格世界而网格世界是一个几行代码就能自己构建的环境完全不依赖任何第三方库。你只需要 Python 3.8 以上版本外加一个 numpy就够了。如果你想画图看收敛过程再装一个 matplotlib。我第一次学的时候犯了两个错都是新手高频翻车点。第一个是装了一堆重型库gym、pytorch、tensorflow结果光解决环境依赖就折腾了一个下午完全没学到东西第二个是习惯性地去找现成环境却忘了自己写一个网格世界其实只要几分钟——自己写环境还有一个好处你可以完全控制状态转移概率和奖励这对理解算法原理至关重要。下面是一个最简版的网格世界环境定义状态就是一个整数动作是 0上、1下、2左、3右终点是状态 3import numpy as np # 一个 2x2 的网格状态编号 0,1,2,3其中 3 是终点 n_states 4 n_actions 4 def step(state, action): 根据当前状态和动作返回 (下一个状态, 奖励) if state 3: # 终点不再移动也没有奖励 return state, 0 if action 0: # 上 next_state 1 elif action 1: # 下 next_state 2 elif action 2: # 左 next_state 3 else: # 右 next_state 0 reward 1 if next_state 3 else 0 # 只有到达终点给 1 return next_state, reward这段代码中step函数就是环境的全部。每个状态都有一个确定性的转移到达终点时奖励为 1否则为 0。当我第一次运行这段代码时我在循环里随机选动作让它从状态 0 开始乱走程序每次输出一个 (next_state, reward) 对跑了几十个 episode 之后我注意到一个现象虽然动作是随机的但只要接近终点附近奖励就更容易出现。这个观察虽然简单却帮我建立了“策略影响回报”的直觉。4.2 手写价值迭代让贝尔曼方程跑起来现在你已经有一个环境了接着来实现这本书第四章最重要的算法之一价值迭代value iteration。它做的事情非常简单——不停地让 V(s) 等于“所有动作里能让即时奖励加未来价值最大的那个”。你不需要手动推导什么就写一个两层循环外层迭代很多轮内层遍历每个状态不断更新 V 值。# 初始化所有状态价值为 0 V np.zeros(n_states) gamma 0.9 num_iterations 100 for it in range(num_iterations): V_new np.zeros(n_states) # 用于保存本轮更新后的价值 for s in range(n_states): # 遍历所有动作找出能带来最大价值的那个动作 action_values [] for a in range(n_actions): next_s, r step(s, a) action_values.append(r gamma * V[next_s]) V_new[s] max(action_values) # 价值迭代的核心取最大值 V V_new print(最终状态价值:, V)这段代码的输出是四个格子的价值。在我自己的机器上运行大约十几轮迭代之后状态 0、1、2 的价值就稳定在某个值附近而状态 3终点永远是 0。代码里最关键的逻辑是max(action_values)这一行——价值迭代不是“按当前策略评估”而是“假设我现在能选最优动作”这正是它区别于策略迭代的地方。初学者最容易犯的错是把它写成平均值或写成V[state]的原地更新那样迭代过程会扭曲收敛结果也会出错。记住必须用V_new暂存本轮结果全部算完再替换旧 V。4.3 一个新手的首次代码实验策略到底怎么变好你不想只在终端里看到一个数字数组已经收敛更想知道“策略”本身是怎么被改善的。价值迭代还没直接输出策略但你早就有了答案在每个状态下选择argmax那个动作就对了。把上面代码的max换成np.argmax你就能得到每个状态下的最优动作。我建议你做这样一个实验把上面代码里的step函数改一改把终点的奖励从 1 改成 5 和 0.5分别跑一次观察最终策略和状态值的变化。你会很快发现奖励越大智能体越愿意绕远路去寻找奖励太小它可能干脆停在原地不动。这个实验是理解“奖励设计决定智能体行为”的最佳入门课也是你踩上强化学习土地的第一步。跑通这些你再看后面的蒙特卡洛和时间差分方法就不会再觉得它们是天书了。5. 从这本书走向算法实践接下来该学什么5.1 你已经拥有的东西与“只会调包”的人彻底拉开差距读完前四章、亲手跑过一遍价值迭代你已经不再是纯小白了。你知道了强化学习的核心问题是最优策略知道了“价值”背后有严格的数学定义知道了腾讯视频里的推荐系统、自动驾驶的决策模块本质上都是在做同一件事最大化期望回报。这种认知层面的底层视角是只会在框架里调参的同学短期内拿不到的。接下来我建议的学习顺序是这样的先认真读完第五章蒙特卡洛方法和第七章时间差分方法这两个章节讲的是“没有环境模型时怎么学习”。你现在跑的例子用的是已知转移概率但真实场景里根本不知道“执行动作后会跳到哪个状态”——蒙特卡洛靠一整条轨迹的回报来估计Q-learning 靠每一步的即时奖励更新 Q 值。理解这两个章节之后你可以动手实现一个最简 Q-learning 来玩客厅里的寻宝迷宫那个过程让人上瘾。5.2 什么时候开始碰深度学习别急着上 DQN我见过太多新手读完第四章就急着跳到第八章读深度 Q 网络结果被经验回放、目标网络、mini-batch 这些概念砸得头晕。正确姿势是先确保自己能徒手写出表格版 Q-learning再读第八章的值函数近似。第八章的核心巧思是“不用表格存价值了改用参数化的函数来表示 V(s)”这个函数就可以是神经网络。理解了这一步深度强化学习与经典强化学习之间的桥就彻底通了。如果你已经有神经网络基础可以直接顺着第八章和第九章继续读如果没有建议先花一周补一下基础的链式求导和全连接网络原理否则策略梯度那部分的推导会让你卡壳。我自己的血泪教训是当初急着看策略梯度跳过随机近似那章结果看不懂“期望梯度”为什么能变成采样平均后来乖乖回过头补完第六章才豁然开朗——这本书的知识链其实环环相扣跳过去迟早要回来补课。5.3 一个真实可用的学习路径把全书当作一张地图从零基础到能动手实现 DQN我建议你按这个路径走第一阶段第 1 章到第 4 章核心目标是理解 MDP、贝尔曼方程、价值迭代和策略迭代配合本文的网格世界代码反复实验直到你能不看笔记写出价值迭代第二阶段第 5 章到第 7 章核心目标是无模型算法自己实现 Q-learning 和小型 Sarsa跑通一个 4x4 迷宫第三阶段第 8 章到第 10 章核心目标是函数近似把 Q 表格换成一个小型神经网络然后尝试在 OpenAI 的 CliffWalking 这类简单环境上跑 DQN 和 REINFORCE。每读完一章都试着用纸笔推导一遍关键公式再对照书后的 QA 检查自己的理解。不要怕慢——我当年用这本书入门前三章花了整整两周但后来再读其他强化学习资料速度提升了不止一倍。从那以后我每次新学一个算法都会强制自己先回到“状态值、奖励、策略”这三个词用这本书的小图景把直觉画出来再去看代码。希望帮到你也祝你在强化学习的门口迈出稳稳的第一步。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?