【发布时间】:2021-04-26 06:07:10
【问题描述】:
我想知道在同一问题上运行时,深度 Q 学习与 Q 学习的收敛时间。谁能告诉我他们之间的模式?用图表来说明会更好。
【问题讨论】:
标签: deep-learning q-learning dqn
我想知道在同一问题上运行时,深度 Q 学习与 Q 学习的收敛时间。谁能告诉我他们之间的模式?用图表来说明会更好。
【问题讨论】:
标签: deep-learning q-learning dqn
简而言之,状态越复杂,DQN 相对于 Q-Learning 的效果就越好(所谓复杂,是指所有可能状态的数量)。当状态过于复杂时,由于时间和硬件的限制,Q-learning 变得几乎不可能收敛。
注意DQN实际上是一种Q-Learning,它使用神经网络来充当q表,Q-network和Q-table都用于输出以状态为输入的Q值。我将继续使用 Q-learning 来引用简单版本的 Q-table,DQN 和神经网络版本
如果不指定具体问题,你就无法判断收敛时间,因为它真的取决于你在做什么:
例如,如果你在做一个像 FrozenLake 这样简单的环境:https://gym.openai.com/envs/FrozenLake-v0/
只要你有一个合理的奖励函数,Q-learning 会比 DQN 收敛得更快。
这是因为 FrozenLake 只有 16 个状态,Q-Learning 的算法非常简单高效,运行速度比训练神经网络快很多。
但是,如果您正在做类似 atari:https://gym.openai.com/envs/Assault-v0/
有数百万个状态(请注意,即使是单个像素差异也被认为是全新的状态),Q-Learning 需要枚举 Q-table 中的所有状态才能真正收敛(因此它可能需要非常大的内存加上非常长的训练时间能够枚举和探索所有可能的状态)。事实上,我不确定它是否会在一些更复杂的游戏中收敛,仅仅是因为状态太多。
这是 DQN 变得有用的时候。神经网络可以概括状态并找到状态和动作(或更准确地说是状态和 Q 值)之间的函数。它不再需要枚举,而是学习状态中隐含的信息。即使你从来没有在训练中探索过某个状态,只要你的神经网络经过训练学习了其他相似状态上的关系,它仍然可以泛化并输出 Q 值。因此收敛起来要容易得多。
【讨论】: