观察中的深度强化学习运动
Deep Reinforcement Learning Motion in Observation
我正在尝试为自动驾驶车辆实施 DRL(深度强化学习)代理。我目前正在教我的代理人不要撞到其他汽车,使用一个简单的摄像头。有很多方法可以加快训练速度,但目前,我专注于在我的观察中添加运动感。
互联网上的每个人(包括 Google 关于 Atari 游戏的文章)都提到为了在观察中添加运动是 捕获 3-4 帧,而不是 1 并将它们作为一次观察结果提供给 QNetwork。然而,这在使用相机数据时不太实用,因为它需要大量的计算能力来训练代理。例如:
假设您使用分辨率为 256x256 的灰度相机,我们使用一个简单的统一重放存储器,最多可容纳 20000 个观察值。那么,内存中存储的像素个数为:
20000 (Samples) * 4 (Frames) * 256 (Width) * 256 (Height) = 5.2 GB of Physical RAM.
此外,假设您使用 64 个观测值的批量大小来为代理提供数据,该代理在第 1 层包含 32 个过滤器的 CNN,那么您需要:
64 (Batch Size) * (4 Frames) * 256 (Width) * 256 (Height) * 32 (Filters) = 0.5 GB of GPU.
对于 1 个简单的灰度相机,代理需要处理大量的数据,只是为了增加运动感。
我正在考虑一种添加运动感的替代方法,但是,我在互联网上找不到任何相关信息。既然我们已经知道了车辆的速度,那么我们就可以给agent提供信息了:
- 1 个包含相机数据的帧。
- 1 帧在图像中心包含车辆速度的归一化值(例如在图像中心保留一个 32x32 window 包含车辆归一化速度(0.0-1.0 ) 其余像素的值为 0.
这样一来,我们的数据量就减少了一半。您认为这是一个好方法吗?
我知道您害怕那些巨大的 RAM。
在 dqn 论文中,他们通常也使用大量的 RAM。在关于 atari 游戏的自然论文中,他们甚至使用了大约 9 GB 的 RAM!
https://www.nature.com/articles/nature14236
您可以尝试调整图像大小,像您已经解释的那样拍摄 4 个连续帧,并将它们仅存储为整数以绝对最小化这一点。
有时我想没有办法解决,但在您的情况下,您可以尝试添加第二个输入层,其中一个节点由您车辆的(标准化)速度提供。
您应该能够使用 keras 的功能 API 来实现这一点。在那里,您不仅限于纯顺序层。
我正在尝试为自动驾驶车辆实施 DRL(深度强化学习)代理。我目前正在教我的代理人不要撞到其他汽车,使用一个简单的摄像头。有很多方法可以加快训练速度,但目前,我专注于在我的观察中添加运动感。
互联网上的每个人(包括 Google 关于 Atari 游戏的文章)都提到为了在观察中添加运动是 捕获 3-4 帧,而不是 1 并将它们作为一次观察结果提供给 QNetwork。然而,这在使用相机数据时不太实用,因为它需要大量的计算能力来训练代理。例如:
假设您使用分辨率为 256x256 的灰度相机,我们使用一个简单的统一重放存储器,最多可容纳 20000 个观察值。那么,内存中存储的像素个数为:
20000 (Samples) * 4 (Frames) * 256 (Width) * 256 (Height) = 5.2 GB of Physical RAM.
此外,假设您使用 64 个观测值的批量大小来为代理提供数据,该代理在第 1 层包含 32 个过滤器的 CNN,那么您需要:
64 (Batch Size) * (4 Frames) * 256 (Width) * 256 (Height) * 32 (Filters) = 0.5 GB of GPU.
对于 1 个简单的灰度相机,代理需要处理大量的数据,只是为了增加运动感。
我正在考虑一种添加运动感的替代方法,但是,我在互联网上找不到任何相关信息。既然我们已经知道了车辆的速度,那么我们就可以给agent提供信息了:
- 1 个包含相机数据的帧。
- 1 帧在图像中心包含车辆速度的归一化值(例如在图像中心保留一个 32x32 window 包含车辆归一化速度(0.0-1.0 ) 其余像素的值为 0.
这样一来,我们的数据量就减少了一半。您认为这是一个好方法吗?
我知道您害怕那些巨大的 RAM。 在 dqn 论文中,他们通常也使用大量的 RAM。在关于 atari 游戏的自然论文中,他们甚至使用了大约 9 GB 的 RAM! https://www.nature.com/articles/nature14236 您可以尝试调整图像大小,像您已经解释的那样拍摄 4 个连续帧,并将它们仅存储为整数以绝对最小化这一点。
有时我想没有办法解决,但在您的情况下,您可以尝试添加第二个输入层,其中一个节点由您车辆的(标准化)速度提供。 您应该能够使用 keras 的功能 API 来实现这一点。在那里,您不仅限于纯顺序层。