DQN调参笔记_从学习到崩溃

强化学习也不是神,不一定完全能够解决实际问题

1. 前言

这段时间可是被强化学习折磨透了,在Iron Shout游戏中训练的AI效果十分差劲,故打算从一个简单的游戏入手.

但经验发现了神奇现象,DQN越打越拉跨!

看不同参数的结果,可以直接拉到文章末尾,学习本文得出的结论.

2. 环境简介

我们小时候应该都玩过打砖块的游戏,该游戏截图如下所示:

球遇到边缘会进行反弹,我们所要做的就是利用浆尽可能接住更多的球.

接下来,进行一下环境的定义部分.

动作空间(3)

  • 0 浆左移动
  • 1 不动
  • 2 浆右移动

状态空间(5)

  • 浆的x坐标
  • 球的x,y坐标
  • 球的x,y速度

奖励函数

  • +3.0 当浆击中球
  • -3.0 当浆没有击中球
  • -0.1 当浆进行移动

回合结束:当浆没有接到球,或者接到过50个球

3. 调参过程

3.1 标准模型

我们以下图的参数为基本模型,所有模型均训练1000个epochs.

## 主要参数
LEARN_FREQ = 5        ## 学习频率
MEMORY_SIZE = 20000   ## 记忆库容量
BATCH_SIZE = 32       ## 批处理量
LEARNING_RATE = 0.001 ## 学习率
GAMMA = 0.999         ## 折扣因子

训练完毕后的结果如下所示:

模型在第900个epochs回合后到达了最优,测试奖励达到了100+,但是到第1000个epochs时性能悬崖式下降.直接变成小白.

3.2 降低折扣因子

GAMMA = 0.99         ## 折扣因子

训练完毕后的结果如下所示:

从图中看模型在训练时,不乏高分回合,但是测试时效果有些一般.

3.3 继续降低折扣因子

GAMMA = 0.90         ## 折扣因子

训练完毕后的结果如下所示:

这个效果图,可以看出前期模型奖励一直为0,说明GAMMA越小,模型蓄力时间越长,但是性能下降时也慢.

3.4 降低一下学习率

LEARNING_RATE = 0.0005 ## 学习率

训练完毕后的结果如下所示:

模型在550回合有点搞笑咋就-270分了,但是模型没有出现100+以上的成绩,模型性能崩溃速度也慢了一点.

3.5 继续一下学习率

LEARNING_RATE = 0.0001 ## 学习率

训练完毕后的结果如下所示:

仔细看模型训练时的得分,可以发现模型在后期训练得分都比较高,不像前几个模型在训练时高分稀疏,同时模型在测试集上表现也是不错的.

3.6 增大批处理量

## 主要参数
BATCH_SIZE = 128       ## 批处理量

训练完毕后的结果如下所示:

模型在训练时整体高分也是比较不错的,收敛能力也是比较快的,出现了两次最高分.

3.7 更改网络结构

原始网络结构 5->60->60->60->60->3
现在网络结构 5->128->128->128->3

模型在测试时出现了两次最高分,但是模型整体忽上忽下,显示了较大的不稳定性.

3.8 减少网络更新时间

update_target_steps = 100  ## 每学习100次更新一次Target网络

训练了两次,出现了不同的结果,说明强化学习确实有练丹的感觉,但通过计算训练时高分情况发现差距并不大.经过对比还是更新时间大一点比较好.

3.8 减少记忆库容量

MEMORY_SIZE = 10000

确实出现了性能的下降,但总体来看不是很大.

3.9 继续减少记忆库容量

MEMORY_SIZE = 2000

由于记忆库太少,性能出现了巨大的下降.

总结

模型 起步时间(epochs) 高分 训练时高分疏密
标准模型 350 100 22(少)
Gamma=0.99 250 50 45(中)
Gamma=0.90 600 60 20(少)
学习率=0.0005 350 80 68(多)
学习率=0.0001 350 100+ 100(多)
减少网络深度 250 100+ 33(中)
Batch=128 200 100 63(多)
减少更新步长 300 100 8(少)
MEMORY_SIZE=10000 550 80 16(少)
MEMORY_SIZE=2000 900 20 7(少)

参数对强化学习有着很大的影响,经过本文得出来的结论,对于一个决策很多的环境,默认参数最好为

## 主要参数
LEARN_FREQ = 5         ## 学习频率
MEMORY_SIZE = 20000    ## 记忆库容量
BATCH_SIZE = 64        ## 批处理量
LEARNING_RATE = 0.0001 ## 学习率
GAMMA = 0.999          ## 折扣因子

在此之后如果进行优化,可以增加记忆库容量,更新步长,Batch.减少Gamma,网络深度等.

参考文献

  1. https://adgefficiency.com/dqn-debugging/
updatedupdated2022-05-072022-05-07