Policy Gradient方法利用带有权重的梯度上升方法更新策略。在REINFORCE算法中,这个权重是由蒙特卡洛方法来计算未来总体回报 G t G_{t} Gt的。这带来一个问题:就是待优化的策略参数 θ \theta θ只能在与环境交互完成一个Episode后,才进行更新。这种更新方式就是方差大,学习效率比较低。
前面我们用从t时刻开始的未来总奖励 G t G_{t} Gt来作为权重,评价在t时刻,状态为 s t s_{t} st时,执行动作 a t a_{t} at的价值。我们的目的是寻找一组最优的策略参数,使得未来总奖励越高。同时, G t G_{t} Gt的计算是依赖于策略与环境的交互轨迹的,而这个轨迹又具有随机性,因此我们最终的优化目的是 G t G_{t} Gt的期望最大。
由马尔科夫决策过程可知,某一状态下采取某一动作,得到的回报期望可以表示为:
Q
π
(
s
,
a
)
=
E
[
G
t
∣
s
t
=
s
,
a
t
=
a
]
Q_\pi{}(s,a)=\mathbb{E} [G_{t}|s_{t}=s,a_{t}=a]
Qπ(s,a)=E[Gt∣st=s,at=a]因此有人提出将原始的奖励值
G
t
G_{t}
Gt用当前状态
s
t
s_{t}
st和
a
t
a_{t}
at的价值
Q
(
s
t
,
a
t
)
Q(s_{t},a_{t})
Q(st,at)来代替。
用 Q ( s t , a t ) Q(s_{t},a_{t}) Q(st,at)代替 G t G_{t} Gt后,那么该如何求解 Q ( s t , a t ) Q(s_{t},a_{t}) Q(st,at)呢?毫不意外,我们同样用万能的神经网络来求解。因此AC算法就出现了两个神经网络。
在REINFORCE算法中,为了提高PG算法的性能,我们通常会让未来回报
G
t
G_{t}
Gt减去一个baseline,使得权重部分(下图红色部分)有正有负。这样以来,如果是正的,我们就增加这个动作概率;反之减小它的概率。
现在将未来折扣奖励用
Q
(
s
t
,
a
t
)
Q(s_{t},a_{t})
Q(st,at)进行了代替,上式可以转变为:
∇
R
ˉ
θ
≈
1
N
∑
n
=
1
N
∑
t
=
1
T
n
(
Q
(
s
t
n
,
a
t
n
)
−
b
)
∇
log
p
θ
(
a
t
n
,
s
t
n
)
\nabla \bar{R} _{\theta}\approx \frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_{n}} \left ( Q\left ( s_{t}^{n},a_{t}^{n} \right ) -b \right )\nabla\log p_{\theta}\left ( a_{t}^{n},s_{t}^{n} \right )
∇Rˉθ≈N1n=1∑Nt=1∑Tn(Q(stn,atn)−b)∇logpθ(atn,stn)为了让权重有正有负(即下图红色部分),一般的做法是减去
Q
(
s
t
,
a
t
)
Q(s_{t},a_{t})
Q(st,at)的期望。而
Q
(
s
t
,
a
t
)
Q(s_{t},a_{t})
Q(st,at)的期望就是状态
s
t
s_{t}
st的价值
V
(
s
t
)
V(s_{t})
V(st)。
这样以来,梯度计算公式可以转化为:
∇
R
ˉ
θ
≈
1
N
∑
n
=
1
N
∑
t
=
1
T
n
(
Q
(
s
t
,
a
t
)
−
V
(
s
t
)
)
∇
log
p
θ
(
a
t
n
,
s
t
n
)
\nabla \bar{R} _{\theta}\approx \frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_{n}} \left ( Q\left ( s_{t},a_{t} \right ) -V(s_{t}) \right )\nabla\log p_{\theta}\left ( a_{t}^{n},s_{t}^{n} \right )
∇Rˉθ≈N1n=1∑Nt=1∑Tn(Q(st,at)−V(st))∇logpθ(atn,stn)此时,中间的权重就会变为优势函数
A
(
s
t
n
,
a
t
n
)
A(s_{t}^{n},a_{t}^{n})
A(stn,atn)。这样的算法就是优势演员-评论员算法(Advantage Actor Critic,A2C)。
如果这样实现,一个很明显的缺点是我们需要再额外增加一个网络来计算
V
(
s
t
)
V(s_{t})
V(st)。不仅耗费资源,同时估计不准的风险也会增加。何不将二者合并,只估计一个网络呢?幸运的是,马尔科夫告诉我们,V和Q是可以互换的。
Q
π
(
s
t
n
,
a
t
n
)
=
E
[
r
t
n
+
V
π
(
s
t
+
1
n
)
]
Q_\pi{}(s_{t}^{n},a_{t}^{n})=\mathbb{E} [r_{t}^{n}+V_{\pi}(s_{t+1}^{n})]
Qπ(stn,atn)=E[rtn+Vπ(st+1n)]我们把期望去掉,则:
Q
π
(
s
t
n
,
a
t
n
)
=
r
t
n
+
V
π
(
s
t
+
1
n
)
Q_\pi{}(s_{t}^{n},a_{t}^{n})=r_{t}^{n}+V_{\pi}(s_{t+1}^{n})
Qπ(stn,atn)=rtn+Vπ(st+1n)这样一来,我们就只需要一个估计状态价值的网络。梯度计算公式可以表示为:
∇
R
ˉ
θ
≈
1
N
∑
n
=
1
N
∑
t
=
1
T
n
(
r
t
n
+
V
π
(
s
t
+
1
n
)
−
V
(
s
t
)
)
∇
log
p
θ
(
a
t
n
,
s
t
n
)
\nabla \bar{R} _{\theta}\approx \frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_{n}} \left ( r_{t}^{n}+V_{\pi}(s_{t+1}^{n})-V(s_{t}) \right )\nabla\log p_{\theta}\left ( a_{t}^{n},s_{t}^{n} \right )
∇Rˉθ≈N1n=1∑Nt=1∑Tn(rtn+Vπ(st+1n)−V(st))∇logpθ(atn,stn)
PS:关于此处为什么直接将期望去掉?答案是实验表明这样的效果最好,因此就这样用了。