我们是否使用验证集和测试集来训练强化学习代理?

人工智能 强化学习 训练 dqn 近端策略优化
2021-10-29 10:45:12

我对强化学习很陌生,并且正在使用 PPO 和 DQN 算法的一些代码查看代码后,我注意到作者没有包含任何代码来设置验证或测试数据加载器。在大多数其他机器学习训练循环中,我们通常包括一个验证和测试数据集,以确保模型不会过度拟合训练数据。但是,在强化学习中,数据都是从同一环境中模拟出来的,所以也许过度拟合问题不是什么大问题?

无论如何,有人可以指出仅使用训练数据集或数据加载器进行强化学习并忽略验证或测试数据集是否是标准做法?

1个回答

不,我们通常不在强化学习 (RL) 中使用验证/测试数据集。这是因为我们如何在 RL 中使用数据。数据集的使用与经典的有监督/无监督范式非常不同。一些 RL 算法甚至没有这样的数据集。例如,vanilla tabular Q-learning 不使用数据集——它会看到一个体验元组(s,a,r,s)并基于此进行更新并丢弃它,直到在训练期间可能再次看到它。

我没有看过你为 PPO 和 DQN 看过的代码,但我敢打赌,他们使用的数据加载器是用于 a) 在 PPO 中优化最新轨迹时,或者 b) 使用数据加载器进行采样来自 DQN 中的重播缓冲区的经验。

请注意,重播缓冲区在技术上是一个数据集,但它不是其他范例中的传统数据集。这本质上是因为

  1. 数据集是非固定的,经验是在收集时添加的,通常一旦达到缓冲区的大小限制,它就会被删除以便为新的经验腾出空间;
  2. 在缓冲区被删除之前,我们根本不需要使用缓冲区中的数据点——考虑一个大缓冲区但小批量大小。作为一个简单的例子,考虑一个大小为 10,000 的重放缓冲区和一个批量大小为 1,即对于每次更新,我们只从缓冲区中采样 1 个数据点。假设我们像在普通 DQN 中一样随机均匀采样,那么从未看到该点的概率为 0.368。

为了验证 RL 代理,我们通常会评估受过训练的代理在其预期任务上的表现。