TD3与DPG、DDPG、Double DQN解析
0 - 前言
本文是对【上海交通-陈伟哲】的哔站TD3讲解视频做的笔记,图片均来自视频中或论文中,注意本文的阅读需要提前看一下TD3的原文
参考:
TD3参考:https://www.bilibili.com/video/BV1nE41117CR?from=search&seid=7053418203777412678
DDPG参考:https://www.jianshu.com/p/6fe18d0d8822
TD3原文:https://arxiv.org/abs/1802.09477v3
DDPG原文:https://arxiv.org/abs/1509.02971
1 - 回顾DPG
确定性策略梯度(DPG)中,critic评价(状态,动作)的值函数以及损失函数为:
由于使用两个critic,产生确定性连续动作的actor可以使用下面公式进行更新,即对actor的损失函数求梯度。求梯度又可以根据链式法则展开,该展开式被称为确定性策略梯度理论。需要注意的是,DPG本身是一个on-policy
算法。
2 - 回顾DDPG
DDPG是在DPG的基础上,将AC机制与神经网络结合,DDPG的改进如下:
- 沿用DQN的
Experience replay
,使得原本on-policy
的DPG变为off-policy
的算法 - 同时沿用DQN的
target network
,能够使收敛更加稳定 - 在Q网络上采用
batch normalization
- 在连续域动作产生上叠加噪声,使得
action exploration
更加有效
由于DDPG采用了类似DQN的双网络结构,而且Actor和Critic都有target-net和eval-net,也就是常说的目标网络和主网络,我们只需要训练动作估计网络(eval-actor-net)和状态估计网络(eval-critic-net)的参数,而目标网络(包括target-actor和target-critic)的参数是由前面两个网络每隔一定的时间复制过去的。
- 先看Critic这边,Critic这边的学习过程跟DQN类似,DQN根据下面的损失函数来进行网络学习,即目标Q值和估计的Q值的平方损失:
上面式子中Q(S,A)是根据状态估计网络得到的,A是动作估计网络传过来的动作。而前面部分R + gamma * maxQ(S’,A’)是现实的Q值,这里不一样的是,我们计算现实的Q值,不再使用贪心算法,来选择具有最大Q值的动作A’,而是eval-actor网络得到这里的A’。
下面式子就是DDPG更新critic网络参数的公式,eval-critic的训练还是基于目标Q值(即
y
i
y_i
yi)和估计Q值(即Q(si,ai))的平方损失。估计Q值
根据当前的状态S和eval-actor网络输出的动作A输入状态估计网络得到,而目标Q值
根据现实的奖励R,以及将下一时刻的状态S’和target-actor网络得到的动作A’ 输入到target-actor网络 而得到的Q值的折现值加和得到(这里运用的是贝尔曼方程)。
- 再来看actor这边的更新
这个式子看上去很吓人,但是其实理解起来很简单。假如对同一个状态,我们输出了两个不同的动作a1和a2,从状态估计网络得到了两个反馈的Q值,分别是Q1和Q2,假设Q1>Q2,即采取动作1可以得到更多的奖励,那么Policy gradient的思想就是增加a1的概率,降低a2的概率,也就是说,Actor想要尽可能的得到更大的Q值。所以Actor的损失可以简单的理解为得到的反馈Q值越大损失越小,得到的反馈Q值越小损失越大,因此只要对状态估计网络返回的Q值取个负号就好啦。
3 - 回顾Double DQN
Double DQN想解决的问题是:Q value在学习过程中经常会被高估(over-estimated)
高估会导致:Q value更新公式中贝尔曼方程每次都有取max操作,一旦某个(state,action)被高估,接下来该动作被max取中的几率会更大
看下面一张图,真实值(true value)以横线示出,能够观察到DQN估计值(DQN estimate)几乎是真实值的几倍,Double DQN在一定程度上改善了高估现象,但并没有完全消除
Double DQN采用的解决方式时:采用两个Q函数。
Q函数的更新过程为:每次在Q表中取出使Q值最大的a,在Q’表中取出这个a与下一状态 s t + 1 s_{t+1} st+1 对应的Q’值,与当前的奖励 r t r_t rt 一起更新当前状态 s t s_t st与当前 a t a_t at对应的Q函数
Double DQN防止高估的原理在于:如果Q高估了动作a,那么Q’给出一个真实值,就会解决高估的问题,相当于Q‘在修正Q的高估。如果Q’高估了a,那么就只能寄希望于Q不会高估动作a。
4 - TD3算法
TD3全名为 Twin Delayed DDPG
TD3采用了Double Q Learning的思想,在actor-critic机制下,对于两个Q函数分别求y值(即目标值,也称为现实值、真实值)。 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2分别是两个critic网络的参数, ϕ \phi ϕ是对应actor网络的参数,加单引号的均表示target network
为了解决高估问题。对于更新y值的Q’,采用最小上限思想,即在target network中选最小的一个用来更新y,得到下面的式子作为贝尔曼方程的target value
TD3中Delayed的原因在于,采用下式来更新target network
为了使相似动作有相似输出(即平滑输出),TD3在target policy上叠加少量随机噪声,并进行mini-batches上的平均,如下:
完整的TD3算法如下:实际的TD3只有两个critic网络和一个actor网络