kaixindelele / DRL-tensorflow

My DRL library with tensorflow1.14 based on openai spinning-up
60 stars 8 forks source link

关于TD3中训练更新的频率问题 #2

Closed lknownothing closed 3 years ago

lknownothing commented 3 years ago

感谢您的分享!因为你的网络更新和论文作者的不一样,我的疑问如下: 本repo中,for _ in range(args.max_steps) 这行代码是表示执行max_step=1000之后开始更新1000次吗?

if j == args.max_steps - 1:
                up_st = time.time()
                for _ in range(args.max_steps): # 
                    net.learn()

https://github.com/kaixindelele/DRL-tensorflow/blob/6f6c078df1a8b3c21be31f0aba8c617360e86f1a/td3_sp/TD3_per_class.py#L352

论文作者的PyTorch-SAC和其它大多数repo中更新的方式是下面这样:

for t in range(int(args.max_timesteps)):
      ......
     if t >= args.start_timesteps:
            policy.train(replay_buffer, args.batch_size)

前者是执行1000步折后更新1000次,后者是没执行1步,更新1次的意思吗?

再次感谢您的分享~

kaixindelele commented 3 years ago

你的理解没有问题,关于这两种更新方式,哪个更好一些,我个人认为是‘先统一采集,再统一更新’会更好一些,网络的稳定性更高,多进程加速什么的操作性更高。 但是二者性能其实差距不大,我测试过。 另外这个代码库我基本弃用了,最新的可以看我的https://github.com/kaixindelele/DRLib

lknownothing commented 3 years ago

谢谢您的耐心回复!因为DM Control 的Benchmark任务上训练的episode_reward最大不超1000,会不会更容易比较TD3-PER和TD3等的算法性能

kaixindelele commented 3 years ago

DM Control 的Benchmark任务我没有跑过,甚至都没有看过,所以无从评价~ TD3-PER效果不太稳定且特别慢,不建议用,除非是稀疏奖励。

lknownothing commented 3 years ago

repo里都可以看成是state-based输入的,后面的工作ICLR 2020一些都是pixel-based输入的,比如很出名的Dreamer, soft latent actor-critic(SLAC),RAD和DrQ等算法都有在Dm Control的benchmark任务上测试

kaixindelele commented 3 years ago

pixel-based输入我做的也比较少,你有比较好的测试经验么?我之前自己写的一个单进程的,虽然能学到点东西,但是达不到最佳性能,且训练慢。 不知道你对这个有没有好的经验分享~

lknownothing commented 3 years ago

pixel-based的论文中,这篇文章RAD是目前效果最好的,也是我觉得比较返璞归真的,发表在ICLR 2020,使用SAC框架,代码也没有很深的封装。相比于之前的工作,仅仅使用Data Augmentation,但是效果比model-based的Dreamer都好。

追溯RAD参考文献中的算法,很多的推导模型都很复杂,RAD基本在SAC框架中,效果确很好。这个方向的主要文章都在RAD的参考文献中了。

kaixindelele commented 3 years ago

这篇和curl的区别在哪儿呢?你跑过么,要是好使的话,我也整一个~ 个人感觉图像输入有几个问题,一个是效率低,用数据增强肯定会好; 另一个就是像素分辨率低的话,信息会有丢失,分辨率高,计算效率会下降~ 加一个QQ吧,你加我的群,在QQ里说好点,github的邮件通知有点隆重~ 深度强化学习-DRL:799378128