首页摘要:
基于策略梯度的方法主要存在的问题是需要完整序列以及难以收敛的问题,能否引入基于值函数近似的方法来处理是我们所关心的因此Actor-Critic的方法被提出来解决这个问题,其中Actor是策略网络,而Critic是评论网络,也就是说Critic作用类似于Deep Q-learning中的Q网络,用来评估$q$值。本篇文章将简要介绍Actor-Critic方法的过程以及其改进形式——深度确定性策略梯度(DDPG)。
Actor-Critic
因为求回报的梯度时是针对整个状态工作序列$\tau$ 来计算的,所以策略梯度方法需要完整的序列,此外,收敛性也是策略梯度方法的一大问题。然而我们实际应用希望的是一边和环境交互一边更新自身参数,基于蒙特卡洛方法的策略梯度是无法完成这个目标的。所以Actor-Critic借鉴了Deep Q-learning的思想,Actor网络一边与环境交互用Critic网络一边对值函数逼近,不断迭代,逐渐达到较优的水平。
我们知道,策略梯度方法更新公式是:
在Actor-Critic中,由于需要在线和环境交互,因此不涉及到策略的采样,Actor策略梯度方法更新公式改成:
当然$V(s_{t})$也可以换成动作价值、TD误差、优势函数、TD(λ)误差。而Critic网络则承担起估计$V(s_{t})$的任务,输入数状态向量,输出是$V(s_{t})$。将$V(s_{t})$换成TD误差的Actor-Critic算法流程如下:
输入:迭代轮数$T$,状态特征维度$n$, 动作集$A$, 步长$\alpha、\beta$,折扣因子$\gamma$ , 探索率$\epsilon$, Critic网络结构和Actor网络结构。
输出:Actor 网络参数$\theta$,Critic网络参数$w$
1.随机初始化所有的状态对应的价值$V$. 随机初始化Critic网络的所有参数$w$。随机初始化Actor网络的所有参数$\theta$。
2.for i from 1 to T,进行迭代。
(1)初始化$s$为当前状态序列的第一个状态, 拿到其特征向量$\phi(s)$
(2)在Actor网络中使用$\phi(s)$作为输入,输出动作$a$,基于动作$a$得到新的状态$s’$,奖励$r$。
(3)在Critic网络中分别使用$\phi(s)$、$\phi(s’)$作为输入,得到价值输出$V(s)$、$V(s’)$
(4)计算TD误差$\delta=r+\gamma V\left(s^{\prime}\right)-V(s)$
(5)使用均方差损失函数$\sum\left(r+\gamma V\left(s^{\prime}\right)-V(s)\right)^{2}$作Critic网络参数$w$的梯度更新
(6)更新Actor网络参数$\theta$:
从算法我们可以看出,Actor网络和Critic网络相互依赖,这样会使得收敛变慢,而下一节介绍的DDPG就是用来解决这个问题。
DDPG
同DDQN解决网络耦合的思路一样,DDPG分别给Actor-Critic方法中的Actor网络安排了目标Actor网络、给Critic网络安排了目标Critic网络。同样的,目标Actor网络参数$\theta’$是从Actor$\theta$网络复制而来,目标Critic网络参数$w’$是从Critic网络$w$复制而来。具体而言,四种网络功能如下:
(1)Actor网络:在状态$s$下选择最优动作$a$,得到奖励$r$环境转到状态$s’$;
(2)目标Actor网络:根据经验回放池中采样的状态$s’$下选择动作$a’$;
(3)Critic网络:计算当前时刻动作价值$Q(s,a,w)$;
(4)目标Critic网络:根据经验回放池中采样的状态$s’$下计算下一时刻动作价值$Q(s’,a’,w’)$;
根据上述功能,可以将它们套入Actor-Critic框架中,但是Actor的损失函数以及更新方式有一些简化。为了避免高维动作空间造成的计算量,DDPG采用了确定性策略,这时候其策略梯度发生了一些改变。考虑到确定性策略下,算法希望动作价值越大越好,同时采用梯度下降法,结合经验回放的$m$个样本可以将策略损失函数写成:
为了实现和$\epsilon-greedy$贪婪策略类似的目标,DDPG对动作施加随机性噪声$\mathcal{N}$:
此外,和DDQN采取直接复制参数不一样的是,目标Actor网络和目标Critic网络更新参数采取软更新的方式:
其中,更新系数$\xi $为极小的数,如0.01。
最后,Critic网络的损失函数和DDQN一样,结合经验回放可以得到:
综上所述,DDPG算法可以写成如下流程:
输入:Actor当前网络,Actor目标网络,Critic当前网络,Critic目标网络,参数分别为$\theta$、$\theta’$、$w$、$w’$,衰减因子$\gamma$,软更新系数$\xi $,批量梯度下降的样本数$m$,目标网络参数更新频率$C$。最大迭代次数$T$,随机噪音函数$\mathcal{N}$
输出:最优Actor当前网络参数$\theta$,Critic当前网络参数$w$
1.随机初始化$\theta$、$\theta’=\theta$、$w$、$w’=w$。清空经验回放的集合$D$
2.for i from 1 to T,进行迭代。
(1)初始化$s$为当前状态序列的第一个状态,拿到其特征向量$\phi(s)$
(2)在Actor当前网络基于状态$s$得到动作$a=\pi_{\theta}(s)+\mathcal{N}$
(3)执行动作$a$,得到新状态$s’$,奖励$r$,是否终止状态$isend$
(4)将$\{\phi(s),a,r,\phi(s’),isend \}$这个五元组存入经验回放集合$D$
(5) $s=s’$
(6)从经验回放集合$D$中采样$m$个样本$\{ \phi(s_{j}),a_{j},r_{j},\phi(s’_{j}),isend_{j}\},j=1,2,…,m$ ,计算这些样本的目标$q_{j}$值:
(7)使用均方差损失函数$\frac{1}{m} \sum_{j=1}^{m}\left(q_{j}-Q\left(\phi\left(s_{j}\right), a_{j}, w\right)\right)^{2}$,通过神经网络的梯度反向传播来更新Critic当前网络的所有参数$w$
(8)使用$J(\theta)=-\frac{1}{m} \sum_{j=1}^{m} Q(s_{i}, a_{i}, w)$,通过神经网络的梯度反向传播来更新Actor当前网络的所有参数$\theta$
(9)如果$T \%C==1$,则更新Critic目标网络和Actor目标网络参数:
(10) 如果$s’$是终止状态,当前轮迭代完毕,否则转到步骤(2)
结语
至此,深度强化学习介绍已经完结,更多的读书心得或许要在应用于工程学科之后才能分享了。