基于模型的强化学习包含多种方法,但它们都共享之前介绍的核心思想:学习环境模型,然后使用该模型辅助决策。然而,模型的学习方式和后续使用方式可能存在显著差异。理解这些区别对于为特定问题选择正确的方法很重要。我们可以从几个方面对基于模型的方法进行分类。模型如何表示和学习?第一个主要区别在于模型是明确给出,还是需要从经验中学习;如果需要学习,它又是如何表示的。已知模型: 在某些场景下,尤其是在经典规划问题或模拟中,我们可能已经拥有一个准确的环境动态模型($P(s'|s, a)$)和奖励函数($R(s, a)$)。如果已知一个完善的模型,问题就简化为规划。像值迭代或策略迭代这样的方法可以直接计算最优值函数和策略,而无需与(真实)环境进行任何进一步的交互。虽然这在实际的强化学习设置中通常不是这样,但使用已知模型进行规划可作为理论基准,并且是理解使用学习所得模型的方法的根本所在。学习所得模型: 这是强化学习中更常见、更具挑战性的情况。智能体必须从它通过交互收集的数据($s, a, r, s'$)中估计环境的动态和奖励。这种学习所得模型的结构有所不同:显式转移和奖励模型: 这些方法旨在直接近似转移概率 $P(s'|s, a)$ 和奖励函数 $R(s, a)$(或 $R(s, a, s')$)。表格模型: 对于小型、离散的状态-动作空间,可以直接存储计数,并凭经验估计概率和平均奖励。这种方法扩展性差。函数近似器: 对于更大或连续的空间,函数近似是必要的。常见选择包括:线性模型:简单,但通常缺乏处理复杂动态的能力。高斯过程:提供不确定性估计,但计算成本高昂。神经网络:表达能力强的函数近似器,能够对复杂动态进行建模。概率神经网络通常更受青睐,因为它们可以提供对其预测的不确定性估计,这对于规划很有价值(例如,知道模型不准确的地方)。这里的一个重大挑战是累积误差:一步模型预测中的微小不准确性可能会在更长的模拟轨迹中累积,导致长期的规划效果不佳。隐式模型(潜在模型): 有些方法并非显式预测下一状态的概率分布,而是在潜在(压缩)空间中学习模型,或学习生成过程。规划可能发生在这个潜在空间内,或者模型可能用于生成合理的未来轨迹,而无需显式表示 $P(s'|s, a)$。例子包括编码器将状态映射到潜在空间、动态在这个潜在空间中预测、解码器重建状态特征或预测奖励的架构。学习所得模型如何被应用?一旦模型(无论是给定的还是学习所得的)可用,下一个问题是智能体如何使用它。为免模型更新模拟经验(背景规划): 学习所得模型充当模拟器,生成额外的“想象”经验 $(s, a, r, s')$。然后,这些模拟数据被输入到标准免模型强化学习算法(如Q学习或SARSA)中,仿佛是真实经验一样。这使智能体能够执行额外的更新,并可能比仅依赖真实交互学习得更快或更具样本效率。我们不久将考察的Dyna-Q算法就是这种方法的典型例子。它交织真实交互、模型学习和规划(模拟更新)。决策时规划(前瞻搜索): 模型在智能体需要选择动作的那一刻被明确用于规划。智能体从当前状态开始,针对各种动作序列模拟潜在的未来轨迹,使用学习所得模型(以及可能学习所得的值函数)评估结果,并选择导致最佳预测结果的动作。轨迹采样: 随机采样动作序列,使用模型模拟它们,估计每个序列的回报,并选择启动最佳序列的动作。蒙特卡洛树搜索(MCTS): 一种复杂的启发式搜索算法,智能地探寻未来可能轨迹的树,使用学习所得模型。MCTS在搜索过程中平衡了探寻(尝试较少访问的路径)和利用(关注有前景的路径)。它在AlphaGo和AlphaZero中的成功应用很大程度上依赖于学习所得模型。模型预测控制(MPC): 在每一步,智能体使用模型规划一个有限时间范围内的动作序列,只执行序列中的第一个动作,从真实环境观察结果状态,然后从新状态重新规划。通过模型梯度直接优化策略: 如果学习所得模型是可微分的(例如,神经网络),并且奖励函数是已知或可微分地学习所得的,那么可以通过反向传播穿过学习所得的动态模型来计算预期回报相对于策略参数的梯度。这允许使用梯度上升直接优化策略,如果模型准确,可能会带来高效的学习。然而,这种方法对模型误差敏感,因为模型梯度中的不准确性可能使策略优化偏离方向。混合方法: 许多先进技术结合了这些思想。例如,基于模型的预测可能会告知免模型更新(如Q学习)中使用的目标,或者通过免模型方法学习的值函数可能会用于评估基于模型规划期间达到的状态(如AlphaZero)。下图说明了基于模型强化学习的一般流程,强调了模型学习和使用所处的位置。digraph G { rankdir=LR; graph [fontname="sans-serif", fontsize=10]; node [shape=box, style=rounded, fontname="sans-serif", fontsize=10, margin=0.2]; edge [fontname="sans-serif", fontsize=9]; subgraph cluster_agent { label = "智能体组件"; labelloc=b; bgcolor="#e9ecef"; Policy [label="策略 π(a|s)", shape=ellipse, style=filled, fillcolor="#a5d8ff", width=1.5]; ValueFunc [label="值/Q函数", shape=ellipse, style=filled, fillcolor="#a5d8ff", width=1.5]; Model [label="学习所得模型\nP(s'|s,a), R(s,a)", shape=cylinder, style=filled, fillcolor="#ffec99", width=1.5, height=0.8]; Planner [label="规划 / 模拟", shape=cds, style=filled, fillcolor="#b2f2bb", width=1.5, height=0.8]; } subgraph cluster_env { label = "交互循环"; labelloc=b; bgcolor="#dee2e6"; Env [label="真实环境", shape=box3d, style=filled, fillcolor="#ffc9c9", width=1.5]; Experience [label="经验缓冲区\n(s, a, r, s')", shape=folder, style=filled, fillcolor="#ced4da", width=1.5]; } Policy -> Env [label=" 动作 a ", weight=2]; Env -> Experience [label=" 状态 s',\n 奖励 r ", weight=2]; Experience -> Policy [label=" 直接更新(免模型)", style=dashed, color="#495057"]; Experience -> ValueFunc [label=" 直接更新(免模型)", style=dashed, color="#495057"]; Experience -> Model [label=" 学习\n 模型", color="#f59f00", penwidth=2, weight=2]; Model -> Planner [label=" 提供动态\n 和奖励", color="#37b24d", penwidth=2, weight=2]; Planner -> ValueFunc [label=" 模拟更新\n (例如, Dyna-Q)", style=dotted, color="#37b24d", penwidth=2]; Planner -> Policy [label=" 通过规划/模拟\n 改进策略", style=dotted, color="#37b24d", penwidth=2]; Planner -> Policy [label=" 指导动作选择\n (例如, MCTS/MPC)", style=dashed, color="#1c7ed6", penwidth=2]; // Invisible edges for layout guidance if needed Policy -> ValueFunc [style=invis]; Model -> Planner [style=invis]; }该图说明了智能体组件与环境之间的关系。收集真实经验,既用于直接的免模型更新(灰色虚线),也用于学习模型(橙色线)。然后,学习所得的模型被规划组件(绿色线)使用,要么生成模拟经验来更新策略/值函数(绿色虚线,Dyna-Q风格),要么通过前瞻搜索直接指导动作选择(蓝色虚线,MCTS/MPC风格)。这种分类提供了一个理解基于模型强化学习中不同理念的框架。在接下来的章节中,我们将考察Dyna-Q等特定算法,并考察MCTS等规划方法的整合。