目录
1.前言2.算法2.1 概念初识2.2 算法相关概念和定义2.2 DDPG实现框架和算法
1.前言
今天我们回来说说强化学习中的一种actor critic的提升方式Deep Deterministic Policy Gradient (DDPG),DDPG最大的优势就是能够在连续动作上更有效地学习。 关于DDPG的学习我相信看了莫烦教程能大概有个了解,但是有些细节会不清楚,特别是其中两个神经网络交互的部分,我这里找到kenneth_yu的blog中有个图很清晰地说明了这个关系,希望看完这篇文章的读者能对DDPG有个清晰的了解。
2.算法
2.1 概念初识
它吸收了Actor-Critic
让Policy gradient
单步更新的精华,而且还吸收让计算机学会玩游戏的DQN
的精华,合并成了一种新算法,叫做Deep Deterministic Policy Gradient. 那 DDPG 到底是什么样的算法呢, 我们就拆开来分析。我们将DDPG分成'Deep'和'Deterministic Policy Gradient',然后'Deterministic Policy Gradient'又能细分为'Deterministic'和'Policy Gradient',接下来我们就开始一个个分析。
Deep顾名思义,就是走向更深层次,我们在DQN中提到过,我们使用一个经验池和两套结构相同,但参数更新频率不同的神经网络能有效促进学习。那我们也把这种思想运用到DDPG中,使DDPG也具备这种优良形式。但是DDPG的神经网络形式却比DQN的要复杂一点。
Policy Gradient我们也在之前提到过,相比其他的强化学习方法,它能被用来在连续动作上进行动作的筛选。而且筛选的时候是根据所学习到的动作分布随机进行筛选,而Deterministic有点看不下去,Deterministic说:我说兄弟,你其实在做动作的时候没必要那么不确定,反正你最终都只是要输出一个动作值,干嘛要随机。所以Deterministic就改变了输出动作的过程,只在连续动作上输出一个动作值。
现在我们来说说DDPG中所用到的神经网络(粗略)。它其实和我们之前提到的Actor-Critic形式差不多,也需要有基于策略Policy的神经网络
和基于价值Value的神经网络
。但是为了体现DQN的思想,每种神经网络我们都需要再细分成两个,Policy Gradient这边,我们有估计网络和现实网络
,估计网络用来输出实时的动作,供actor在现实中实行。而现实网络则是用来更新价值网络系统的。所以我们再来看看价值系统这边,我们也有现实网络和估计网络
,他们都在输出这个状态的价值,而输入端却有不同,状态估计网络则是拿着当时Actor施加的动作当做输入。在实际运用中,DDPG这种做法确实带来了更有效的学习过程。
以上就是对DDPG的一个大概简介,看完大概了解整个DDPG包括什么就可以,接下来将会带大家探索DDPG的细节。
2.2 算法相关概念和定义
我们先复述一下DDPG相关的概念定义:
- 确定性行为策略μ:定义为一个函数,每一步的行为可以通过
计算获得。
- 策略网络:用一个卷积神经网络对
函数进行模拟拟合,这个网络我们就叫做策略网络,其参数为
;
- behavior policy
:在RL训练过程中,我们要兼顾两个e:exploration和exploit(也就是之前说过的探索和开发);exploration的目的是探索潜在的更优策略,所以训练过程中,我们为action的决策机制引入随机噪声:将action的决策从确定性的过程变为一个随机过程,再从这个随机过程中采样得到action,下达给环境执行,过程如下图所示
上述这个策略叫做behavior策略,用
来表示,这时RL的训练方式叫做off-policy。这里与
的思路是类似的。DDPG中,使用Uhlenbeck-Ornstein随机过程
(下面简称UO过程),作为引入的随机噪声:UO过程在时序上具备很好的相关性,可以使agent很好的探索具备动量属性的环境。
注意:
- 这个
不是我们想要得到的最优策略,仅仅在训练过程中,生成下达给环境的action,从而获得我们想要的数据集,比如状态转换(transitions)、或者agent的行走路径等,然后利用这个数据集去训练策略
,以获得最优策略。
- 在test和evaluation时,使用
,不会再使用
。
4.Q函数:即action-value函数,定义在状态
下,采取动作
后,且如果持续执行策略
的情况下,所获得的
期望值,用Bellman等式来定义:
可以看到,Q函数的定义是一个递归表达,在实际情况中,我们不可能每一步都递归计算Q的值,可行的方案是通过一个函数对Bellman等式表达进行模拟。
- Q网络:DDPG中,我们用一个卷积神经网络对Q进行模拟,这个网络我们就叫做Q网络,其参数为
,采用了DQN相同的方法。
- 如何衡量一个策略
的表现:用一个函数J来衡量,我们叫做performance objective,针对off-policy学习的场景,定义如下:
其中:
- s是环境的状态,这些状态(或者说agent在环境中走过的状态路径)是基于agent的behavior策略产生的,他们的分布函数为
;
是在每个状态下,如果都按照
策略来选择action时,能够产生的Q值,也就是
是在s根据
分布时,
的期望值。
- 训练的目标:最大化
,同时最小化Q网络的Loss(下面会给出)。
- 最优行为策略
的定义:即最大化
的策略:
训练
网络的过程,就是寻找
网络参数
的最优解的过程,我们使用SGA的方法。
- 最优Q网络定义:具备最小化的Q网络Loss;训练Q网络的过程,就是寻找Q网络参数
的最优解的过程,我们使用SGD的方法。
2.2 DDPG实现框架和算法
online和target网络 以往的实践证明,如果只使用单个Q神经网络的算法,学习过程很不稳定,因为Q网络的参数在频繁梯度更新的同时,又用于计算Q网络和策略网络的gradient。基于此,DDPG分别为策略网络、Q网络各创建两个神经网络拷贝,一个叫做online,一个叫做target:
在训练完一个mini-batch的数据之后,通过SGA/SGD算法更新online网络的参数,然后通过soft update算法更新target网络的参数。soft update是一种running average的算法:
- 优点:target网络参数变化小,用于在训练过程中计算online网络的gradient,比较稳定,训练易于收敛。
- 代价:参数变化小,学习过程变慢。
DDPG实现框架
DDPG算法流程如下: 初始化actor/critic的online神经网络参数
和
; 将online网络的参数拷贝给对应的target网络参数
初始化replay memory buffer R; for each episode: 初始化UO随机过程; for t-1,T: 下面步骤与DDPG实现框架图中步骤编码对应:
- actor根据behavior策略选择一个
,下达给gym执行该
。
behavior策略是一个根据当前online策略
和随机UO噪声生成的随机过程, 从这个随机过程采样 获得
的值。
- gym执行
,返回reward
和新的状态
;
- actor将这个状态转换过程(transition):
存入replay memory buffer
中,作为训练online网络的数据集。
- 从replay memory buffer
中,随机采样
个 transition 数据,作为online策略网络、 online Q网络的一个mini-batch训练数据。我们用
表示mini-batch中的单个transition数据。
- 计算online Q网络的 gradient: Q网络的loss定义:使用类似于监督学习的方法,定义loss为MSE: mean squared error:
其中,
可以看做监督学习中的label:
基于标准的BP方法,就可以求得L针对
的gradient:
。 有两点需要注意:
的计算,使用的是target策略网络
和target Q网络
,这样做是为了Q网络参数的学习过程更加稳定,易于收敛。
- 这个标签本身依赖于我们正在学习的target网络,这是区别于监督学习的地方。
6.update online Q:采用adam optimizer更新
;
7.计算策略网络的policy gradient: policy gradient的定义:表示performance objective的函数
针对
的 gradient。根据2015 D.Silver 的DPG 论文中的数学推导,在采用off-policy的训练方法时,policy gradient算法如下:
也就是policy gradient是在s根据
分布时,
的期望值。我们用Monte-carlo方法来估算这个期望值: 在replay memory buffer中存储的(transition):
, 是基于agent的behavior策略
产生的,它们的分布函数(pdf)为
,所以当我们从replay memory buffer中随机采样获得mini-batch数据时,根据Monte-carlo方法,使用mini-batch数据代入上述policy gradient公式,可以作为对上述期望值的一个无偏差估计 (un-biased estimate), 所以policy gradient 可以改写为:
8.update online策略网络:采用Adam optimizer更新
; 9.soft update target网络
和
: 使用running average的方法,将online网络的参数,soft update给target网络的参数:
end for time step end for episode
参考:
- https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow
- https://blog.csdn.net/kenneth_yu/article/details/78478356