我和我的朋友正在训练DDQN以学习2D足球。我训练了该模型约40.000集,但花了6天。有没有办法同时训练该模型?
例如,我有4个核心和4个线程,每个线程同时训练模型10.000次。因此,像for循环的并行性一样,训练40.000集的时间从6天减少到1.5天。
编辑:如果我们分别在4个线程中训练一个10.000集的模型,则将形成一个由这些训练后的模型的平均值组成的新模型,从而产生40.000集的训练效果,或者它是一个训练了10.000集的模型,但是更好的一个?
答案 0 :(得分:0)
我认为本文回答了您的问题: https://arxiv.org/pdf/1507.04296.pdf
本文运行一个中央学习器,具有中央重放记忆。另外,还有PS C:\Users\user> $reg = "^.*(?<![-_])\.(?![-_]).*$"
PS C:\Users\user> $str = "aaa . aaa"
PS C:\Users\user>
PS C:\Users\user> $str -match $reg
True
PS C:\Users\user> $reg = "^.*(?<![-_])\.(?![-_]).*$"
PS C:\Users\user> $str = "aaa ._ aaa"
PS C:\Users\user>
PS C:\Users\user> $str -match $reg
False
个工作程序,它们是中央学习器的副本,每个工作程序都有自己的重播内存。每个工作人员都会填充自己的重播内存,并且在每个训练步骤中都可以使用自己的重播内存(如果足够大)或使用中央重播内存。在每个动作选择之前,将网络的权重与服务器同步,并且在每个训练步骤之后,将梯度发送回服务器。
还要考虑: https://arxiv.org/pdf/1602.01783.pdf
提出A3C的,后来提出的A2C是A3C的简单版本。关键是,由于A3C的性能,异步Q学习算法并未引起太多关注。基本上,使用分布式DQN算法效率不高,因为重放内存需要将大量数据从不同的工作程序来回移动到服务器。实际上,提出了A3C来解决重播内存的问题,该内存运行模型的一个实例并在每个工作程序中包含env,并且仅异步更新权重。
我希望这能回答您的问题。
Afshin