大家好,我们又见面了,我是你们的老朋友全栈君。
- 请记住,在Q函数学习中,DQN与DDPG的区别在于,目标的下一个最大Q值是由actor估计的,而不是critic自身。在连续动作空间中,critic无法在没有优化的情况下估计最大Q值。因此,最佳选择是直接使用actor给出最佳动作。
第一张图片中的代码有误:
第71行:critic_target网络基于actor_target网络的估计输出最大Q值,因此不需要再次执行max操作(但在DQN中,我们确实需要那个max操作,因为在DQN中,下一最大Q值是由critic_target本身直接估计的(Q值函数))。
第72行:DDPG中的critic(Q函数)可以直接输出相对输入动作的Q值,因此不需要聚集动作索引相关的Q值。
第74行:因为优化器会累积梯度值,所以使用optimizer.zero_grad()清除它(而不是使用network.zero_grad)。
第75行:优化器应该调用step()函数来反向传播误差。
这是一个个人博客小程序版,使用 Mpvue 编写而成,服务端使用的是Bmob后端云,无需开发服务端接口即可使用,快速便捷,适合个人使用,功能包括签到,收藏文章,查看文章,消息通知,评论文章,回复评论等。欢迎提建议和意见。
别忘了添加最终状态的判定:1- dones。

第79行:在actor学习部分,critic_local的输入动作不是样本动作,而是由actor估计的动作(要注意这一点)。此外,它应该计算其平均值。最后,我们希望最大化性能,但优化器用于最小化目标,因此我们必须设置负号。
在soft_update中,记得使用数据的属性进行复制。

发布者:全栈程序员栈长,转载请注明出处:https://www.php.cn/link/8eb7be5a13cc39a3e56b78aba08b2039









