介绍

FrozenLake-v1 ☃️ 和 Taxi-v3 🚕环境相对简单,状态空间是离散且较小的(FrozenLake-v1 有 16 个不同的状态,Taxi-v3 有 500 个), Atari 游戏中的状态空间可以包含从$10^9$ 到$10^{11}$个状态。

在状态空间较大的环境中,生成和更新 Q 表会变得低效

深度 Q 学习不是使用 Q 表,而是使用一个神经网络,该网络接收一个状态,并根据该状态近似每个动作的 Q 值

从 Q 学习到深度 Q 学习

Q-Learning 是一种用于训练我们的 Q-函数的算法, Q-函数是一种动作-价值函数—决定了在特定状态下执行特定动作的价值

Q 函数的内部由一个 Q 表编码,Q 表中的每个单元格对应一个状态-动作对的价值, 将这个 Q 表视为 Q 函数的记忆。

在这种情况下,最好的想法是使用参数化的 Q 函数$Q_θ(s,a)$近似 Q 值

深度 Q 网络(DQN)

image.png

作为输入,将通过网络的 4 帧堆栈作为状态,并输出在该状态下每个可能动作的 Q 值向量

然后,就像 Q 学习一样,只需要使用 $\epsilon$ 贪婪策略选择要采取的动作

输入预处理和时序限制

需要预处理输入,因为希望减少状态空间的复杂性,从而减少训练所需的计算时间

为了实现这一点,将状态空间减少到 84x84,并将其转换为灰度图像,(三个颜色通道(RGB)减少到了 1)因为在 Atari 环境中颜色并不包含重要信息

<aside> 💡

为什么要将四帧图像堆叠在一起?将帧堆叠在一起是因为这有助于处理时间上的局限性。 例子: 以Pong游戏为例

image.png

你能告诉我球要往哪里去吗?不,因为一帧不足以感知运动!

但如果我再添加三帧呢?在这里你可以看到球是往右走的。

image.png

</aside>