Hana's Blog
RL笔记(7):Dyna-QBlur image

引言(Introduction)#

在之前的 Q-Learning 和 SARSA 中,智能体只能通过真实地与环境交互(摔跟头、吃金币)来学习,这被称为 无模型强化学习 (Model-Free RL)。这种方式虽然稳健,但效率较低,因为真实交互往往昂贵且缓慢。

基于模型的强化学习 (Model-Based RL) 引入了一个新的思路:如果智能体能学会环境的运行规律(建立一个模型),它就可以在脑海中“推演”未来,从而减少对真实世界的依赖。

💡 直觉理解

  • Model-Free (Q-Learning):像是在练习投篮,必须每次真把球投出去才知道进没进。
  • Model-Based (Dyna-Q):像是下棋高手,不仅在实战中学习,还在脑海中复盘和推演(Planning),“如果我走这一步,对手可能会那样走…”。

核心概念#

什么是模型 (Model)?#

在 RL 中,模型 MM 指的是对环境动态的模拟。给定状态 ss 和动作 aa,模型能预测出下一个状态 ss' 和奖励 rr

s,rM(s,a)s', r \leftarrow M(s, a)
  • 预知模型:如下棋,规则是完全已知的。
  • 学习模型:如机器人走路,需要通过观测数据 (s,a,r,s)(s, a, r, s') 来拟合环境规律。

两个关键指标#

  • 收敛效果:算法收敛后能够获得的期望回报。
  • 样本复杂度 (Sample Complexity):达到同样的性能,需要在真实环境中交互多少次。
    • Model-Based 的核心优势就是降低样本复杂度(少走弯路)。

学习与规划#

Dyna-Q 架构将 RL 过程分为了两部分:

  1. 直接强化学习 (Direct RL):利用真实经验更新价值函数(和 Q-Learning 一样)。
  2. 规划 (Planning):利用模拟经验(模型生成的)更新价值函数。

Dyna-Q 算法#

Dyna-Q 是将 Q-Learning 与规划结合的最简单范例。它维护一个简单的查表式模型 (Table-based Model),记录在这个状态 ss 做动作 aa 曾经发生了什么。

算法流程#

在每个时间步 tt

  1. 行动:在真实环境中执行动作,获得 (s,a,r,s)(s, a, r, s')
  2. 直接学习:用真实数据更新 Q(s,a)Q(s,a)
  3. 模型学习:把 (s,a)(r,s)(s, a) \to (r, s') 记入模型(如果是确定性环境,直接覆盖;如果是随机环境,可能需要记录分布)。
  4. 规划 (Planning)
    • 重复 NN 次(比如 10 次):
    • 做梦:随机从记忆中挑选一个曾经去过的状态 ssims_{sim}曾经做过的动作 asima_{sim}
    • 推演:询问模型得到模拟结果 rsim,ssimr_{sim}, s'_{sim}
    • 间接学习:用模拟数据更新 Q(ssim,asim)Q(s_{sim}, a_{sim})

算法伪代码#

  Initialize Q(s,a),Model M(s,a)  For episode e=1E do:Initialize state sFor step t=1T do:Choose action a using ϵ-greedyExecute a, observe r,s1. Direct RL (Q-Learning update):Q(s,a)Q(s,a)+α[r+γmaxaQ(s,a)Q(s,a)]2. Model Learning:M(s,a)(r,s)3. Planning (Loop N times):For n=1N do:Randomly select ssim previously observedRandomly select asim previously taken in ssimrsim,ssimM(ssim,asim)Q(ssim,asim)Q(ssim,asim)+α[rsim+γmaxaQ(ssim,a)Q(ssim,asim)]End ForssEnd For  End For\begin{aligned} & \bullet \; \text{Initialize } Q(s,a), \text{Model } M(s,a) \\ & \bullet \; \textbf{For } \text{episode } e = 1 \to E \textbf{ do}: \\ & \bullet \qquad \text{Initialize state } s \\ & \bullet \qquad \textbf{For } \text{step } t = 1 \to T \textbf{ do}: \\ & \bullet \qquad \qquad \text{Choose action } a \text{ using } \epsilon\text{-greedy} \\ & \bullet \qquad \qquad \text{Execute } a, \text{ observe } r, s' \\ & \bullet \qquad \qquad \textbf{1. Direct RL (Q-Learning update):} \\ & \bullet \qquad \qquad Q(s,a) \leftarrow Q(s,a) + \alpha [r + \gamma \max_{a'} Q(s', a') - Q(s,a)] \\ & \bullet \qquad \qquad \textbf{2. Model Learning:} \\ & \bullet \qquad \qquad M(s, a) \leftarrow (r, s') \\ & \bullet \qquad \qquad \textbf{3. Planning (Loop N times):} \\ & \bullet \qquad \qquad \textbf{For } n = 1 \to N \textbf{ do}: \\ & \bullet \qquad \qquad \qquad \text{Randomly select } s_{sim} \text{ previously observed} \\ & \bullet \qquad \qquad \qquad \text{Randomly select } a_{sim} \text{ previously taken in } s_{sim} \\ & \bullet \qquad \qquad \qquad r_{sim}, s'_{sim} \leftarrow M(s_{sim}, a_{sim}) \\ & \bullet \qquad \qquad \qquad Q(s_{sim}, a_{sim}) \leftarrow Q(s_{sim}, a_{sim}) + \alpha [r_{sim} + \gamma \max_{a'} Q(s'_{sim}, a') - Q(s_{sim}, a_{sim})] \\ & \bullet \qquad \qquad \textbf{End For} \\ & \bullet \qquad \qquad s \leftarrow s' \\ & \bullet \qquad \textbf{End For} \\ & \bullet \; \textbf{End For} \end{aligned}

优缺点分析#

优势#

  • 样本效率极高:在每次与环境交互后,Dyna-Q 会进行 NN 次规划。这意味着一条真实经验被复用了 N+1N+1。对于真实交互很昂贵的场景(如机器人实验),这非常有用。

劣势#

  • 模型偏差 (Model Bias):这是 Model-Based RL 的死穴。
    • 如果模型学错了(比如现实中走这一步会掉坑里,模型却认为会飞过去),那么规划得越多,智能体就在错误的道路上越走越远。
    • 解决方案通常涉及不确定性估计(如果对模型预测不自信,就不要信它)或探索奖励(Dyna-Q+,鼓励去验证模型不确定的地方)。

总结#

Dyna-Q 完美展示了强化学习如何结合“行万里路”(真实交互)与“读万卷书”(模型规划)。 在下一章,我们将正式告别“表格型 (Tabular)”强化学习,引入神经网络,进入 深度强化学习 (Deep Reinforcement Learning) 的时代。

RL笔记(7):Dyna-Q
https://hana-blog.top/blog/rl-note-7
Author 菊花花
Published at December 16, 2025
Comment seems to stuck. Try to refresh?✨