背景
本文介绍DDPG具体是如何进行采样,然后如何使用采集的样本进行训练,以及更新网络的。这意味更加注重DDPG在实践中的一整套流程。
介绍
因为这篇文章是站在一个全局的角度,讲解DDPG的具体使用。不会涉及到更新的具体细节,更新的公式。如果你不知道更新细节,那没关系,也能正常阅读本文。因为本文主要是讲一整套的过程。知道整套流程后,你再去了解流程里具体的网络更新的也是ok的。
DDPG使用细节
DDPG网络结构由现实actor网络、目标actor网络、现实Q网络、目标Q网络这四个网络组成。
现实Actor和目标Actor网络结构一样,输入都是状态,输出是动作
现实Critic和目标Critic网络结构一样,输入都是状态和动作,输出这个状态下采取这个动作的评分Q
DDPG具体使用流程:
步骤1:先初始化现实Actor和现实Critic。然后把现实Actor和现实Critic的网络参数复制到目标Actor和目标Critic网络。就得到了这样四个网络了。
步骤2:我们使用现实Actor与环境进行交互,也就是上图中输入状态S到现实Actor得到动作a,对环境施加动作a,环境会返回给你下一时刻的状态s’和奖励r。于是我们就用四元组(S,a,r,S’)表示这一过程的数据。这个四元组(S,a,r,S’)就表示了在状态S时,采取动作a,得到的奖励r和下一个状态S‘。这个四元组我们也称它为transition,把它放到经验池里面。于是这时就知道了现实Actor网络具有与环境交互,得到样本数据(S,a,r,S’)的功能。
步骤3:现实critic的更新。我们从经验池里面取出现实Actor得到的样本(S,a,r,S’)进行训练。把(S,a,r,S’)中的S和a输入到现实Critic中,得到现实Q(S,a)值,令Q=Q(S,a)。(下面的操作内容结合上面的图来看就非常清晰了)然后把(S,a,r,S’)中的S’输入到目标Actor中,得到动作a‘。并把S’和a’一起输入到目标Critic中,得到Q(S’,a’)于是目标Q值为Q’=r+gamma×Q(S’,a’ )值。 我们希望现实critic输出的Q值要等于目标Q‘的值,于是就是一个监督学习的问题了,Q’看成标签,我们更新现实critic使得输出Q尽量接近标签Q‘。
步骤4:现实Actor的更新。我们再更新现实Actor,因为现实Actor输出的动作,在现实critic里给出了Q值,我们更新Actor使得Q值输出最大。(具体更新公式可以去看别的介绍。本文主要介绍流程,不希望涉及太多公式)
步骤5:目标Actor和目标Critic的更新。然后我们每隔一段时间就把这两个网络的参数,拿去更新目标Actor和目标Critic。
步骤6:然后回到步骤2使用现实Actor去采样,再更新再采样。就是一个循环过程。