我很困惑,为什么具有经验重播算法的dqn将对给定情节中的每个步骤执行梯度下降步骤?这只适合一步,对不对?这将使其极其缓慢。为什么在每个情节结束后或每次克隆模型后不这样做?
答案 0 :(得分:1)
在原始论文中,作者将一个样本推送到体验重播缓冲区,并随机采样32个转换以小批量方式训练模型。与环境互动获取的样本并未直接馈入模型。为了提高训练速度,作者每步存储一次样本,但每四步更新一次模型。
使用OpenAI的Baseline project;这种单进程方法可以使用单个GPU掌握2.5个小时左右的Atari Pong(Pong-v4)等简单游戏。当然,以这种单处理方式进行培训会使多核,多GPU(或单GPU)系统的资源得到充分利用。因此,在新的出版物中,动作选择和模型优化是脱钩的。他们使用多个“ Actor”与环境同时进行交互,并使用单个GPU“ Leaner”来优化模型,或者使用各种GPU上具有多个模型的多个Leaner。 Deepactd的Apex-DQN(Distributed Prioritized Experience Replay, D. Horgan et al., 2018)方法中描述了多角色单学习器,(Accelerated Methods for Deep Reinforcement Learning, Stooke and Abbeel, 2018)中描述了多角色多学习器。使用多个学习者时,跨过程共享参数至关重要。 Deepmind的PDQN(Massively Parallel Methods for Deep Reinforcement Learning, Nair et al., 2015)中描述的旧路径是在DQN和A3C之间提出的。但是,这项工作完全在CPU上完成,因此看起来使用了大量资源,其结果很容易被PPAC在GPU方法上的批量操作选择所超越。
您无法在每个情节的结尾进行优化,因为情节长度不是固定的,因此模型通常越好,情节步骤越长。当模型的性能好一些时,其学习能力将下降。学习进度将不稳定。
我们也不只是在目标模型克隆上训练模型,因为目标的引入是通过保留较旧的参数集来稳定训练过程。如果仅在参数克隆上更新,则目标模型的参数将与模型相同,这会导致不稳定。因为,如果我们使用相同的参数,则一个模型更新将导致下一个状态具有更高的值。
在Deepmind的2015年Nature论文中,它指出:
在线Q学习的第二个修改旨在进一步改善我们的神经网络方法的稳定性,是使用单独的网络在Q学习更新中生成目标yj。更准确地说,每个C更新我们都克隆网络Q以获得目标网络Q',并使用Q'生成Q学习目标y j ,以用于随后的对Q的C更新。 与标准的在线Q学习相比,此修改使算法更稳定,在在线学习中,增加Q(s t ,a t )的更新通常还会增加Q(s t + 1 ,a)表示所有a,因此也增加了目标y j ,可能会导致政策出现振荡或背离。使用较旧的参数集生成目标会增加对Q进行更新的时间与更新影响目标y j 的时间之间的延迟,从而使发散或振荡更加不可能。
Human-level control through deep reinforcement learning, Mnih et al., 2015