Dyna-Q 是一种强化学习算法,它结合了真实世界的经验和模拟规划来提高学习效率。它建立在 Q-learning 的基础上,Q-learning 是一种无模型方法,其中代理通过更新 Q 表来学习策略,该 Q 表估计特定状态下行动的预期奖励。Dyna-Q 添加了一个基于模型的组件:代理在学习环境模型(例如,状态转移和奖励)的同时,利用该模型生成模拟经验。这种混合方法允许代理通过直接交互和利用所学模型进行规划来更新其 Q 表,从而在无需额外真实世界数据的情况下加速学习。
该算法分两个阶段运行。首先,在实际交互期间,代理在环境中采取行动,观察结果,并使用 Q-learning 规则更新其 Q 表(例如,Q(s,a) += learning_rate * [reward + discount * max(Q(s’,a’)) - Q(s,a)])。同时,它将这些经验记录在一个模型中——通常是一个简单的查找表,存储每个(状态,行动)对最近观察到的下一个状态和奖励。其次,在规划期间,代理从其经验缓冲区中采样过去的状态和行动,使用模型模拟转移,并将相同的 Q-learning 更新规则应用于这些合成经验。例如,在网格世界导航任务中,从单元格 (1,1) 向右移动到达 (1,2) 并获得奖励 0 后,代理稍后将在规划期间重放此(状态、行动、下一个状态、奖励)元组,以优化其 Q 值,即使它最近没有物理上重新访问过 (1,1)。
一个关键的实际考虑是平衡真实世界的交互和规划步骤。开发者可以控制每次真实交互发生多少次模拟更新(例如,5-50 次)。这种权衡影响计算成本和学习速度:更多的规划步骤减少了昂贵的真实交互的需求,但增加了内存和处理负担。当环境相对稳定时,Dyna-Q 的效果最好,因为频繁的变化可能会使学习到的模型失效。例如,如果在之前开放的网格单元中出现了一堵墙,则该单元的模型存储的转移将变得不正确,直到代理重新经历该变化。实现 Dyna-Q 通常涉及维护一个经验缓冲区用于采样,并在动态环境中定期验证模型的准确性。