PaddlePaddle / PARL

A high-performance distributed training framework for Reinforcement Learning
https://parl.readthedocs.io/
Apache License 2.0
3.25k stars 820 forks source link

关于DQN的几个疑问 #957

Open aaaaalun opened 2 years ago

aaaaalun commented 2 years ago

首先老师讲的真好,学到了很多东西,感谢老师的分享,其次我这里有几个疑问?

  1. 在用DQN做moutaincar的作业的时候,如果gamma=0.9的时候,小车始终没办法到达顶部,但是0.99或者1的时候都是比较好的效果,我是想环境大于200step的时候会默认为done了,这个衰减因子是不是因该趋近于1,不应该过小,毕竟不太长远。

2.然后在model的部分,我看老师选择的是3层的全连接网络,输入的size是128,关于这部分能否介绍一下,输出的size是act_num可以理解,但是输入的参数128不太明白了。

3.DQN的特点在经验回放和固定Q值两点上, 经验回放在代码中体现的很明显了,但是我有疑问,为什么每一步的经验可以取出一个乱序batch_size进行学习?后一步和前一步之间不应该是强相关的么?好比作业,没有后退的step,前进的step是永远到不了山顶的,如果乱序取出之后还能是一个时序的训练么? 固定Q值得部分,在algorithm的learn中target_model和model两个模型训练,所以保持了固定的Q值?还希望老师指点。

暂时这么多,谢谢老师解答,有点多了。。。。

TomorrowIsAnOtherDay commented 2 years ago

hello,感谢对于我们课程的认可。建议先star下PARL关注我们仓库后续的研发进度:)

  1. 这个mountain car的环境有个典型的奖励设定是,只有最终达到终点了,最后一步才会有正向奖励,其余时间步是不会出现正向奖励的,所以你gamma越大,从最终步那里回传奖励信号的范围越广泛,模型有更多的正向奖励信号,收敛更容易。
  2. 128这个设定不是必须的,也可以改为其他size的,比如64或者256。这个的设定一般是依据问题根据经验判断的。经验地讲,要解决的问题越复杂,模型规模倾向于更大。
  3. 乱序取出来训练是没问题的。这块建议解读下DQN原论文,我在这里不展开解答了。
aaaaalun commented 2 years ago

已经star~ 还请教老师一个问题: 假设我玩微信小程序的跳一跳游戏 obs是人物当前的位置和下一个平台的位置的距离,只有一个参数 reward先简单的暂定是跳到下一个平台上就奖励1 掉下平台就-1 action是我鼠标按下控制小人蓄力的时间,只有一个,不像老师的demo有多个上下左右的action

目前是在这里报错,说我的参数小于等于1了,我想问我这个思路是没问题的吧? self.fluid_executor.run( self.pred_program, feed={'obs': obs.astype('float32')}, fetch_list=[self.value])