我应该如何改变 C51 算法的超参数,以获得更高的奖励?

人工智能 强化学习 dqn 超参数优化 表现 c51
2021-10-20 06:30:13

我有一个场景,在理想情况下,贪婪方法是最好的,但是当引入可以学习的非理想时,DQN 开始做得更好。tf.agents因此,在检查了 DQN 所取得的成果之后,我使用( link )中的标准实现尝试了 C51 。这里给出了一个非常好的描述但是,如图所示,C51 的表现非常糟糕。

在此处输入图像描述

如您所见,C51 始终保持在同一水平。学习时,第一次迭代的损失大约是 10e-3 并继续到 10e-5,这肯定会影响权重的变化。但我不确定如何解决这个问题。

场景是

  • 1 集由 10 个步骤组成,并且该集仅在第 10 步之后结束,该集永远不会更早结束。

  • 每一步的状态都是整数值,可以取 0 到 1 之间的值。在图像中,状态的形状为 20*1。

  • 动作的形状为 20*1

  • 学习率 = 10e-3

  • 探索因素ϵ从 0.2 开始衰减到 0.01

C51 有 3 个额外的参数,这有助于它学习 q 值的分布

num_atoms = 51 # u/param {type:"integer"} 
min_q_value = -20 # u/param {type:"integer"} 
max_q_value = 20 # u/param {type:"integer"}

num_atoms是学习分布将具有的支持数,min_q_value并且max_q_value是 q 值分布的端点。我将它们设置为 51(第一篇论文和其他实现将其保持为 51,因此名称为 51),并且将最小值和最大值设置为可能的最小和最大奖励。

因此,如果有人可以帮助我微调 C51 的参数以使其正常工作,我将不胜感激。

1个回答

这是我凭经验发现的,反复试验。由于调整参数将是特定于环境的,因此我将列出我的参数,以便更好地了解我发现的适用于我的案例的内容。希望对算法有更好理解的人能够参与进来:

环境:一个 2D 地图,其中代理控制模拟 PC 鼠标垫,并且必须从随机生成点导航到随机奖励点。

动作空间:离散(24)——这是从最初的实现中扁平化的,以允许在 Q* 算法中使用。

  • 0-7,鼠标按键,每个按键有两种状态之一presseddepressed
public ButtonPressState Left;
public ButtonPressState Middle;
public ButtonPressState Right;
public ButtonPressState Touch;
public ButtonPressState ScrollUp;
public ButtonPressState ScrollDown;
public ButtonPressState IncreaseScroll;
public ButtonPressState DecreaseScroll;
  • 8-15:Touch在状态下移动的角度pressed,以 45° 递增,从 0° 到 315°
public enum D8Dir
{
    UP = 0,         //   0°
    UP_RIGHT = 1,   //  45°
    RIGHT = 2,      //  90°
    DOWN_RIGHT = 3, // 135°
    DOWN = 4,       // 180°
    DOWN_LEFT = 5,  // 225°
    LEFT = 6,       // 270°
    UP_LEFT = 7     // 315°
}
  • 16-23:速度,2^N 的指数,表示细胞每一步移动的方式。

距离归一化:反复试验使我对空间进行归一化。这也带来了允许相同的训练算法用于不同世界大小的好处,例如,在大的常见监视器尺寸上,2x3 与 3x2 与 3x3。具体来说,对于空间的高度和宽度,距离在 -1 和 1 之间进行归一化。因此,无论尺寸如何,所有点都映射到 -1 和 1 之间的 x 和 y。在高度和宽度不同的情况下,较小的将缩放为较大的尺寸。

奖励空间:在奖励方案迭代后让代理奖励利用迭代后,当代理更接近目标时给予奖励 - 更接近考虑“鸟瞰”和欧几里得距离。首先,取总奖励的“理论”最大总和为 1,并通过取智能体在给定 2D 空间中移动以获得奖励的最大距离来分配。这是二维空间的对角线。我说“理论上的”是因为除非智能体随机生成在一个角落并且奖励恰好放置在另一个角落,否则可以实现的实际总奖励较低。所以在实践中,给定情节的最大奖励是代理和奖励之间的归一化距离之和。

为了避免奖励利用,如果代理在对角线移动可用时垂直或水平移动更近,则只有 0.70% 的奖励。这是为了让代理在仅使用 sqrt(2) 鸟瞰奖励的情况下沿对角线移动的最短路径。否则,代理可能会向上移动,然后离开并收集 2 个标准化单位的奖励,而不是为对角线移动而收集的 ~=1.4142 标准化奖励单位。0.70% 保持垂直然后水平(或反之亦然)的奖励移动到 1.4,小于 ~=1.4142 对角线奖励。

最初,代理可以收集最多 1 的总奖励,然后再获得 3 额外的奖励积分以达到目标。针对这个奖励方案使用股票TensorFlow c51 DQN 代理min_q_value=-10,使用默认值和max_q_value=10值(我相信它们在文献中被称为 VMIN 和 VMAX),我发现学习在非常小的世界尺寸上取得了以下结果:

[5/2/2021 5:39:19 PM] Training Started
[5/2/2021 5:39:33 PM] Training Environment (1, 2): 5/2/2021 5:39:33 PM
[5/2/2021 5:40:11 PM] Mastered (1, 2) in 00:00:38.8244035 - Steps 2565 Episode 948  Average: 3.000000000000002 
[5/2/2021 5:40:11 PM] Training Environment (2, 1): 5/2/2021 5:40:11 PM
[5/2/2021 5:41:01 PM] Mastered (2, 1) in 00:00:49.1426355 - Steps 5802 Episode 1242  Average: 3.000000000000002 
[5/2/2021 5:41:01 PM] Training Environment (2, 2): 5/2/2021 5:41:01 PM
[5/2/2021 5:43:42 PM] Mastered (2, 2) in 00:02:41.2581146 - Steps 16573 Episode 3248  Average: 3.0551471839999977 
[5/2/2021 5:43:42 PM] Training Environment (2, 3): 5/2/2021 5:43:42 PM
[5/2/2021 5:53:44 PM] Mastered (2, 3) in 00:10:01.8163250 - Steps 56732 Episode 11226  Average: 3.0981306360000063 
[5/2/2021 5:53:44 PM] Training Environment (3, 2): 5/2/2021 5:53:44 PM
[5/2/2021 5:59:13 PM] Mastered (3, 2) in 00:05:29.5753945 - Steps 78612 Episode 6276  Average: 3.108986006000001 
[5/2/2021 5:59:13 PM] Training Environment (3, 3): 5/2/2021 5:59:13 PM
[5/2/2021 6:22:50 PM] Mastered (3, 3) in 00:23:37.2302437 - Steps 173577 Episode 25603  Average: 3.1401708113999938 
[5/2/2021 6:22:50 PM] Training Environment (4, 4): 5/2/2021 6:22:50 PM
[5/2/2021 7:10:04 PM] Mastered (4, 4) in 00:47:13.5879491 - Steps 363685 Episode 46441  Average: 3.1596743723999965 
[5/2/2021 7:10:04 PM] Training Environment (5, 5): 5/2/2021 7:10:04 PM
[5/2/2021 7:20:08 PM] Mastered (5, 5) in 00:10:04.1529582 - Steps 404256 Episode 8916  Average: 3.182016046800004 
[5/2/2021 7:20:08 PM] Training Environment (6, 6): 5/2/2021 7:20:08 PM
[5/3/2021 12:33:49 AM] Killed 6x6 - No Convergence: Step 1671400: Reward 1.8765 loss = 2.90894175 (00:00:02.9459997) (eps: 2.9459996999999998)

可以看出,即使对于一个简单的 6x6 世界,即使在 GTX-3080 采样 1,671,400 步超过 4 小时后,C-51 DQN 也没有收敛,所以我杀了它。

所以我修改了移动代理的总可能奖励为 0.5。这只是将旧的奖励计划分成两半(或者更确切地说是 *.5)的问题。

然后我将目标达到奖励从 3 更改为 0.5。

然后理论上的最大奖励总计为 1,因此我更改min_q_value=0max_q_value=1匹配代理可能获得的奖励总和。这导致墙时间比以前更大。

我最近尝试使用min_q_value=0max_q_value=.5匹配代理在收集 0.5 目标达到奖励之前可以获得的最大累积奖励(顺便说一句,这也是我环境中的终端状态)。

对于更大的空间,新的奖励归一化为快一个数量级的总计 1 个运行数量级。6x6 世界在 4624 集的 88721 中使用 88721 步总步数在 05 分钟 43 秒后“收敛”。

我仍然觉得这很慢,但显然与累积奖励范围相匹配的 q 值是一种改进。

[5/3/2021 12:49:35 AM] Training Environment (1, 2): 5/3/2021 12:49:35 AM
[5/3/2021 12:50:12 AM] Mastered (1, 2) in 00:00:36.8244207 - Steps 2424 Episode 981  Average: 0.5000000000000002 
[5/3/2021 12:50:12 AM] Training Environment (2, 1): 5/3/2021 12:50:12 AM
[5/3/2021 12:50:37 AM] Mastered (2, 1) in 00:00:24.6645133 - Steps 4075 Episode 700  Average: 0.5000000000000002
[5/3/2021 12:51:52 AM] Mastered (2, 2) in 00:01:15.0585713 - Steps 8135 Episode 1419  Average: 0.5314644659999993 
[5/3/2021 12:51:52 AM] Training Environment (2, 3): 5/3/2021 12:51:52 AM
[5/3/2021 12:52:39 AM] Mastered (2, 3) in 00:00:47.0126118 - Steps 11266 Episode 961  Average: 0.5455624971999997 
[5/3/2021 12:52:39 AM] Training Environment (3, 2): 5/3/2021 12:52:39 AM
[5/3/2021 12:52:56 AM] Mastered (3, 2) in 00:00:17.6139995 - Steps 12447 Episode 395  Average: 0.5650996157999993 
[5/3/2021 12:52:56 AM] Training Environment (3, 3): 5/3/2021 12:52:56 AM
[5/3/2021 12:55:56 AM] Mastered (3, 3) in 00:02:59.7056623 - Steps 24472 Episode 3403  Average: 0.5863068707999991 
[5/3/2021 12:55:56 AM] Training Environment (4, 4): 5/3/2021 12:55:56 AM
[5/3/2021 1:00:07 AM] Mastered (4, 4) in 00:04:11.2932882 - Steps 41259 Episode 4240  Average: 0.6052226153999957 
[5/3/2021 1:00:07 AM] Training Environment (5, 5): 5/3/2021 1:00:07 AM
[5/3/2021 1:06:11 AM] Mastered (5, 5) in 00:06:03.8448782 - Steps 65641 Episode 5502  Average: 0.6209708242799977 
[5/3/2021 1:06:11 AM] Training Environment (6, 6): 5/3/2021 1:06:11 AM
[5/3/2021 1:11:54 AM] Mastered (6, 6) in 00:05:43.2033837 - Steps 88721 Episode 4624  Average: 0.6089312343400013 

仅供参考:论文指出,过渡到终端状态是用 γt = 0 处理的。


更新:

9x9 环境在 51 分 38 秒内完成了 37,025 集的 294,897 步。max_q_value=1在更大的世界范围内,代理可能会收集更多的运动奖励,这种情况可能会更好。在任何情况下,这些值都比教程中的默认值要好几倍。我会更多地尝试它们。

此外,调整 n 步可能会有所帮助。我的实现也可能存在使用来自较小世界大小的重播缓冲区内存的问题,因为我正在动态更改世界大小且当前未清除缓冲区。

[5/3/2021 2:03:33 AM] Mastered (9, 9) in 00:51:38.4201434 - Steps 294897 Episode 37025  Average: 0.6425936848799915