笔记整理自李宏毅老师的公开课
Asynchronous Advantage Actor-Critic (A3C)
回顾Policy Gradient的梯度参数:
∇Rˉθ≈N1n=1∑Nt=1∑Tn⎝⎛t′=t∑Tnrt′−trt′n−b⎠⎞∇logpθ(atn∣stn)
如果令
Gtn=∑t′=tTnrt′−trt′n,
Gtn是Actor跟环境互动而来的,那么
G则会使不稳定的。因为数值本身具有随机性,而且环境也有随机性。不过,如果我们sample足够多的次数,那么均值会比较稳定。
其实,本质上来说,有下面的公式成立:
E[Gtn]=Qπθ(stn,atn)
那么问题转换成了求解
Qπθ(stn,atn);同时,
b可以用
Vπθ(stn)进行表示。但是,这样做的缺点在于,我们需要估计
Qπ和
Vπ这两个神经网络,这样的训练量大,而且结果不稳定。引入一个代换法则:
Qπ(stn,atn)=E[rtn+Vπ(st+1n)]
实际使用时,可以去掉期望值,原作者的Paper实验这样做的效果比较好。
Qπ(stn,atn)=rtn+Vπ(st+1n)
可以这么理解,
Q的意思是为了表示
st状态下,采取行动
at后会获得的所有的奖励总和,那么和自然,这个公式可以表示成当前这一步行动的奖励
rt累加上下一个状态的奖励
V。
r是个随机值,由环境等的因素共同决定,这也是这个模型的缺点,由随机值的影响。
那么,最终的梯度可以表示为:
∇Rˉθ≈N1n=1∑Nt=1∑Tn(rtn+Vπ(st+1n)−Vπ(stn))∇logpθ(atn∣stn)
训练时候的
Q和
V网络可以共享前面几层的参数,只是在最后输出的时候,变换到不同的网络层中。训练的时候,可以使用输出参数的交叉熵作为
π(s)的参数,那么交叉熵越大,说明越需要进行Exploration。
A3C是同时开多个环境进行产生数据,并不断更新。
Pathwise Derivative Policy Gradient
在之前的
Qπ网络中,我们输入一个游戏状态
s和一个行动
a,时候会得到一个
Qπ(s,a)作为输出。而该方法的特别之处在于,专门产生一个Actor
π网络用于生成行动
a,这样,一个网络的输出就会作为另一个网络的输入。训练的时候,需要先训练
Qπ网络,之后固定住该网络,再去训练
π网络。
那么,Actor网络的梯度是:
θπ′=θπ+η∇θπQπ(s,a)
给出一般性的算法:
- 初始化Q-function
Q,target Q-function
Q^=Q,actor
π,target actor
π^=π
- 在每个episode中:
- 对于每一步
- 给定一个状态
st,基于
π采取行动
at,注意这里需要Exploration
- 获得一个奖励
rt,并到达一个新的状态
st+1
- 把
(si,ai,ri,si+1)存储到buffer中
- 从buffer中随机获取一个批次的
(si,ai.ri,si+1)
- 目标函数
y=ri+Q^(si+1,π^(si+1))
- 更新
Q的参数,使得
Q(si,ai)接近
y
- 更新
π的参数去最大化
Q(si,π(si))
- 每C步执行更新
Q^=Q,
π^=π