赞
踩
回顾下我们前面讲的基于策略的梯度是怎么样的,中间会有一项是优势函数,从看到s时采取a的时刻开始到游戏结束的累计奖励
G
t
n
G_t ^n
Gtn,但是因为游戏的奖励可能是随机的,所以这个值通常是不稳定的,所以可以看成一个随机变量:
既然是随机变量,我们又不能采样到足够的样本,如果采样到不好的结果,那训练的效果也会不好,那我们只能想办法去估计他的期望了,那怎么拿这个期望值去代替采样的值呢,就要用到基于价值的方法:
我们两种价值函数,一种是
V
π
(
s
)
V^\pi(s)
Vπ(s),表示在某个s状态下,用actor
π
\pi
π去跟环境做互动,直到游戏结束的累计奖励的期望。另一种是
Q
π
(
s
,
a
)
Q^\pi(s,a)
Qπ(s,a),表示在某个s状态下,强制采取行为a之后,用actor
π
\pi
π去跟环境做互动,一直到游戏结束的累计奖励的期望。做的时候可以用TD或者MC,TD比较稳,MC比较精确:
其实我们的G的期望,就是Q函数,我们的b也就是基线,可以用
V
π
(
s
t
n
)
V^\pi(s_t ^n)
Vπ(stn),其实这个就是均值,这样的话,红色的这两项我们就可以替换了:
然后我们就需要估计这个了,但是这个是两个网络,就会出现估计不准的风险,而且是两倍的,所以我们能不能改成一个呢:
我们的Q可以写成这样,也就是Q的定义,因为奖励可能是随机的,所以取期望:
然后我们可以把期望给去掉,为什么要去掉呢,貌似是这样做效果比较好,或许是单个奖励的随机性也不影响累计的奖励:
然后代入得:
这样只要估计一个网络就行了,但是引入了奖励的随机变量,但是这个奖励的方差不会很大,比以前的累计的奖励的方差要小。
所以这个训练的过程就变这样了,只是把刚才的式子代进去:
我们要训练两个网络,一个是actor采取动作的,一个是critic,评判V的,我们可以共享前面几层的参数,因为前面几层基本都是游戏画面,用CNN提取特征的操作可以是一样的。另外,我们要给actor的输出加一个限制,希望他的熵大一点,这样输出行为分布可以平均点,也就是每个行为都可能被采用,也就是探索机制:
其实就是分布式并行训练的思想,因为单个可能训练比较慢,看过火影的都知道,鸣人可以用影分身来进行加速训练:
具体就是这么个结构,开始每台机器可以用同一个参数,然后每台机器都采集样本,计算梯度,然后去更新全局的参数,因为是并行的,所以只要把梯度上传就行,不用管现在的参数是什么,只管上传梯度即可:
这个新方法可以解决连续行为的问题,而且他不仅可以知道行为好不好,还能告诉你怎么样的是好的行为,我们可以用训练一个actor来接maxQ的问题,就好像是GAN里面的判别器,用来判别好不好:
我们实际做的时候是训练一个actor网路和Q网络连接起来,我们希望actor生成的a输入Q,使得Q越大越好,训练的时候我们会先固定住Q,然后训练actor,跟GAN训练的步骤类似:
他的算法过程图就是这样,在Q-Learning里面的技巧都可以用上:
然后看看具体的算法细节,这个是我们Q-Learning的算法:
我们经过改良后的:
主要是四点:
1.本来我们采取的a是基于Q的,现在因为有了actor
π
\pi
π,所以改成基于
π
\pi
π。
2.本来我们是max的问题,改成
π
\pi
π来解决,但是我们在训练
π
\pi
π的时候,也需要有固定的目标网络
π
′
\pi'
π′,所以也就是可以用
π
′
\pi'
π′生成a来解决,所以改了。
3.我们的目标是让
π
\pi
π生成的a使得Q最大。
4.我们也要训练多步之后把目标的网络的参数改成训练的。
本篇主要介绍强化学习的actor-critic的方法,结合了前面我们所学的梯度策略和累计奖励期望,介绍了A2C,A3C,还介绍了一种新方法的解决连续行为的Q函数最大问题。
好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自李宏毅课件,侵删。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。