
《强化学习序列决策与最优控制》我读了整整两周从第一页起就被一个问题钩住了为什么市面上那么多强化学习教材有的偏数学推导有的偏代码调参很少有一本能把“序列决策”和“最优控制”这两条本来同源、后来分家、现在又重新汇合的脉络讲清楚。清华大学出版社这次引进的这本书恰恰是冲着这个痛点来的。如果你已经在DQN、PPO这些算法里摸爬滚打过一阵或者你从控制理论那边过来想搞懂强化学习到底在干什么这本书值得你认真读一遍。先说一下这本书的基本情况。它不是一本纯粹的算法手册也不是一本纯理论的数学专著它的主线是把强化学习放到“序列决策”的大框架里再和“最优控制”的方法论对照着讲。这种写法在国内外教材里都不多见。李航、周志华这些老师的书各有侧重但很少有一本书会花一整章去讲动态规划、最优控制里的经典方法再告诉你这些方法和Q-learning、策略梯度之间到底是什么关系。这本书做了这件事而且做得相当系统。1. 内容整体设计与思路拆解1.1 全书结构从“决策”到“控制”再到“算法”的三段式推进这本书的结构我读完以后觉得非常清晰大致可以分成三大块。第一块是基础理论重点在马尔可夫决策过程MDP、贝尔曼方程、策略评估和策略改进这些概念。别看这些名词听起来基础书里对它们的处理方式和很多入门书完全不同。比如讲贝尔曼方程它不只给你一个公式而是从“当前回报未来价值的折扣”这个直觉出发一步步推导出贝尔曼期望方程和贝尔曼最优方程然后把两者放在一起对比说明它们分别对应策略评估和策略优化这两个阶段。这种讲法让读者能真正理解为什么Q-learning里的更新公式长那个样子而不是死记硬背。第二块是最优控制方法的系统讲解。这块是我个人觉得全书最有价值的部分。书里花了很大篇幅讲动态规划、变分法、极大值原理、HJB方程这些经典控制理论的核心工具然后明确告诉你强化学习里所谓的“求解MDP”本质上就是在不知道环境模型的情况下近似求解最优控制问题。我读到这里的时候有种豁然开朗的感觉以前在代码里反复调的折扣因子、奖励函数原来都和最优控制理论里的某些参数一一对应。第三块是深度强化学习算法。这部分的覆盖面很全从DQN系列的改进Double DQN、Dueling DQN、Prioritized Replay到策略梯度方法REINFORCE、PPO、TRPO再到Actor-Critic架构下的SAC、TD3这些主流算法每一类都给足了篇幅。特别值得一提的是书里介绍每个算法的时候都会回到第二块讲的最优控制视角去解释比如它说SAC本质上就是在用熵正则化来平滑最优控制解中的非唯一性问题。这个视角我很喜欢至少我在其他书里没见到过这么清晰的表述。1.2 这本书适合谁读不适合谁读我的经验是这本书最适合两类人。一类是有一定代码经验、想补理论短板的算法工程师。如果你已经用PPO跑通过几个环境但说不清楚“为什么PPO要加clip”或者“为什么GAE里的lambda通常取0.95”这本书会帮你把这些问号一个个拉直。另一类是从控制工程、机器人领域转过来的人。你们学过PID、学过LQR甚至写过MPC现在想理解强化学习怎么和这些方法衔接这本书的对照式写法简直是为你量身定做的。说实话纯零基础的小白读这本书会比较吃力。书里默认读者有概率论和线性代数的基础一些推导过程跳步也比较多这符合外版教材的风格。我的建议是如果你是纯新手先找一本入门书比如Sutton和Barto的《强化学习》打个底再来读这本。当然如果你数学底子很好直接硬啃也不是不行只是要做好查资料的准备。1.3 与市面上其他强化学习图书的对比我把这本书和几本常见的书做了个对比方便你根据自己的情况做判断对比维度本书Sutton《强化学习》李航《统计学习方法》一般实战类书籍数学推导深度较深最优控制视角贯穿始终深偏随机近似与策略迭代理论中深推导清晰但偏统计浅以代码为主最优控制内容完整一章动态规划/HJB均有极少无无代码覆盖部分章节有侧重原理无无重大量环境改写可读性中等偏难中等偏难中等轻松适合场景系统攻理论打理论基础作公式速查快速上手调参这个表格只是我个人的读书感受不一定客观但你大概能从里面看出这本书的定位它是一本给想“深入”而非“上手”的人看的书。2. 核心细节解析与实操要点2.1 马尔可夫性与回报设计的深层含义马尔可夫性听起来是个很数学的概念书里给了严格定义状态s_t包含了所有历史信息给定当前状态未来的状态和过去无关。但真正让我觉得值得反复读的是它对“状态表示”这个工程问题的讨论。在实际做强化学习项目的时候你真正要解决的首要问题其实是“怎么把一个实际问题抽象成MDP”这里面有两个关键点。第一状态空间的设计要满足马尔可夫性也就是说当前状态要能足够描述系统的全部相关信息。万一状态设计不好比如做自动驾驶的时候只把车辆的当前速度和位置作为状态完全不管前轮转角那这个MDP的马尔可夫性就被破坏了RL算法在经验回放里训练时就会因为违背独立同分布假设而效果暴跌。第二奖励函数的设计。书里特别强调了一点奖励函数应该直接刻画你真正想优化的目标不应该试图通过稀疏奖励加上大量人工规则去“诱导”模型学到你想要的行为。我自己在项目里也踩过这个坑总想着加一堆势函数来引导结果policy学到了利用规则漏洞的畸形行为后来改成稀疏奖励加合适折扣因子效果反而好了。2.2 折扣因子与回报从数学直觉到实际调参关于折扣因子γ书里给出的解释是我见过最清晰的γ越小智能体越短视越关心眼前的奖励γ越接近1智能体越看重长期回报但随之而来的是方差增大和收敛变慢。实际工程中γ的选择直接影响算法的稳定性和收敛速度。书里虽然没有给出放之四海而皆准的数值但我自己做项目时的经验是单步效果明显的任务比如CartPole倒立摆γ取0.9到0.95就够了太高反而收敛慢长期规划类任务比如下棋、多级决策γ通常取0.99甚至0.995连续控制类任务比如机器人关节控制γ取0.98到0.99之间比较合适我个人建议你在调试的时候不要死守一个γ值不动最好做一个简单的扫描实验训练到中期画一下不同γ下的回报曲线选那个“曲线末端还能保持上升趋势”的值。这是个小技巧书里没写但实测下来非常有用。2.3 状态空间与动作空间的连续化处理这本书花了大量篇幅讨论连续状态和连续动作问题我认为这恰恰是它与一些偏传统教材拉开差距的地方。传统强化学习教材讨论的很多例子都是表格型的离散问题你直接将Q(s,a)存成一个表格就行。但真实工程里你的状态几乎一定是连续的比如无人机的姿态和位置动作也大概率是连续的比如电机力矩。书中从函数逼近讲到策略参数化引入了深度神经网络作为函数近似器。这部分有一个重要的推导我建议你仔细看为什么使用非线性函数逼近器的时候直接使用TD误差更新Q网络会不稳定简单说就是对同一个状态动作对(s,a)我们同时更新了目标值中的Q(s‘,a’)导致目标值在移动你的Q网络在被追赶目标值也在不断变化这个过程会发散。理解了这一层你就能明白为什么DQN要引入目标网络为什么目标网络参数要周期性同步。这些工程细节书上没有展开到很细但核心原理讲到了配合代码就很顺。3. 实操过程与核心环节实现3.1 从算法到代码这本书代码实践的打开方式这本书不是一本以代码为核心的书但它在介绍每个算法之后都会给出一些关键的伪代码或框架性代码。我刚拿到这本书的时候就在想光看不练肯定不行所以我给自己定了个规矩每读完一个算法章节就到OpenAI Gym或者PyBullet里把这个算法实现一遍。书里讲DQN的章节给了我很好的指引。我按照书里的框架把网络结构、经验回放、目标网络、探索策略这几个模块分开写整个实现大约200行代码。我最喜欢的是书里对探索策略的描述前期用较高的ε来充分探索后期逐步降低ε来利用学到的策略。这个思想随处可见但真正落地时有个细节容易被忽略——ε的退火过程不要太快否则策略会被初始时的随机行为锁死很难跳出局部最优。我把我复现DQN时的关键训练循环贴在下面这里以伪代码形式展示避免版权问题# 训练循环的伪代码结构 for episode in range(total_episodes): state env.reset() episode_reward 0 while not done: # 基于epsilon-greedy选择动作 if random.random() epsilon: action env.action_space.sample() else: action argmax(q_net(state Tensor)) next_state, reward, done env.step(action) # 存经验做回放 replay_buffer.add(state, action, reward, next_state, done) if len(replay_buffer) batch_size: sample_batch replay_buffer.sample(batch_size) # 计算TD目标更新网络 state next_state episode_reward reward # 目标网络软同步或硬同步这个流程如果你已经写过应该看着非常眼熟但如果你之前只是照着别人的完整代码跑过现在自己动手从零写一次你一定会遇到很多问题维度对不上、网络输出和动作空间的映射搞反、经验回放里状态转换写错等等。解决这些问题本身就是学习的过程也是我强烈建议你边读边动手的原因。3.2 “最优控制方法”章节的笔记心得这本书最独特的部分就是最优控制那一章。我当时学控制理论的时候用的是《现代控制理论》那本教材李雅普诺夫、线性二次型调节器LQR这些东西都是当数学工具学的完全没想过它们和强化学习的关联。这本书把我过去割裂的知识打通了。举个例子书中把最优控制的动态规划原理和强化学习的贝尔曼最优性原理放在一起对照。从数学形式上说它们几乎是同一个东西唯一的差别在于经典最优控制假设系统模型已知所以可以直接计算期望而强化学习不假设模型已知只能通过采样来估计。这个差异其实决定了两个领域后续发展路径完全不同。最优控制发展出model predictive control这类以模型为基础的算法强化学习发展出model-free的Q-learning、policy gradient等算法。书中还有一张对比表我记得大概是这个意思把LQR、MPC和RL放在一起比了以下几个方面方法需要模型处理非线性处理高维状态计算实时性LQR需要弱线性化后近似中等很好MPC需要中等有限优化开销大中等无模型RL不需要强强靠网络表示训练慢推理快这张表帮助我理解了一个很重要的问题什么时候该用RL什么时候用MPC更好。如果你的系统模型足够准确状态维度不高MPC可能又快又稳但当系统非线性强、模型不准、状态维度高到传统方法无计可施时RL才有用武之地。这个判断能力对工作中做技术选型特别有价值。3.3 基于模型强化学习与无模型方法的对比实验这本书对基于模型的强化学习MBRL用了相当大的篇幅。我过去一直不太理解MBRL到底比model-free好在哪里直到看到书中关于“样本效率”的讨论。model-free的PPO动辄就需要几百万步的交互才能学到像样的策略如果你的任务是真实机器人这种样本消耗完全不可接受。MBRL的方法比如PETS、Dreamer这些思路让智能体先从交互中学习一个环境动态模型再基于这个模型做规划或生成虚拟样本样本效率可以高出几个数量级。我自己在读书期间用书里描述的思路在一个模拟的机械臂环境中试了试MBRL。最初训练一个dynamics model用神经网络拟合状态转移函数然后在这个模型上做模型预测路径积分控制也就是MPPI这个思路效果确实让我惊讶几百个真实样本就能让机械臂学会到达目标点而用PPO往往要几万步才能到类似水平。当然MBRL也有它的问题——学到的模型可能不准模型误差会被策略利用最终在真实环境中失效。书里对这个问题也有讨论并引入了“模型不确定性估计”这个概念这给我打开了新的思路。3.4 离线强化学习与IQL不与环境交互的算法思路书里的离线强化学习章节给我的冲击也很大。传统强化学习假设智能体必须实时与环境交互、获取经验、更新策略但很多实际场景不允许这样做比如在医疗、自动驾驶、工业控制这些领域收集一次新数据要冒巨大风险你只能利用已有的数据集来学习策略。离线强化学习要解决的核心问题是分布偏移你用来学习策略的数据集和数据收集时用的行为策略所对应的状态分布不一致一旦策略更新偏离了行为策略覆盖的区域Q值的估计就会极其不准。书中详细介绍了Implicit Q-LearningIQL这个思路它通过只使用数据集里的状态-动作对来更新Q函数避免了对未见动作的过估计。我读的时候就在想这个技术以后在具身智能或者大模型决策的领域肯定会有越来越广泛的应用因为收集真实交互数据的成本实在太贵了。如果你对IQL感兴趣我的建议是动手用d3rlpy这个库跑一跑它的实现。这个库专门做离线强化学习内置了IQL、CQL、TD3BC等一堆算法可以直接在Gym的MuJoCo环境里跑。我试过用IQL在halfcheetah-medium-v2数据集上训练最后拿到的策略比直接在数据集上用BC行为克隆好很多尤其在长距离任务上BC策略会逐渐偏离而IQL能学到更稳定的长期行为。这种对比非常直观也让我对书中的理论讲解有了感性认知。注意离线强化学习的调参比在线RL麻烦不少。IQL里的expectile参数我用0.7到0.9对最终性能影响很大温度参数也要跟着数据集质量一起调。我的经验是先固定expectile为0.8把温度从1往下扫看哪个值的评估Q值曲线最稳定。4. 常见问题与排查技巧实录4.1 读书过程中最容易卡壳的地方这本书毕竟不是畅销小说有些地方的密度很高。我梳理了几个读者大概率会卡壳的点以及对应的对策。第一个卡壳点是策略梯度定理的推导。书里用了很多期望运算对我来说一开始跟上节奏有点吃力。如果你也卡在这里我给你的建议是先放过推导细节只看结果明白策略梯度的本质是在“增加高回报动作的概率、降低低回报动作的概率”然后直接去代码里看REINFORCE的实现理解log_prob和reward的乘积到底在做什么再回头看推导就顺多了。第二个卡壳点是Actor-Critic架构里两个网络的耦合关系。很多人搞不懂为什么明明有Q函数了还要有一个策略网络。我的理解是这样Critic负责估计当前策略的优劣Actor负责在这个估计的指引下找到更好的策略。Critic越准Actor的更新方向就越可靠Actor越新Critic需要重新评估的对象也一直在变。这种互相促进、互相制约的关系是深入理解现代强化学习算法的关键。第三个卡壳点是PPO里的clip范围为什么有效。书里讲了PPO的替代目标和clip机制但没有把背后的直觉说得特别透。我自己是后来看到一篇博客才想明白的clip的本质是限制新旧策略的比值不要太离谱让每次更新都保持在一个“信托区域”内避免一步走太远导致策略崩掉。想通了这一点你就明白为什么PPO比原始的策略梯度方法稳定那么多也就能理解为什么它是目前工业界最常用的强化学习算法之一。4.2 从理论到实践复现算法时的典型问题速查我在边读书边写代码的过程中积攒了一些典型的踩坑经验分享给你应该能帮你省下几个晚上的时间问题表现根本原因排查方法训练过程loss直接NaN学习率过大或网络输出无上界降低学习率到1e-4级别检查奖励是否过大DQN训练一段时间后突然崩掉目标网络更新太频繁Q值被过高估计将目标网络同步周期改大或换成软更新τ0.005PPO训练时动作分布塌缩成一个点clip范围配合学习率导致策略过早锁定调大clip_range或降低actor学习率奖励曲线上下震荡幅度极大折扣因子设置过大加上GAE的λ过大降低γ到0.98λ降到0.9SAC训练时熵系数自己变成负数自动调熵的target_entropy和动作维度不匹配检查target_entropy设置通常设为-dim(A)4.3 值得注意的实践心得这本书读完以后我最大的感受就是理论扎实能让你少走很多弯路。以前我在项目里调参完全靠试错和玄学看到不收敛就换学习率再不行就换一个算法。读了这本书以后我开始理解每个超参数在算法里到底作用于什么环节出问题时能推理出是哪个模块出了问题调参的效率提升了一大截。举一个具体例子。我在做一个多AGV路径规划项目的时候这也是我读这本书的直接动机一开始用的是最原始的DQN结果训练非常不稳定AGV之间的碰撞惩罚多了以后Q值直接发散。读完书里关于off-policy学习和经验回放的部分后我意识到问题出在奖励函数设计碰撞的惩罚太多而单步的正常奖励太少导致TD误差方差过大。我重新设计了奖励把碰撞惩罚的绝对值降下来同时引入目标距离差作为势函数奖励问题迎刃而解。这本书没教我怎么设计AGV奖励函数但它教了我从TD误差的构成上去诊断问题这就是理论的用处。4.4 在Gazebo仿真环境中应用书本知识的经验刚好书里也涉及了机器人仿真的内容我顺便聊一下Gazebo里做强化学习的坑。很多人一上来就想在Gazebo里直接训练这个思路非常危险。Gazebo的物理引擎本身就带延迟加上渲染和通信的耗时每一步交互可能都要100毫秒以上训练一个策略往往需要数百万步交互时间成本不可接受。我个人的建议是三层递进训练法先在Gym或PyBullet这类轻量级环境里验证算法逻辑和超参再把策略迁移到Gazebo环境里做Sim-to-Sim验证最后才考虑Sim-to-Real。书里对domain randomization的讲解正好用得上它通过随机化仿真环境的物理参数质量、摩擦系数、控制延迟等来提高策略的泛化性这是解决Gazebo到真实机器人迁移问题的最实用手段之一。如果你是在Gazebo里做多AGV的路径规划还有一个额外的坑你不仅要训练出能避开障碍物的策略还要考虑多车协同带来的非平稳性——其他AGV的决策会影响当前AGV的状态转移这让环境不再是一个常规的MDP。对于这类问题书里的多智能体强化学习章节有讨论虽然比较简略更实用的方法是用集中训练分布执行的框架比如MAPPO。书里虽然没写MAPPO的实现但你理解了PPO以后再去看MAPPO的代码会轻松很多。5. 因果强化学习这本书藏得最深的一条暗线5.1 为什么要从因果视角重新审视强化学习我读完全书以后发现它用了不少隐晦的方式在铺垫因果推断和强化学习结合的前景。传统强化学习只利用相关性——观察到状态、执行动作、看到回报之间的统计关联。但问题是相关不一定等于因果。比如一个智能体在训练环境里发现天黑后道路湿滑数据关联实际上湿滑的可能是路面本身并没有下雨它学到的策略可能只是记忆了某段时间序列的模式一旦时间变了策略就崩掉。如果它学到的是“刚下过雨→路面湿滑→需要减速”这个因果结构那么即使改变一天中的时间策略仍然稳定。书里将这个思想延伸到解释为什么一些强化学习算法在仿真环境里表现优异但到了现实世界泛化性很差。核心原因就是模型学到的是虚假相关没有catch到环境背后的因果机制。这点对做真实机器人、自动驾驶的同学来说极其致命。5.2 CRL的核心机制把因果工具嵌入RL流程书中虽然对CRL展开不算特别多但它指出了一个方向因果推断工具可以嵌入强化学习的几个关键环节中用来提升样本效率、策略泛化和可解释性。具体来说有这么几个方向值得关注。第一是把因果结构作为先验知识引入表示学习。比如你可以在状态表示学习中加入一个因果图约束encoder的表示维度之间不要出现没有因果解释的复杂依赖这样学到的表示更紧凑也更利于后续学习。第二是因果归因在奖励设计中的应用。比如你设计一个稀疏奖励任务时可以利用因果归因方法判断哪些状态维度对最终奖励的贡献是因果性的从而把这些维度合成一个更密度的奖励信号避免策略在无关维度上浪费探索。第三是干预intervention在off-policy评估中的应用。离线数据里存在选择偏差通过因果推断中的do算子能更准确地评估一个新策略在目标环境里的表现这个方向的研究这两年热度提升很快。书里把这些问题留给读者去思考没有深入展开但对已经具备一定经验的读者来说这个点拨作用已经足够。我自己的体会是强化学习接下来的一个重要演进方向一定是越来越多的因果推断方法进入RL流程这本书敏锐地抓住了这个趋势这也让我对它的评价更高了一层。6. 如何最大化利用这本书一份个人建议的阅读路线6.1 如果你是一名算法工程师我认为你的路线应该这样走先精读第一、二、三章MDP和动态规划这部分能帮你补齐理论短板。然后直接跳到深度强化学习算法的章节把每个算法的数学目标和代码结构对应起来看。最优控制那一章可以放到最后读它更多是给你一个更高维度的视角不直接影响你写代码但会影响你做方案选型。6.2 如果你是一名控制工程师我给你的建议是完全相反的从最优控制那一章开始读。你已经有很强的控制理论功底从这个熟悉的领域切入再去看强化学习如何通过采样和函数逼近来近似最优控制解会非常丝滑。读的时候建议你把书里的无模型RL算法当作“不知道模型时的自适应控制”来理解这样整个知识迁移会很自然。6.3 如果这本书是你研究生涯的第一本强化学习书说实话我劝你谨慎。这本书不是不能作为入门书但你需要准备好在数学推导上反复磨。我的建议是配合Sutton的书一起读以Sutton为主、这本书为辅遇到不理解的地方再看这本书的推导。另外你至少要在读前三章的时候同步做一些简单的代码练习比如用动态规划求解Gridworld问题别光看不练不然真的很难形成直觉。6.4 是否需要动手复现书中的每个算法我的建议是不要把每个算法都完整写一遍时间成本太高但至少要手动复现这几类算法各一个代表DQN、PPO、SAC外加IQL。这四个算法覆盖了off-policy值函数方法、on-policy策略梯度方法、最大熵Actor-Critic方法和离线RL方法。这四个写下来你对现代强化学习的核心范式就有了完整的概念。书里的每个算法都有清晰的伪代码和关键细节说明配合GitHub上一些开源实现比如cleanrl复现起来效率会很高。提醒复现的时候不要太迷信默认超参数。不同环境对超参的敏感度差别很大书里的参数只是起点不是终点。最终判断好不好还是看训练曲线和控制效果不要用“这是论文里的设置”来拒绝调整。7. 这本书的局限性与其他书互补阅读的建议毫无疑问这本书也有它自己的局限。我在读的过程中感受到这么几点第一它对多智能体强化学习的覆盖相对较浅如果你专门做多智能体方向还需要另找资料第二它没有专门章节讲模仿学习、逆强化学习这些和序列决策紧密相关的主题而这些在真实应用中常常和强化学习配合使用第三它不太涉及当前大模型时代的RLHF人类反馈强化学习这个技术现在红得发紫但这本书成书时间较早第四它没有详细讲到分布式RL框架比如IMPALA、Ape-X这些这些内容如果靠自己去查论文需要花费不少时间。我的意思是这本书解决的是“地基”问题它不是强化学习的百科全书。用最优控制的框架把强化学习的核心方法论讲清楚帮读者建立一个统一的视角这件事它完成得很好。剩余的各种前沿主题本来就该靠论文和专题书去补充。没有一本书是万能的重要的是读完之后你获得了什么样的认识框架。从这个意义上来说这本书很适合放在案头作为常备参考。第一遍读是通过它建立体系之后每做一个项目都回头翻翻相关章节往往会有新的体会。像我最近在做逆强化学习相关的工作就翻回去重读了回报设计相关的小节依然觉得有收获。8. 写在最后一些实操上的建议我个人在实际使用中印象最深的一个体会是这本书可能改变你调试RL算法的方式。没读它之前我调试PPO就是调整学习率和clip参数效果不好就加网络宽度再不行就换算法完全是经验驱动的盲调。读完它以后再调试我会先问自己现在的问题是在策略评估环节Critic不知道什么样的动作是好的还是在策略优化环节Actor的更新方向受到方差影响过大这个诊断式的思维切换帮我节省了大量试错时间。这也是为什么我特别推荐工程师认真读一读这本书——表面上你在读理论实际上你在获得一种更高效的调试方法论。最后再分享一个读这本书的小技巧每一章读完以后不要急着进入下一章试着用自己的话把这一章的核心公式从头到尾推导一遍。不用一字不差逻辑链条通顺就行。我的经验是第一次“默写”的时候往往会有卡壳而那个卡壳的地方恰恰是你还没有真正理解的地方。回头翻书补上比多看一遍的收获大得多。祝你阅读愉快也欢迎你读完以后和我交流读书心得。