在我的理解中,DQN 很有用,因为它利用神经网络作为 q 值函数逼近器,在训练之后,它可以泛化到看不见的状态。
我理解当输入是连续值的向量时它是如何工作的,但是,我不明白为什么 DQN 会与离散状态空间一起使用。如果神经网络的输入只是一个没有明确结构的整数,这应该如何概括?
如果我们不只向网络提供一个整数,而是提供一个整数向量,其中每个元素代表状态的一个特征(分离速度、位置等),而不是将所有内容折叠成一个整数,那么概括得更好?
在我的理解中,DQN 很有用,因为它利用神经网络作为 q 值函数逼近器,在训练之后,它可以泛化到看不见的状态。
我理解当输入是连续值的向量时它是如何工作的,但是,我不明白为什么 DQN 会与离散状态空间一起使用。如果神经网络的输入只是一个没有明确结构的整数,这应该如何概括?
如果我们不只向网络提供一个整数,而是提供一个整数向量,其中每个元素代表状态的一个特征(分离速度、位置等),而不是将所有内容折叠成一个整数,那么概括得更好?
当环境的所有可能状态的数量是有限的时,可以说环境具有离散的状态空间。例如,井字游戏有一个离散的状态空间,因为棋盘上有 9 个单元,并且只有这么多不同的方式来排列 Os 和 X。
无论使用整数还是非整数来描述状态空间,它都可以是离散的。例如,考虑一个用单个数字表示状态的环境。如果所有可能状态的集合是,你的状态空间是离散的,因为只有状态。但是,如果所有可能的状态都是来自的实数集到,而不是它不再是离散的——因为它们有无数个。状态空间仍然可以是离散的,即使可能的状态用多个数字表示。例如,我们的环境可能是立方体,其中代理只允许站在整数坐标上。在这种情况下,有代理可以在不同的地方,因此状态空间是离散的。
深度 Q 网络可以设计为接受任何类型的输入;就像一个普通的人工神经网络,它不仅限于一个整数。DQN 的输入是环境的状态,不管它是如何表示的。对于前面的示例,您可以将 DQN 设置为具有输入层神经元,每个接受一个整数来描述代理在轴。
Q-learning 的一个缺点是当环境有大量的状态和动作时,表示每个状态-动作对在记忆方面变得不切实际。想想国际象棋,其中有很多不同的可能位置,每个位置都有多个可用的移动。此外,为了让智能体正确学习,必须访问每个状态-动作对值(智能体需要确定 Q 值),这在训练时间方面是不切实际的。
DQN 算法解决了这些问题:它只需要存储神经网络(如果您使用 DQN 的变体,其他东西也很少),并且不需要访问每个状态-动作对来学习。他们学习的方式是通过调整网络中的权重和偏差来逼近最优策略。如果算法正确实现,代理应该能够选择一些有用的模式(或解决环境问题)。
我将这篇论文用作我的一个项目的参考。它实现了 DQN 算法来学习玩 Sungka(一种类似于 Mancala 的游戏),它具有有限数量的可能状态和动作。