drqv2中神经网络中上游网络和下游网络的梯度回传机制

在drqv2中,从环境中得到image-based观测obs,之后经过aug,生成aug之后的obs,之后再输入encoder网络,再输入2个critic和actor网络。

这里注意:

  与drqv中把encoder与critic和actor相结合不同,drqv-2则是把encoder单独列为上游网络,这个encoder上游网络可以和任何下游网络的任务相结合。因此drqv中行使encoder功能的其实是几层网络,这几层网络是融入进critic和actor网络的特征提取层的,是和critic和actor网络绑定在一起的,但只通过critic网络的梯度回传更新来更新这几层的网络参数。那么,在target-Q中的这几层的网络参数其实是和其他参数一样,是soft update的。

  而在drqv-2中,encoder是单独列出来的,因此,无论是critic,actor,还是target_critic网络,都属于encoder的下游网络,因此并不需要单独再为encoer设置一个target encoder来延时更新。所有使用encoder的场合,都是使用最新更新的encoder的参数,这一点是drqv-2和drqv的最大区别。与drqv相同,drqv-2中的encoder更新,也是通过critic网络的梯度来更新的,并不需要actor网络的梯度回传来更新。

  至于critic网络通过梯度回传来更新critic网络和encoder网络的参数,可以理解为

 

 

 

  因此,梯度在回传时,是会依次对critic和encoder进行梯度计算,再分别进行梯度更新。代码如下:

 

 

 其中,

self.encoder_opt.zero_grad(set_to_none=True)
self.critic_opt.zero_grad(set_to_none=True)

是进行梯度的清零。
critic_loss.backward()
是进行梯度的计算。
self.critic_opt.step()
self.encoder_opt.step()
则是进行梯度的回传更新。

即,通过一次梯度计算,分别对critic和encoder进行梯度更新。
posted @ 2022-08-11 18:26  呦呦南山  阅读(253)  评论(0编辑  收藏  举报