Q-learning 可以用于连续(状态或动作)空间吗?

人工智能 强化学习 q学习 dqn 连续动作空间 连续状态空间
2021-11-16 20:55:33

许多示例都使用基于表格的 Q 学习方法。这可能适用于离散状态(观察)或动作空间,例如网格世界中的机器人,但是有没有办法将 Q-learning 用于连续空间,例如钟摆的控制?

2个回答

连续状态空间的 Q 学习

是的,这是可能的,只要您使用某种近似机制。一种方法是离散状态空间,而不必将空间减少到少数状态。如果您可以采样和更新足够多的时间,那么几百万个状态并不是什么大问题。

然而,对于较大的状态空间,更常见的是对动作值使用某种形式的函数逼近。这经常被注意到q^(s,a,θ)表明它既是一个估计值(抑扬符q^) 并且您正在学习一些函数参数 (θ)。使用函数逼近的 Q 学习有两种流行的方法:

  • 将经过处理的状态版本的线性函数逼近为特征。已经提出并测试了许多生成特征的变体,包括傅里叶级数、瓦片编码、径向基本函数。这些方法的优点是它们简单,并且比非线性函数逼近更稳健。选择哪一个取决于您的状态空间代表什么,以及价值函数可能如何根据状态空间内的位置而变化。

  • 神经网络函数逼近。这本质上就是深度 Q 网络 (DQN)。如果您有马尔可夫状态描述,您可以对其进行扩展以合理地与神经网络一起工作,并遵循其他 DQN 最佳实践(经验重播表、缓慢变化的目标网络),这可以很好地工作。

连续动作空间的 Q 学习

除非您将动作空间离散化,否则这将变得非常笨拙。

问题是,鉴于s,a,r,s,Q-learning需要评估TD目标:

Qtarget(s,a)=r+γmaxaq^(s,a,θ)

需要检查的空间越大,评估最大值的过程就会变得越低效率和越不准确。

对于较大的动作空间,使用双重 Q 学习可以提供帮助(使用 Q 的两个估计值,一个用于选择目标动作,另一个用于估计其值,您可以在不同的步骤中交替使用)——这有助于避免选择时的最大化偏差一个动作,因为它具有最高价值,然后在计算中使用该最高价值会导致高估价值。

对于非常大或连续的动作空间,检查所有值通常是不切实际的。在这种情况下,Q-learning 的替代方法是使用策略梯度方法,例如 Actor-Critic,它可以处理非常大或连续的动作空间,并且不依赖于最大化所有可能的动作来制定或评估策略.

控制钟摆

对于离散的动作空间,例如在每个时间步上应用一个选择的力,那么这可以使用 DQN 方法或任何其他函数近似来完成。这里的经典示例可能是像 Open AI 的CartPole-v1这样的环境,其中状态空间是连续的,但只有两种可能的动作。这可以使用 DQN 轻松解决,这是一个初学者的问题。

添加连续动作空间最终会得到类似于Pendulum-v0环境的东西。这可以在某种程度上使用 DQN 和离散化动作空间(例如 9 个不同的动作)来解决。但是,可以使用像 A3C 这样的 Actor-Critic 算法来制定更优化的解决方案。

连续状态空间的 Q-Learning

强化学习算法(例如 Q-Learning)可以应用于离散空间和连续空间。如果您了解它在离散模式下的工作原理,那么您可以轻松切换到连续模式。这就是为什么在文献中所有的介绍性材料都集中在离散模式上,因为它更容易建模(表格、网格等)

假设您有离散数量的动作,在连续空间中的唯一区别是您将对每个动作的状态进行建模X多少时间 (X作为一个数字,您可以根据您的用例选择)。所以,基本上,你最终会得到一个离散的空间,但可能有无限数量的状态。然后,您应用您为离散模式学习的相同方法。

让我们以自动驾驶汽车为例,在每个X毫秒(例如X=1),您将计算作为输入特征的汽车状态(例如方向、方向、旋转、到人行道的距离、车道上的相对位置等),并决定要采取的行动,如离散模式。该方法在其他用例中是相同的,例如玩游戏、步行机器人等。

注意(连续动作空间):

如果您有连续的动作,那么在几乎所有用例中,最好的方法是离散化您的动作。我想不出一个例子,离散化你的行为会导致相当大的缺陷。