当前位置: 代码迷 >> 综合 >> Lee Hung-yi强化学习 | (6) Actor-Critic、A2C、A3C、Pathwise Derivative Policy Gradient
  详细解决方案

Lee Hung-yi强化学习 | (6) Actor-Critic、A2C、A3C、Pathwise Derivative Policy Gradient

热度:91   发布时间:2024-01-15 00:01:44.0

Lee Hung-yi强化学习专栏系列博客主要转载自CSDN博主 qqqeeevvv,原专栏地址
课程视频
课件地址

1. 回顾

Policy Gradient
在这里插入图片描述
G表示在状态s采取动作a一直玩到游戏结束所得到的cumulated reward。这个值是不稳定的,因为在某一个state采取同一个action,最后的结果不一定相同。因为state的变化也是有随机性的。
在这里插入图片描述
虽然经过多次实验后,可能会发现G最后会变成一个比较稳定的分布,那么理论上收集足够多的数据就能解决这一问题。但是因为policy gradient是一个on policy的方法,每次更新参数后又要重新收集数据。如果每次都要收集非常多的数据那也会造成效率的低下。

那么为了使G变得比较稳定,我们可以用G的期望值来代替,这就需要引入value based的方法。

Q-learning
在这里插入图片描述
V π ( s ) V^\pi(s) Vπ(s)代表使用actor π \pi π 在遇到某一状态s后,接下来使用actor π \pi π 一直玩到游戏结束的cumulated reward的期望值。

Q π ( s , a ) Q^\pi(s,a) Qπ(s,a)代表使用actor π \pi π 在遇到某一状态s,强制使用a,然后使用actor π \pi π 一直玩到游戏结束的cumulated reward的期望值。

2. Actor-Critic

Actor-Critic 的 Actor 的前生是 Policy Gradients , 这能让它毫不费力地在连续动作中选取合适的动作, 而 Q-learning 做这件事会很吃力。 那为什么不直接用 Policy Gradients 呢? 因为 Actor Critic 中的 Critic 的前生是 Q-learning 或者其他的 以值为基础的学习法 , 能进行单步更新, 而传统的 Policy Gradients 则是回合更新, 这降低了学习效率。所以就想到把两者结合起来变成Actor-Critic。
在这里插入图片描述
文章前面提到G是一个不稳定的值,我们要使用它的期望值来代替G。所以可以很容易想到,直接用 Q π ( s , a ) Q^\pi(s,a) Qπ(s,a)来代替G的期望值。而baseline就可以使用 V π ( s ) V^\pi(s) Vπ(s)来代替.

3. Advantage Actor-Critic(A2C)

在这里插入图片描述
上面说到使用Q和V,这样就会使误差增加得更多,因为使用了不止一个网络。所以希望只使用V就能估计出Q(只用一个网络)。

由于在state s t s_t st?执行action a t a_t at?得到多少的reward r t r_t rt? ,和会跳到什么state都是具有随机性的,所以需要加上期望值,即 Q π ( s t , a t ) = E [ r t + V π ( s t + 1 ) ] Q^\pi(s_t,a_t) = E[r_t+V^\pi(s_{t+1})] Qπ(st?,at?)=E[rt?+Vπ(st+1?)].

现在我们拿掉期望值(不要太纠结可不可以直接拿掉,因为实验结果发现影响不大),使 Q π ( s t , a t ) = r t + V π ( s t + 1 ) Q^\pi(s_t,a_t) = r_t+V^\pi(s_{t+1}) Qπ(st?,at?)=rt?+Vπ(st+1?),这样 Q π ( s t , a t ) ? V π ( s t ) Q^\pi(s_t,a_t) - V^\pi(s_t) Qπ(st?,at?)?Vπ(st?)就变成 r t + V π ( s t + 1 ) ? V π ( s t ) r_t+V^\pi(s_{t+1})-V^\pi(s_t) rt?+Vπ(st+1?)?Vπ(st?),这样我们就实现了只用V就实现原来Q-V的式子。

由于刚才拿掉了期望值,所以现在的 r(某一个step得到的reward) 是有一定随机性的。但是相较于前文的G(从某一时间点t开始到结束的cumulated reward), r 的方差会比G小很多。
在这里插入图片描述
红线的部分就是advantage函数。

执行过程:
1)actor π \pi π与环境做互动收集资料/数据
2) 使用TD或MC以这些资料去估计value function
3)套用在这里插入图片描述
去更新 π \pi π.
4) 形成新的actor π ′ \pi' π,一直重复123步……

Tip1:actor和critic的参数可共享
在这里插入图片描述
在advantage actor-critic中我们要训练actor和critic这两个网络,两个网络都是输入状态s,来输出各自的结果。

以游戏为例子,输入的是游戏画面,前面的网络都是CNN在提取特征,这部分对actor和critic这两个网络来说都是一样的,所以前面几个层的网络参数是可以共享的。

Tip2:对actor的输出进行限制
在这里插入图片描述
这个限制是使输出分布的熵尽量大(均匀分布的熵最大, 因为不确定性越高,熵越大),即让actor采取不同动作的几率都差不多。这样才会多尝试不同的动作进行探索,而不是一直局限于使用那些已知的reward比较高的动作。

强化学习有一个问题就是训练过程很慢,为了解决这个问题就可以使用A3C算法。

4. Asynchronous Advantage Actor-Critic (A3C)

在这里插入图片描述
A3C和图中漫画的意思差不多,就是:既然一个actor训练速度慢,那就开多个actor,最后这些actor会把各自学到的经验集合起来,这样就实现数倍的训练速度。
在这里插入图片描述
具体过程是这样:

  1. 每个worker从global network复制参数
  2. 不同的worker与环境去做互动
  3. 不同的worker计算出各自的gradient
  4. 不同的worker把各自的gradient传回给global network
  5. global network接收到gradient后进行参数更新

注意:假设worker 1一开始从global network复制到的参数是 θ 1 \theta_1 θ1?,在worker 1传回gradient之前,global network先收到其他worker的gradient并把参数更新到 θ 2 \theta_2 θ2?,这时worker 1仍然可以再传回gradient。

5. Pathwise Derivative Policy Gradient

在这里插入图片描述
以棋魂为例子,阿光作为actor下棋,佐为做critic。在原始的actor-critic中,佐为只判断阿光下的某一步棋好还是不好。而在Pathwise Derivative Policy Gradient中,critic会引导actor,让它知道采取什么动作才是好的。
在这里插入图片描述
具体来看这个算法。训练一个Actor,以状态s为输入,动作a为输出。然后训练一个Q function,以状态s和Actor输出的动作a为输入,以Q value为输出。这样就变成把Actor和Q function连接起来形成的一个大的网络。

在训练整个网络的时候,会固定住Q的参数,用gradient ascend的方法去调Actor的参数,使它输出的a最后能输出尽可能大的Q value。(类似于GAN,这里的Q是GAN里的discriminator,Actor则是GAN里的generator)
在这里插入图片描述
它的执行过程如上图。
1)actor π \pi π 去和环境做互动收集资料。
2) 根据这些资料来训练Q function的网络去估计Q value,训练好网络后把它的参数固定住。
3) 训练Actor网络,使它输出的动作a送到Q function的网络中能得到大的Q value,一直沿着这个方向训练下去。
4) 形成新的actor π ′ \pi' π,重复123步……

在这过程中,可以使用Q Learning使用到的技巧,比如exploration、replay buffer……

Q Learning 和 Pathwise Derivative Policy Gradient 的执行过程对比:

在这里插入图片描述
不同点:

  1. 在state s t s_t st? 下,要采取动作 a 直接由actor π \pi π 决定。而在Q Learning采取的动作由 a = arg ? max ? a Q ( s , a ) a = \arg \max_a Q(s,a) a=argmaxa?Q(s,a)决定。
  2. 类似于第1点, m a x a Q ^ ( s t + 1 , a ) max_a \hat{Q}(s_{t+1},a) maxa?Q^?(st+1?,a)Q Learning做法是要采取哪个动作,是看哪个动作在 s t + 1 s_{t+1} st+1?会使target Q function的Q value最大就选哪个动作,而在Pathwise Derivative Policy Gradient中, s t + 1 s_{t+1} st+1?要采取的动作直接由target actor π ^ \hat{\pi} π^决定,直接把 s t + 1 s_{t+1} st+1?代入 π ^ \hat{\pi} π^中直接得到要采取的动作。
  3. 之前的Q Learning只需要训练Q function这个network,而Pathwise Derivative Policy Gradient中还要训练 Actor π \pi π,使它输出的动作能获得尽可能大的Q value。
  4. 之前的Q Learning只需要每隔一段时间覆盖掉target network Q ^ \hat{Q} Q^?(参数) ,而Pathwise Derivative Policy Gradient中还要覆盖target actor π ^ \hat{\pi} π^
  相关解决方案