TD3与DPG、DDPG、Double DQN解析

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网络

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44484715/article/details/115079604
DQN