强化学习采样频率和更新频率的关系探讨

16 篇文章 8 订阅
10 篇文章 0 订阅

强化学习采样频率和更新频率的关系探讨

前言:

这个问题很多做强化的朋友都遇到过,今天中午答应群友今天要写出来,尽管少了几组实验没做,但是先勉强凑出一个文档解析吧。

并且可能因为我关键词没找对,我只在spinningup的代码中,看到了一个update every的关键词,但是搜索起来,好像也没有太多帖子和论文(只看到了rainbow那篇论文是4个agent step,更新一次网络)讨论这个,如果有人看到过类似的帖子,或者论文,欢迎告知!

问题起源:

在经典的论文伪代码和SpinningUp这种代码库中,会出现这样的一个经典问题:agent和环境交互一次,policy就要update一次。

DQN的伪代码:
在这里插入图片描述
DDPG 也是这样:
在这里插入图片描述

甚至TD3都是:
在这里插入图片描述

SpinningUp关于这部分的注释:

Number of env interactions that should elapse between gradient descent updates. Note: Regardless of how long you wait between updates, the ratio of env steps to gradient steps is locked to 1.
即openai团队的人认为应该绑定起来。采样多少次,更新多少次。

即采样频率和策略网络更新的频率绑定一致。但是实际上我们的代码中并不会采取这样的操作。

潜在的缺陷–限制了batch-size的设定:

如果我们的buffer的大小是常用的1e6,batch-size是256,采样一次,更新一次,那么对于某一个具体的transition来说,它进入一个先入先出的buffer中,从它刚进入的那一个时间步,它被随机采样的概率是多少?

update_every_n_steps=1时,即交互获取1个样本,更新1次网络;

update_every_n_steps=2时,即交互获取2个样本,更新1次网络;

E=P*buffer_size/(update_every_n_steps)=batch_size/update_every_n_steps!

问题一目了然了,如果采样次数和更新次数绑定,即update_every_n_steps=1,那么一个transition被策略网络利用的次数,就等于batch-size了!

问题一目了然了,如果采样次数和更新次数绑定,那么一个transition被策略网络利用的次数,就等于batch-size了!

这样如果你想调大batch-size,就会发现,有时候batch-size值越大,性能越下降!

这个性能下降,有两个可能,一个是这个博客里面提到的:batch-size增加了会让梯度更加平滑,噪声波动没有那么大,但是也可能会陷入局部最优。

也有另外一个可能, 是因为单一数据被更新的次数太多,产生了某种类似于“过拟合”的效果。

我下面贴一下我之前的比较简单的实验结果,可以证明绑定的情况下,更新次数增加,确实会降低性能。

下周会丰富一下实验,解绑之后,单纯的batch-size的增加,是否在一定程度上增加性能。

也许可以在实验中,为大家找到一个比较好的参数:单个样本的更新次数。

如果有人对这个点感兴趣的话,欢迎合作和讨论~

updata_every=1的情况下,batch-size的增加会性能降低:

在这里插入图片描述
左右图的batch-size都是512,左边网络的更新频次是512,右边是64,性能就上去了。如果这个实验结果具有普适性的话,那么可以说明在大的batch-size情况下,降低更新频次,可以提高性能。

在这里插入图片描述
左右图的更新频次都是64,左边网络的batch-size是64,右边是512,性能就上去了。如果这个实验结果具有普适性的话,那么可以说明在一定的更新频次下,增加batch-size,可以提高性能。

Fetch-Push-and-PickUP–HER–batch-size-and-update-steps大规模网格搜索实验结果:

由于我这次做了一组比较多的实验,先列一下,我要验证的几个假设:

  1. 交互数和更新次数一致时,performance随着batch-size增加,先增加再降低,最高值的batch-size较低;
  2. 当降低更新频次时,performance随着batch-size增加,先增加再降低,最高值的batch-size会增加;

实验设置:

batch-size从64,增加到1024;
inter(inter即每更新一次网络,和环境交互N次),N从1,2,4,8, 32, 64,128变化。
每个回合交互次数n_steps为50,网络更新次数update_num=n_steps//inter;
当inter=1 的时候,即采样一次,更新一次的比例;
当inter=4时,即采样四次,更新一次的比例;
当update_num<2时,update_num=2。
即会出现十分诡异的现象,inter=32,64,128的结果会一致!
实验设计不当了属于是。

例如,当batch-size小于

经过一个筛选,即batch_size//inter>=8的参数才符合条件,即
每组实验两个固定的随机种子,在push和pickup两个任务中测试,主干网络为TD3(这个可能和DDPG有区别),每组
在这里插入图片描述

总结:

目前我的实验经验模糊的告诉我,batch-size可以适当的调大一点,单个样本更新的频次可以降低一些。

联系方式:

ps: 欢迎做强化的同学加群一起学习:

深度强化学习-DRL:799378128
Mujoco建模:818977608
欢迎玩其他物理引擎的同学一起玩耍~

欢迎关注知乎帐号:未入门的炼丹学徒

CSDN帐号:https://blog.csdn.net/hehedadaq

极简spinup+HER+PER代码实现:https://github.com/kaixindelele/DRLib

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hehedadaq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值