以下用RL作为Reinforcement Learning 的简称。
概括来说,RL要解决的问题是:让agent学习在一个环境中的如何行为动作(act), 从而获得最大的奖励值总和(total reward)。
这个奖励值一般与agent定义的任务目标关联。
agent需要的主要学习内容:第一是行为策略(action policy), 第二是规划(planning)。
其中,行为策略的学习目标是最优策略, 也就是使用这样的策略,
可以让agent在特定环境中的行为获得最大的奖励值,从而实现其任务目标。
行为(action)可以简单分为:
- 连续的:如赛车游戏中的方向盘角度、油门、刹车控制信号,机器人的关节伺服电机控制信号。
- 离散的:如围棋、贪吃蛇游戏。 Alpha Go就是一个典型的离散行为agent。
DDPG是针对连续行为的策略学习方法。
如果要了解完整和系统的RL背景知识,推荐大家看R.Sutton的这本书: 《Reinforcement Learning: An Introduction, by Sutton, R.S. and Barto, A.G.》
在RL领域,DDPG主要从:PG -> DPG -> DDPG 发展而来。
先复述一下相关的基本概念:
r(st,at) 函数: 环境在状态 st 执行行为 at 后,返回的单步奖励值;
上述关系可以用一个状态转换图来表示:
Rt :是从当前状态直到将来某个状态,期间所有行为所获得奖励值的加权总和,即discounted future reward:
PG
R.Sutton 在2000年提出的Policy Gradient 方法,是RL中,学习连续的行为控制策略的经典方法,其提出的解决方案是:
通过一个概率分布函数 πθ(st|θπ) , 来表示每一步的最优策略, 在每一步根据该概率分布进行action采样,获得当前的最佳action取值;即:
DPG
Deepmind的D.Silver等在2014年提出DPG: Deterministic Policy Gradient, 即确定性的行为策略,每一步的行为通过函数 μ 直接获得确定的值:
为何需要确定性的策略?简单来说,PG方法有以下缺陷:
如果采取简单的Greedy策略,即每一步求解 argmaxaQ(s,a) 也不可行,因为在连续的、高维度的action空间,如果每一步都求全局最优解,太耗费计算性能。
在这之前,业界普遍认为,环境模型无关(model-free)的确定性策略是不存在的,在2014年的DPG论文中,D.Silver等通过严密的数学推导,证明了DPG的存在, 其数学表示参见DDPG算法部分给出的公式 (3)。
然后将DPG算法融合进actor-critic框架,结合Q-learning或者Gradient Q-learning这些传统的Q函数学习方法,经过训练得到一个确定性的最优行为策略函数。
DDPG
Deepmind在2016年提出DDPG,全称是:Deep Deterministic Policy Gradient,是将深度学习神经网络融合进DPG的策略学习方法。
相对于DPG的核心改进是: 采用卷积神经网络作为策略函数 μ 和 Q 函数的模拟,即策略网络和Q网络;然后使用深度学习的方法来训练上述神经网络。
Q函数的实现和训练方法,采用了Deepmind 2015年发表的DQN方法 ,即 Alpha Go使用的Q函数方法。
我们以Open Gym 作为环境为例来讲解。
先复述一下DDPG相关的概念定义:
behavior policy β : 在RL训练过程中,我们要兼顾2个e: exploration和exploit;exploration的目的是探索潜在的更优策略,所以训练过程中,我们为action的决策机制引入随机噪声:
将action的决策从确定性过程变为一个随机过程, 再从这个随机过程中采样得到action,下达给环境执行.
过程如下图所示:
上述这个策略叫做behavior策略,用 β 来表示, 这时RL的训练方式叫做off-policy.
这里与 ϵ−greedy 的思路是类似的。
DDPG中,使用Uhlenbeck-Ornstein随机过程(下面简称UO过程),作为引入的随机噪声:
UO过程在时序上具备很好的相关性,可以使agent很好的探索具备动量属性的环境。
注意:
– 这个 β 不是我们想要得到的最优策略,仅仅在训练过程中,生成下达给环境的action, 从而获得我们想要的数据集,比如状态转换(transitions)、或者agent的行走路径等,然后利用这个数据集去 训练策略 μ ,以获得最优策略。
– 在test 和 evaluation时,使用 μ ,不会再使用 β 。
Q 函数: 即action-value 函数,定义在状态 st 下,采取动作 at 后,且如果持续执行策略 μ 的情况下, 所获得的 Rt 期望值, 用Bellman 等式来定义:
Q 网络:DDPG中,我们用一个卷积神经网络对 Q 函数进行模拟,这个网络我们就叫做 Q 网络, 其参数为 θQ 。采用了DQN相同的方法。
如何衡量一个策略 μ 的表现:用一个函数 J 来衡量,我们叫做performance objective,针对off-policy学习的场景,定义如下:
训练的目标: 最大化 Jβ(μ) ,同时最小化 Q 网络的Loss(下面描述算法步骤时会给出)。
最优行为策略 μ 的定义: 即最大化 Jβ(μ) 的策略:
最优 Q 网络定义:具备最小化的 Q 网络Loss;
训练 Q 网络的过程,就是寻找 Q 网络参数 θQ 的最优解的过程,我们使用SGD的方法。
online 和 target 网络
以往的实践证明,如果只使用单个”Q神经网络”的算法,学习过程很不稳定,因为Q网络的参数在频繁gradient update的同时,又用于计算Q网络和策略网络的gradient, 参见下面等式(1),(2),(3).
基于此,DDPG分别为策略网络、Q网络各创建两个神经网络拷贝,一个叫做online,一个叫做target:
在训练完一个mini-batch的数据之后,通过SGA/SGD算法更新online网络的参数,然后再通过soft update算法更新 target 网络的参数。soft update是一种running average的算法:
DDPG算法流程如下:
初始化actor\critic的 online 神经网络参数: θQ 和 θμ ;
将online网络的参数拷贝给对应的target网络参数: θQ′←θQ,θμ′←θμ ;
初始化replay memory buffer R ;
for each episode:
初始化UO随机过程;
for t = 1, T:
下面的步骤与DDPG实现框架图中步骤编号对应:
actor 根据behavior策略选择一个 at , 下达给gym执行该 at .
at=μ(st|θμ)+t
behavior策略是一个根据当前online策略 μ 和随机UO噪声生成的随机过程, 从这个随机过程采样 获得 at 的值。gym执行 at ,返回reward rt 和新的状态 st+1 ;
actor将这个状态转换过程(transition): (st,at,rt,st+1) 存入replay memory buffer R 中,作为训练online网络的数据集。
从replay memory buffer R 中,随机采样 N 个 transition 数据,作为online策略网络、 online Q网络的一个mini-batch训练数据。我们用 (si,ai,ri,si+1) 表示mini-batch中的单个transition数据。
计算online Q网络的 gradient:
Q 网络的loss定义:使用类似于监督式学习的方法,定义loss为MSE: mean squared error:
L=1N∑i(yi−Q(si,ai|θQ))2(1)
其中, yi 可以看做”标签”:
yi=ri+γQ′(si+1,μ′(si+1|θμ′)|θQ′)(2)
基于标准的back-propagation方法,就可以求得L针对 θQ 的gradient: ▿θQL 。
有两点值得注意:
- yi 的计算,使用的是 target 策略网络 μ′ 和 target Q 网络 Q′ ,
这样做是为了Q网络参数的学习过程更加稳定,易于收敛。
- 这个标签本身依赖于我们正在学习的target网络,这是区别于监督式学习的地方。update online Q: 采用Adam optimizer更新 θQ ;
- 计算策略网络的policy gradient:
policy gradient的定义:表示performance objective的函数 J 针对 θμ 的
gradient。 根据2015 D.Silver 的DPG 论文中的数学推导,在采用off-policy的训练方法时,policy gradient算法如下:
▿θμJβ(μ)≈Es∼ρβ[▿aQ(s,a|θQ)|a=μ(s)⋅▿θμμ(s|θμ)](3)
也即,policy gradient是在 s 根据 ρβ 分布时, ▿aQ⋅▿θμμ 的期望值。 我们用Monte-carlo方法来估算这个期望值:
在replay memory buffer中存储的(transition): (si,ai,ri,si+1) , 是基于agent的behavior策略 β 产生的,它们的分布函数(pdf)为 ρβ ,所以当我们从replay memory buffer中随机采样获得mini-batch数据时,根据Monte-carlo方法,使用mini-batch数据代入上述policy gradient公式,可以作为对上述期望值的一个无偏差估计 (un-biased estimate), 所以policy gradient 可以改写为:
▿θμJβ(μ)≈1N∑i(▿aQ(s,a|θQ)|s=si,a=μ(si)⋅▿θμμ(s|θμ)|s=si)(4)8 . update online策略网络:采用Adam optimizer更新 θμ ;
9 . soft update target网络 μ′ 和 Q′ :
使用running average 的方法,将online网络的参数,soft update给target网络的参数:
soft update:τ一般取值0.001{θQ′←τθQ+(1−τ)θQ′θμ′←τθμ+(1−τ)θμ′
end for time step
end for episode
总结一下:
actor-critic框架是一个在循环的episode和时间步骤条件下,通过环境、actor和critic三者交互,来迭代训练策略网络、Q网络的过程。
基于tensorflow的代码实现。