强化学习(7):规划与学习——Dyna-Q 的基本思想

规划与学习的衔接
在前面的几篇文章中,已经沿着两条主线展开了强化学习中的基本方法。
第一条主线是已知环境模型时的求解方法。动态规划(Dynamic Programming)属于这一类。在这种设定下,状态转移概率和奖励函数都是已知的,因此可以直接对未来结果做期望计算,并据此完成策略评估(Policy Evaluation)和策略改进(Policy Improvement)。前面讨论过的策略迭代(Policy Iteration)与值迭代(Value Iteration),都建立在这一前提之上。
第二条主线是未知环境模型时的经验学习方法。在这种情况下,智能体无法直接获得完整的环境转移规律,只能通过与环境交互收集样本,再利用这些样本更新价值函数或策略。前面已经讨论过的蒙特卡洛(Monte Carlo)方法、时序差分(Temporal Difference, TD)方法、多步时序差分方法以及 TD($\lambda$),都属于这一类思路。它们的共同点在于:学习所依赖的信息来自真实交互经验,更新过程不要求事先给出显式环境模型。
这两条主线各自都有明显特点。
基于模型的方法能够利用环境的结构信息进行推演,因此往往具有较高的计算效率。只要模型准确,智能体就可以在不增加真实交互次数的情况下,反复利用模型进行更新。基于真实经验的方法则更适合模型未知的场景,因为它不要求提前掌握环境规律,但每一次更新通常都要依赖已经采样到的真实经验,样本利用率往往受到限制。
于是,接下来我们可以想到一个新的方向:如果智能体在与环境交互的过程中,能够逐步学到一个近似的环境模型,那么是否可以把真实经验学习与基于模型的规划结合起来,在同一套框架中同时利用这两类信息。
这正是 Dyna-Q(Dyna-Q)要解决的核心思路。
从位置上看,Dyna-Q 处在前面两类方法之间。它保留了强化学习中“通过真实交互获得经验”的基本设定,同时又引入了一个可以由经验逐步构建出来的模型。这样一来,真实经验就不再只被使用一次:一方面,它可以像普通的 TD 或 Q-learning 更新那样,直接用于修正当前价值估计;另一方面,它还可以被写入模型,再由模型生成额外的模拟经验,继续支持后续更新。
那么,现在要进一步研究下面这个问题:当智能体既能从真实经验中学习,又能基于经验形成近似模型时,怎样把“学习”和“规划”统一起来。
模型的含义
在引出 Dyna-Q 之后,接下来需要先明确一个基本概念:这里所说的模型(Model),到底指什么。
在强化学习语境下,模型通常指的是对环境动力学的一种描述。更具体地说,它回答的是下面这类问题:当智能体在状态 $s$ 下执行动作 $a$ 之后,环境会转移到哪里,以及会给出什么奖励。
如果采用表格型设定,那么这个模型可以写成两部分信息:
- 状态转移结果;
- 奖励结果。
在随机环境中,模型可以理解为对条件分布
$$ P(s', r \mid s,a) $$的描述,也就是给定当前状态和动作之后,下一个状态 $s'$ 与奖励 $r$ 的联合分布。
在更简单的确定性情形下,模型也可以写成两个映射:
$$ s' = \hat{T}(s,a), \qquad r = \hat{R}(s,a) $$这里的 $\hat{T}$ 表示预测下一个状态的模型,$\hat{R}$ 表示预测奖励的模型。加帽子是为了强调,这里得到的往往不是环境真实规律本身,而是智能体根据经验学到的一个近似描述。
这个定义和前面动态规划中的“已知环境模型”表面上看有些相似,但两者所处的语境并不相同。
在动态规划中,模型被当作一个先验已知条件。也就是说,智能体一开始就能够访问环境的完整转移规律和奖励函数,因此可以直接对所有可能后果做期望计算。前面在讨论动态规划时,环境模型正是其成立的前提之一。
而在 Dyna-Q 中,模型通常并不是一开始就给定的。它来自智能体与环境交互过程中不断积累的真实经验。智能体先采样到形如
$$ (s_t,a_t,r_t,s_{t+1}) $$这样的转移,再把这些经验写入模型,使模型逐步具有“回答如果在状态 $s$ 采取动作 $a$ 会发生什么”这一能力。也就是说,这里的模型是学习得到的模型,而不是预先提供的完整环境描述。
这一点很重要,因为它决定了 Dyna-Q 仍然属于强化学习问题,而没有退回到前面讨论过的纯动态规划框架。
原因在于,Dyna-Q 的出发点仍然是环境模型未知。智能体最初并不知道状态转移规律,也不知道奖励函数,只能通过与环境交互逐步获得经验。这一点和蒙特卡洛方法、TD 方法、n-step TD、TD($\lambda$) 的基本设定是一致的。前面几篇文章讨论这些方法时,主线一直是:在模型未知时,如何依靠真实经验学习价值函数。
因此,Dyna-Q 与动态规划的差别不在于“有没有模型”这一表面特征,而在于模型的信息来源不同:
- 动态规划依赖事先已知、可直接查询的环境模型;
- Dyna-Q 使用的是交互过程中逐步学得的近似模型。
从这个角度看,Dyna-Q 中的模型并不是为了把问题改写成“完全已知模型的规划问题”,而是为了让智能体能够把已经得到的经验进一步整理和复用。模型在这里承担的作用,是把零散的真实经验转化成一种可再次调用的结构,从而支持额外更新。
所以,我们可以作如下定义:
Dyna-Q 中的模型,是由真实经验逐步构建出来的环境近似描述;它服务于后续规划更新,但并不改变强化学习“从交互中学习”的基本前提。
直接学习与规划
明确了模型的含义之后,接下来就可以进一步讨论 Dyna-Q 的内部结构。它之所以重要,并不只是因为“引入了模型”,更关键的是:它把两种原本分开的更新方式放进了同一个循环里。
这两部分通常可以分别称为:
- 直接学习(Direct RL)
- 规划(Planning)
先看直接学习。
所谓直接学习,就是沿用前面已经讨论过的无模型强化学习更新方式,直接利用真实交互经验来修正价值估计。假设在时刻 $t$,智能体真实经历了一次转移
$$ (s_t,a_t,r_t,s_{t+1}) $$那么它可以像前面讨论 Q-learning 时那样,立刻对当前动作价值做一步更新:
$$ Q(s_t,a_t)\leftarrow Q(s_t,a_t)+\alpha\Big[r_t+\gamma \max_{a'}Q(s_{t+1},a')-Q(s_t,a_t)\Big] $$这一步没有任何新设定。它和前面已经讨论过的基于样本的一步动作价值更新完全一致,本质上仍然是在利用真实经验进行学习。前面在讨论时序差分方法时已经指出,这类方法的核心特点,是用一步奖励与后继价值估计构造目标,再对当前估计做增量修正。
因此,在 Dyna-Q 中,直接学习这一部分并没有引入新的价值目标,也没有改变原有的 TD 更新逻辑。它做的事情很直接:真实与环境交互一次,就按已有的一步更新规则学习一次。
再看规划。
这里的规划,不是动态规划意义下“对完整已知模型做全期望计算”,而是指:利用已经学到的模型,构造一些模拟经验,再对价值函数做额外更新。
具体来说,当模型中已经记录了某些状态—动作对的后果之后,智能体就不必每次都重新去真实环境里试一次。它可以从模型中取出一个曾经见过的状态—动作对 $(s,a)$,由模型给出一个预测的奖励和后继状态,例如
$$ (\hat{r},\hat{s}') $$然后把这条“模拟经验”当作一次额外样本,再做一次和前面完全同型的 Q-learning 更新:
$$ Q(s,a)\leftarrow Q(s,a)+\alpha\Big[\hat{r}+\gamma \max_{a'}Q(\hat{s}',a')-Q(s,a)\Big] $$可以看到,这里的差别只在于样本来源变了:
- 直接学习使用的是真实经验;
- 规划使用的是模型生成的模拟经验。
但两者作用到价值函数上的更新形式是同一类的。也就是说,Dyna-Q 的关键不是发明了一条新的 Bellman 目标,而是让原有的一步更新规则可以在两种样本上反复使用。
直接学习负责把真实交互得到的信息尽快写入价值函数,同时也把这些经验写入模型。规划则在此基础上继续利用模型,把已经吸收到模型中的经验再展开成更多可用于更新的样本。前者提供原始信息来源,后者负责进一步挖掘这些信息的价值。两者并不是并列竞争关系,而是前后衔接的关系。
可以把这一过程概括成下面三步:
- 智能体与真实环境交互,得到一条经验;
- 用这条真实经验直接更新 $Q$ 值,并写入模型;
- 从模型中取出若干状态—动作对,生成模拟经验,再做若干次额外更新。
因此,Dyna-Q 的整体结构可以理解为:真实经验负责提供新的事实,模型负责让这些事实被重复利用。 这也解释了,为什么 Dyna-Q 会被看作“规划与学习的结合”。
如果只有直接学习而没有规划,那么它就退化成普通的无模型 TD 控制方法,例如 Q-learning。
如果只有规划而没有新的真实经验,那么模型本身就不会继续修正,整个学习过程也失去了和真实环境对齐的来源。
Dyna-Q 的核心价值,正是在于把这两部分接到了一起:一边通过真实交互继续学习,一边利用学到的模型做额外规划。
Dyna-Q 的基本流程
在概念层面区分了模型、直接学习和规划之后,接下来可以把 Dyna-Q 压缩成一个最小流程。
一次 Dyna-Q 循环通常包含四个步骤。
第一步,智能体按照当前策略与真实环境交互一次,得到一条真实经验:
$$ (s_t,a_t,r_t,s_{t+1}) $$第二步,利用这条真实经验对动作价值函数做一次直接更新。若采用 Q-learning 作为底层更新规则,那么对应的更新写作
$$ Q(s_t,a_t)\leftarrow Q(s_t,a_t)+\alpha\Big[r_t+\gamma \max_{a'}Q(s_{t+1},a')-Q(s_t,a_t)\Big] $$第三步,用这条真实经验更新模型。也就是说,把“在状态 $s_t$ 执行动作 $a_t$ 后会得到什么结果”这条信息写入当前模型。若采用最简单的表格型确定性模型,那么这一步可以理解为记录
$$ (s_t,a_t)\mapsto (r_t,s_{t+1}) $$第四步,从模型中抽取若干个已经见过的状态—动作对,生成模拟经验,并重复进行若干次规划更新。若模型给出的结果是
$$ (s,a)\mapsto (\hat{r},\hat{s}') $$那么规划阶段对应的更新可以写成
$$ Q(s,a)\leftarrow Q(s,a)+\alpha\Big[\hat{r}+\gamma \max_{a'}Q(\hat{s}')-Q(s,a)\Big] $$把这四步连起来看,就能更清楚地看到 Dyna-Q 的结构特点。
它并没有把“与环境交互”和“价值更新”分成两个彼此独立的大阶段,也没有先完整学出模型、再单独切换到规划阶段。相反,这几件事是交替发生的:真实交互提供新信息,直接学习立即吸收这条信息,模型同步记录这条信息,规划再围绕当前模型做若干次额外更新。整个过程是一个不断循环的在线过程。
这里还可以注意到一个很重要的控制量:每次真实交互之后,规划做多少次更新。
如果规划步数取 $0$,那么算法就退化成普通的 Q-learning。
如果规划步数大于 $0$,那么每次真实交互之后,都会追加若干次模型驱动的更新。
规划步数越大,模型在整个学习过程中的参与程度就越高。
因此,Dyna-Q 并不是一个只有“用”或“不用”模型两种状态的算法,而更像是在无模型学习和基于模型更新之间提供了一个连续可调的机制。
Dyna-Q 的核心作用
在前面的几篇文章中,讨论的重点主要是:在环境模型未知时,如何根据经验构造价值更新。无论是蒙特卡洛方法、一步时序差分方法、多步时序差分方法,还是 TD($\lambda$),核心都落在“更新目标如何形成”这一层面。它们彼此之间的差别,主要体现在对未来信息的利用方式不同:有的方法使用完整回报,有的方法使用一步自举目标,有的方法在不同步长之间做折中。
Dyna-Q 所推进的方向,与前面这些方法并不完全相同。它关注的重点,不再是重新构造一种新的价值目标,而是进一步追问:在已经有了基本更新规则之后,怎样让有限的真实交互带来更多学习效果。
这也正是 Dyna-Q 最核心的作用所在。
在普通的无模型方法中,真实经验是学习的唯一来源。智能体必须先与环境发生交互,观察到奖励和状态转移,然后才能利用这条经验更新价值函数。于是,学习速度在很大程度上会受到真实交互次数的限制。前面的方法虽然通过不同方式改进了目标构造,但这个基本事实并没有改变:要继续学习,就需要继续采样。
Dyna-Q 对这一点做出的改进是:在真实经验之外,再引入一个由经验逐步建立起来的模型,使智能体能够围绕已经获得的信息做额外更新。这样一来,学习过程就不再完全绑定于“必须再次到真实环境里试一次”这一条件,而是多了一层模型驱动的内部推演。
因此,Dyna-Q 的核心作用可以概括为一句话:
在不改变强化学习基本交互设定的前提下,提高单次真实经验所能带来的学习推进幅度。
这个判断里有两层意思。
第一,Dyna-Q 并没有脱离“通过交互获得经验”的基本框架。真实环境仍然是新信息的来源,模型并不能凭空替代真实经验。
第二,Dyna-Q 也没有把重点放在“重新定义 Bellman 目标”上。它真正改变的是:一条真实经验进入系统之后,后续能够引发多少学习动作。
从这个角度看,前面的文章主要在回答“怎样更新得更合理”,而 Dyna-Q 则进一步回答“怎样让一次交互更新得更充分”。这两类问题是衔接的,但层次并不相同。前者关心单次更新的形式,后者关心整个学习循环中经验被利用的方式。
也正因为如此,Dyna-Q 在方法谱系中的位置非常自然。它不是与前面方法平行的一类“全新价值目标算法”,而更像是在已有 TD 控制方法之上增加了一个模型驱动的规划环节。
一个简单示例
为了把 Dyna-Q 的作用看得更具体一些,下面可以先看一个很小的表格型场景。
假设智能体当前处于状态 $s$,执行动作 $a$ 之后,真实环境返回奖励 $r$,并转移到下一状态 $s'$。于是,智能体获得了一条最基本的交互经验:
$$ (s,a,r,s') $$在普通的 Q-learning 中,这条经验会立刻触发一次一步更新:
$$ Q(s,a)\leftarrow Q(s,a)+\alpha\Big[r+\gamma \max_{a'}Q(s',a')-Q(s,a)\Big] $$到这里为止,这和前面已经讨论过的内容完全一致。智能体根据这次真实交互,对当前的动作价值估计做出一次修正。
Dyna-Q 会在这一步之后继续往前走。
它会把这条经验写入模型。若考虑最简单的确定性表格模型,那么模型中就会新增一条记录:
$$ (s,a)\mapsto (r,s') $$这条记录的含义很直接:以后如果再次问模型“在状态 $s$ 执行动作 $a$ 会发生什么”,模型就会回答“得到奖励 $r$,到达状态 $s'$”。
接下来,规划步骤开始发挥作用。智能体可以从模型中取出这条刚刚写入的记录,把它当作一次模拟经验,再做一次额外更新:
$$ Q(s,a)\leftarrow Q(s,a)+\alpha\Big[r+\gamma \max_{a'}Q(s',a')-Q(s,a)\Big] $$从公式上看,这次更新和刚才的直接学习没有区别。差别只在于,这一次使用的样本不再来自实时环境反馈,而是来自模型中保存的结果。
如果规划阶段只取出一次这条记录,那么它就会带来一次额外更新。若规划阶段继续从模型中抽取别的状态—动作对,或者多次抽取已经见过的记录,那么价值函数还会继续被推进。
这个简单例子说明了一件很关键的事:Dyna-Q 的额外能力,并不体现为某条全新的更新公式,而体现为在一次真实交互之后,学习过程并没有立刻结束。真实环境给出新信息之后,模型会把这条信息保留下来,后面的规划更新则继续围绕这些已知结果推进价值估计。
如果把这一轮过程压缩成一句话,那么就是:
先用真实经验更新一次,再把这条经验写入模型,然后利用模型继续做若干次更新。
到这里,Dyna-Q 和普通无模型方法之间的差别就已经很直观了。前者在一轮交互之后还有后续的规划阶段,后者通常在直接更新之后就进入下一次真实采样。
与 Q-learning 的关系
从前面的示例可以进一步看出,Dyna-Q 和 Q-learning 之间有很紧的联系。
如果只看直接学习这一步,Dyna-Q 采用的更新规则,与前面已经讨论过的 Q-learning 是一致的:
$$ Q(s_t,a_t)\leftarrow Q(s_t,a_t)+\alpha\Big[r_t+\gamma \max_{a'}Q(s_{t+1},a')-Q(s_t,a_t)\Big] $$这里的目标仍然是“当前奖励 + 下一状态的最大动作价值估计”。这一点没有变化。
规划阶段也沿用了同样的更新形式。设模型给出一条模拟转移
$$ (s,a)\mapsto (\hat r,\hat s') $$那么对应的规划更新写成
$$ Q(s,a)\leftarrow Q(s,a)+\alpha\Big[\hat r+\gamma \max_{a'}Q(\hat s',a')-Q(s,a)\Big] $$和直接学习相比,区别只在于样本来源不同:前者来自真实环境,后者来自当前模型。
因此,从价值更新的角度看,Dyna-Q 可以理解为:在 Q-learning 外面加入了“模型记录”和“规划更新”两个环节。Q-learning 负责给出一步控制更新,Dyna-Q 负责把这种更新放进一个更大的循环中,使真实经验与模拟经验都能推动同一个 $Q$ 函数继续变化。
经典 Dyna-Q 通常选择 Q-learning 作为底层更新规则,还有一个原因。Q-learning 本身是离策略(off-policy)的一步控制方法,更新目标直接朝着
$$ \max_{a'}Q(s',a') $$所对应的方向推进。这样做时,规划阶段不需要额外追踪“下一步实际又按什么动作采样”,表达会更简洁,也更适合和模型生成的模拟经验结合起来。
当然,从更一般的角度说,Dyna 的思想并不只能够和 Q-learning 放在一起理解。只要某种强化学习更新规则能够利用样本转移进行学习,那么原则上都可以讨论:能否在真实样本之外,再引入模型生成的模拟样本来做额外更新。
模型误差的影响
接下来需要补上一点边界说明:Dyna-Q 的规划更新能否真正起作用,很大程度上取决于模型本身是否可靠。
在最简单的表格型确定性环境中,这一点通常比较容易处理。智能体一旦真实经历了某个状态—动作对,对应的后继状态和奖励就可以被直接记录下来。此时模型和环境之间的偏差往往较小,规划阶段基于模型生成的模拟经验也更接近真实情况,因此额外更新通常能够提供有效帮助。
但在更一般的情形下,模型往往只能是近似的。
例如,环境本身可能带有随机性,同一个状态—动作对未必总会通向同样的结果;也可能是因为采样还不充分,模型只看到了有限经验,尚不足以准确描述环境规律。这样一来,模型给出的
$$ (\hat r,\hat s') $$就可能和真实环境中的结果存在偏差。
一旦模型出现偏差,规划更新也会受到影响。原因很直接:规划阶段所依赖的样本来自模型,如果模型给出的状态转移或奖励有误,那么这些额外更新推动的方向也可能偏离真实环境下应有的价值变化方向。
这一点在 Dyna-Q 中尤其值得注意,因为规划更新通常不是只做一次。模型误差若已经存在,那么它就可能在多次规划步骤中被反复带入更新过程。模型越不准确,规划步数越多,这种影响通常就越明显。
因此,Dyna-Q 的效果通常依赖下面这个前提:模型至少要在当前学习阶段提供足够有用的近似。
这也说明,Dyna-Q 更适合作为一种“规划与学习如何结合”的基础框架来理解。在小规模、离散、结构清晰的环境里,这个框架往往非常自然,思想也很容易展示出来。到了复杂环境中,模型学习本身就会成为新的难点,后续更一般的基于模型强化学习方法,很多都在继续处理这件事。
小结
这一篇的重点,是把 Dyna-Q 放回前面整条方法演化脉络中去理解。
前面已经分别讨论过两类基本思路。一类是在已知环境模型时进行规划,典型代表是动态规划;另一类是在模型未知时依靠真实经验进行学习,典型代表是蒙特卡洛方法、时序差分方法、多步时序差分方法以及 TD($\lambda$)。Dyna-Q 之所以值得单独讨论,就在于它把这两条思路接到了一起:智能体一边通过真实交互学习价值函数,一边根据经验逐步形成环境模型,再利用这个模型做额外的规划更新。
在这个框架下,模型的含义也需要单独澄清。Dyna-Q 中的模型并不是预先给定的完整环境描述,而是由真实经验逐步构建出的近似结果。它回答的是“在某个状态下执行某个动作之后,大致会发生什么”,并为后续规划提供可调用的信息来源。
进一步看,Dyna-Q 的直接学习部分和规划部分并没有采用两套彼此独立的更新逻辑。以 Q-learning 为例,真实经验和模拟经验都可以驱动同一种一步动作价值更新。这样一来,Dyna-Q 的关键变化就不在单次更新公式本身,而在整个学习循环的组织方式:真实环境负责提供新信息,模型负责围绕已有信息继续推进更新。
因此,Dyna-Q 最核心的意义,可以概括为一点:它展示了在强化学习中,规划与学习并不需要被看作完全分离的两件事。只要智能体能够在交互过程中逐步形成对环境的局部认识,这些认识就可以继续服务于后续决策学习。也正因为如此,Dyna-Q 往往被看作理解基于模型强化学习思想的一块重要起点。
当然,Dyna-Q 的效果也依赖模型质量。模型越接近真实环境,规划更新通常越有效;模型偏差越大,额外更新带来的帮助就越有限,甚至可能引入误导。不过,这一问题属于后续更一般的基于模型强化学习方法需要继续处理的内容。对于本篇来说,更重要的是先把 Dyna-Q 的基本思想看清楚:在模型未知的前提下,通过真实经验学习价值,同时在学习过程中逐步形成模型,并利用模型继续做规划更新。