本文正在参加「金石计划」
导语
本系列笔记为b站Shusen Wang老师的强化学习课程笔记,整体按照老师讲课的思路来记录。本节课主要介绍AC算法。
Actor-Critic方法
Actor是策略网络,用来控制Agent运动,可以把它看做是运动员;Critic是价值网络,用来给动作打分,可以把它看做是裁判。这节课的内容是构造这两个神经网络,然后通过环境给出的奖励来学习这两个网络。AC方法实际上就是前两节所讲的方法的结合。
首先来看一下如何构造Value Network和Policy Network。
我们先来回顾一下State-value Function的近似,由于π(a∣s),Qπ(s,a)pi(a|s), Q_{pi}(s,a)这两个函数我们都不知道,所以我们可以使用两个神经网络来近似这两个函数,然后用AC方法同时学习这两个神经网络。
可以这样理解:Actor是一个运动员,可以做动作;如果他想让自己做的更好,就需要不断改进自己的技术。可是,它并不知道如何改进自己。这就需要裁判Critic来给运动员打分,这样运动员就知道什么样的动作得分高。
使用策略网络和价值网络分别近似π(a∣s),Qπ(s,a)pi(a|s), Q_{pi}(s,a)。
我们来搭建这两个网络,首先是策略网络Actor,结构与之前类似:
然后是价值网络,它的输入由两部分:一部分是当前的状态s,由卷积层进行特征提取;另一部分是当前的动作a(比如为一个One-hot embedding),由一个MLP来进行特征提取。然后将两个特征向量进行拼接,送个一个MLP,输出一个实数,即裁判打的分数。这个分数说明处在状态s的情况下,做出动作a是好是坏。价值网络和策略网络可以共享卷积层的参数,也可以独立。
同时训练策略网络和价值网络,就被称为Actor-Critic算法。
训练神经网络
经过我们之前的近似,整体的V(s;θ,w)V(s;theta,w)函数就可以用两组神经网络的参数来表示,训练时需要同时更新这两组参数。但是两组参数的更新目标是不同的:
- 更新策略网络π(a∣s;θ)pi(a|s;theta)的参数θtheta,是为了让V函数的值增加;
- 更新价值网络q(s,a;w)q(s,a;w)的参数ww是为了更好,更精准的估计回报;
我们可以做这5个步骤来对网络进行更新:
- 观测到状态sts_t;
- 把sts_t作为输入,用策略网络π(⋅∣st;θ)pi(cdot | s_t;theta)来计算动作的概率分布,然后进行动作抽样;
- Agent执行动作ata_t,这时候环境会得到新的状态st+1s_{t+1}和奖励rtr_t;
- 有了奖励rtr_t,就可以根据TD算法更新价值网络的参数w(也就是让裁判变得更准确);
- 最后,使用Policy gradient来更新策略网络的参数θtheta。
下面介绍具体更新的过程。首先是使用TD算法来更新价值网络。
然后是使用Policy gradient来更新策略网络。
AC方法的整体流程如下:
AC算法流程概览
最后,我们来总结一下AC算法:
- 观测到状态sts_t并根据π(⋅∣st;θ)pi(cdot|s_t;theta)随机抽样一个ata_t;
- 执行ata_t,然后环境给出新的状态st+1s_{t+1}和奖励rtr_t;
- 用新的状态st+1s_{t+1}输入π(⋅∣st+1;θ)pi(cdot|s_{t+1};theta)随机抽样一个a^t+1hat{a}_{t+1}(并不执行)
- 评估价值网络,计算qt,qt+1q_t, q_{t+1};
- 计算TD Error;
- 对价值网络求导,
- 使用TD算法更新价值网络;
- 对策略网络求导;
- 使用Policy Gradient更新策略网络。
需要注意的是,在第9步中,一些书和论文中使用的是δtdelta_t,而不是qtq_t,但两种方式都是正确的,证明过程略。
总结
AC算法需要使用两个神经网络来分别近似策略函数和价值函数。这两个网络在训练时分别使用TD算法和Policy Gradient算法进行更新。
在完成训练后,Agent可以根据策略函数来随机抽样动作,而价值函数则不再被使用。