接上一篇的PG

G_{t}:从t时刻开始的未来总奖励,G_{t}的计算是依赖于策略与环境的交互轨迹,而这个轨迹又具有随机性,因此最终的优化目标是G_{t}的期望最大。

策略梯度中只有actor网络,没有critic网络

AC——Actor-Critic

AC具有两个网络,原因:AC中是用Q\left ( s_{t} , a_{t}\right )代替G_{t},而Q\left ( s_{t} , a_{t}\right )是通用神经网络来求解的。

网络一:Actor网络,根据状态s_{t}指导智能体输出动作a_{t}的网络,即策略网络\pi _{\theta }

网络二:critic网络,用来评价当前状态s_{t}下选择动作a_{t}的好坏,输出Q\left ( s_{t} , a_{t}\right )

\triangledown \bar{R_{\theta }}\approx \frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_{n}}\left ( Q\left ( s_{t}^{n}, a_{t}^{n}\right )-b \right ) \triangledown log_{\pi _{\theta }}\left ( a_{t}^{n}, s_{t}^{n} \right )  b为baseline

A2C——Advantage Actor Critic

一般情况下b可以为Q\left ( s_{t} , a_{t}\right )的期望,Q\left ( s_{t} , a_{t}\right )的期望就是状态s_{t}的价值V\left ( s_{t} \right )

\triangledown \bar{R_{\theta }}\approx \frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_{n}}\left ( Q\left ( s_{t}^{n}, a_{t}^{n}\right )-V\left ( s_{t} \right ) \right ) \triangledown log_{\pi _{\theta }}\left ( a_{t}^{n}, s_{t}^{n} \right )
其中,Q\left ( s_{t}^{n}, a_{t}^{n}\right )-V\left ( s_{t} \right )就是优势函数A\left ( s_{t}^{n}, a_{t}^{n} \right ),但是会有一个明显的缺点,就是需要再增加一个额外的网络来计算V\left ( s_{t} \right ),耗费资源还增加风险。

V和Q是可以相互转化的:

Q_{\pi }\left ( s_{t}^{n}, a_{t}^{n} \right )=E\left ( r_{t}^{n}+V_{\pi }\left ( s_{t+1}^{n} \right ) \right )

去掉期望后,为:

Q_{\pi }\left ( s_{t}^{n}, a_{t}^{n} \right )= r_{t}^{n}+V_{\pi }\left ( s_{t+1}^{n} \right )

如此,只需要一个估计状态价值的网络,梯度可以表示为:

\triangledown \bar{R_{\theta }}\approx \frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_{n}}\left (r_{t}^{n}+V_{\pi }\left ( s_{t+1}^{n} \right )-V\left ( s_{t} \right ) \right ) \triangledown log_{\pi _{\theta }}\left ( a_{t}^{n}, s_{t}^{n} \right )

算法流程:

输入:迭代次数T,状态特征维度n,动作集A,步长\alpha\beta,探索率\epsilon,critic网络和actor网络结构

输出:actor网络的参数\theta,critic网络的参数\omega

1、随机初始化所有的状态和动作对应的价值Q

2、for i from 1 to T,进行迭代

        a) 初始化s为状态序列的第一个状态,拿到其特征向量\phi \left ( s \right )

        b) \phi \left ( s \right )输入到actor网络中,输出动作A,基于动作A得到下一时刻的状态s^{'}和奖励r

        c) \phi \left ( s \right )\phi \left ( s^{'} \right )分别输入到critic网络中,得到输出V\left ( s \right )V\left ( s^{'} \right )

        d) 计算TD误差\delta =r+\gamma V\left ( s^{'} \right )-V\left ( s \right )

        e) 使用均方差损失函数\sum \left (\left ( r+\gamma V\left ( s^{'} \right )-V\left ( s \right ) \right ) \right )^{2}作为critic网络参数\omega的梯度更新

        f) 更新actor网络:\theta =\theta +\alpha \triangledown _{\theta }log\pi _{\theta }\left ( s_{t}, A \right )\delta

A3C——Asynchronous Advantage Actor-Critic A2C结合异步

相比于AC,A3C的优点:

①异步训练框架

global network:是一个公共的神经网络模型,包含actor网络和critic网络两个部分的功能。

global network下面有n个worker线程,每个线程里有和公共的神经网络一样的网络结构,每个线程会独立的和环境进行交互得到经验数据,线程之间互不干扰,独立运行。每个线程和环境交互到一定量的数据后,就计算在自己线程里面的神经网络损失函数的梯度,但是这些梯度并不更新自己先线程里的神经网络,而是去更新公共的神经网络。每隔一段时间,线程会将自己的神经网络的参数更新为公共神经网络的参数,进而指导后面的环境交互。

②网络结构优化

A3C中可以将两个网络放到一起,输入状态s,可以输出状态价值和策略,也可以将actor网络和critic网络独立开,分别处理。

③critic评估点的优化

A3C中采用了n步采样,以加速收敛。

A3C中的优势函数:

A\left ( s, t\right )=R_{t}+\gamma R_{t+1}+...+\gamma ^{n-1}R_{t+n-1}+\gamma ^{n}V\left ( s^{'}\right )-V\left ( s \right )

A3C算法流程(异步多线程,对任意一个线程进行描述)

输入:公共部分A3C神经网络结构,对应参数\theta\omega,任意一个线程中的A3C神经网络,对应参数\theta ^{'}\omega ^{'},全局共享的迭代轮次T,全局最大迭代次数T_{max },线程内单次迭代时间序列最大长度T_{local},状态特征维度n,动作集A,步长\alpha\beta,熵系数c,衰减因子\gamma

输出:公共部分的A3C网络的参数\theta\omega

step 1:初始化公共网络的参数\theta\omega

step 2:任意一个线程的参数更新:\theta ^{'}=\theta\omega ^{'}=\omega

step 3:获取状态s_{t},基于策略选择动作a_{t}

step 4:执行a_{t}得到奖励r_{t}和下一时刻的状态s_{t+1}

step 5:循环执行step 3与step 4,当t达到T_{local},计算Q

Q\left ( s, t \right )=\left\{\begin{matrix}0......terminal-state \\ V\left ( s_{t}, \omega ^{'} \right )...none terminal-state \end{matrix}\right.

step 6:计算优势函数,累计actor网络的本地梯度更新d\theta,累计critic网络的本地梯度更新d\omega,更新公共部分的模型参数\theta =\theta +\alpha d\theta, \omega =\omega-\beta d\omega

step 7:如果达到T_{max },输出\theta\omega,否则循环进入step 2。

A2C理论上是优势函数A,但是实际上是基于TD的error作为评估点;A3C采用的是n-step思想,使用n-step的TD error作为评估点

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐