证明这个期望
E
A
π
[
b
⋅
∂
l
n
π
(
A
∣
s
;
θ
)
∂
θ
]
\mathbb{E}_{A~ \pi}[b\cdot \frac{\partial ln\pi (A|s;\theta)}{\partial \theta}]
EA π[b⋅∂θ∂lnπ(A∣s;θ)]为0,可以将b提出去,将得到后的期望展开得到连加的形式,使用链式法则将导数展开,这样接可以消去一项。因为连加是关于a求的,求导是关于
θ
\theta
θ求的,所以可以将连加放入到求导内部,因为
π
\pi
π是对a的概率密度函数,所以它的连加和为1,故结果为0.
上面我们得到了
E
A
π
[
b
⋅
∂
l
n
π
(
A
∣
s
;
θ
)
∂
θ
]
=
0
\mathbb{E}_{A~ \pi}[b\cdot \frac{\partial ln\pi (A|s;\theta)}{\partial \theta}]=0
EA π[b⋅∂θ∂lnπ(A∣s;θ)]=0,使用这个性质向策略梯度中添加baseline,
我们直接求期望往往很困难,所以我们通常使用期望的蒙特卡洛近似。我们将期望中的函数记为
g
(
A
t
)
g(A_t)
g(At),它依赖于随机变量
A
t
A_t
At,期望是按照随机变量
A
t
A_t
At求的,它的概率密度函数是
π
\pi
π,我们根据
π
\pi
π做随机抽样,得到一个动作
a
t
a_t
at,然后计算
g
(
a
t
)
g(a_t)
g(at),即为上面期望的蒙特卡洛近似,
g
(
a
t
)
g(a_t)
g(at)显然是策略梯度的一个无偏估计,这是因为g关于
A
t
A_t
At的期望为策略梯度,
g
a
t
g_{a_t}
gat实际上是随机梯度,实际中我们往往用随机梯度。
Stochastic Policy Gradient
实际我们训练策略网络的时候,我们通常使用随机梯度上升来训练参数,使用的是
g
(
a
t
)
g(a_t)
g(at),这样做策略梯度上升可以使得状态价值变大,也就以为着让策略变得更好。
在看上面
g
(
a
t
)
g(a_t)
g(at)的公式,里面有b,前面我们证明了只要b于
A
t
A_t
At无关,那么我们就可以使得期望保持不变。虽然b不影响
g
(
A
t
)
g(A_t)
g(At)的期望,但是b影响
g
(
a
t
)
g(a_t)
g(at),看下上面公式用不同的b可以得到不同的
g
(
a
t
)
g(a_t)
g(at),如果我们选择的b很好,很接近
Q
π
Q_{\pi}
Qπ,那么随机梯度方差就会小,就会让算法收敛的更快。
Choice 2:
b
=
V
π
(
s
t
)
b=V_{\pi}(s_t)
b=Vπ(st),因为状态
s
t
s_t
st是先于动作被观测到的,所以它不依赖于动作。我们为啥要用这个呢?因为上面我们提到了,如果我们选择的b很好,非常的接近动作价值函数
V
π
V_{\pi}
Vπ这样我们在用蒙特卡洛近似策略梯度的期望的时候,就可以使得方差很小,收敛更快。根据定义状态价值函数
V
π
V_{\pi}
Vπ是动作价值函数
Q
π
(
s
t
,
A
t
)
Q_{\pi}(s_t,A_t)
Qπ(st,At)关于动作
A
t
A_t
At的期望。作为期望显然很接近动作价值函数,所以很合适。
REINFORCE with Baseline
复习
之前我们推导出了随机策略梯度,也就是上面的公式,但是它里面还有未知项,所以我们要近似,我们可以使用观测到的值
u
t
u_t
ut来近似
Q
π
(
s
t
,
a
t
)
Q_{\pi}(s_t,a_t)
Qπ(st,at),这也是蒙特卡洛近似,这个算法就是REINFORCE。
我们观测到一个轨迹,也就是一直到游戏结束。
计算return,这样我们就可以得到回报
u
t
u_t
ut
u
t
u_t
ut就是动作价值函数的无偏估计,REINFORCE算法就用这个方法来近似
Q
π
Q_{\pi}
Qπ
上面的公式中还有一个未知的东西,就是
V
π
V_{\pi}
Vπ,我们可以使用神经网络来近似它,也就是价值网络,最终可以直接算出近似的策略梯度。
为了能够计算策略梯度我们进行了3次近似
使用蒙特卡洛来近似期望,将策略梯度近似为随机梯度
g
(
a
t
)
g(a_t)
g(at)
使用观测到的
u
t
u_t
ut来近似动作价值函数,这也是蒙特卡洛近似
使用价值网络来近似状态价值函数
Policy and Value Network
我们需要两个神经网络,策略网络来控制Agent,价值网络作为baseline
策略网络
策略网络是对策略函数的近似,
价值网络
价值网络的输入是状态s,它是对状态价值函数的近似。
共享卷积层参数,因为他们的输入都是对状态s提取特征。
REINFORCE with Baseline
我们使用REINFORCE方法训练策略网络,使用回归方法训练价值网络。
之前我们已经近似出了策略梯度,有了策略梯度我们就可以根据梯度上升来更新策略网络,我们将圈出来的记为
−
δ
t
-\delta_t
−δt,在后面我们训练价值网络的时候也会用到它。
更新价值网络就是让它去拟合回报
u
t
u_t
ut,因为之前我们将状态价值函数近似为了
u
t
u_t
ut,这样我们就可以得到预测的误差,因为我们希望误差越小越好,所以我么可以使用误差的平方作为损失函数。然后求导,就可以得到梯度,然后做梯度下降更新参数。
Summary
每当我们打一局游戏,我们就可以观测到一条轨迹
使用观测到的奖励r来计算回报,价值网络于回报之间的差,就是预测误差
更新策略网络的参数
最后做梯度下降来更新价值网络
因为我们可以在一局游戏中我们可以得到n个回报,这样我们就可以对两个策略网络做n轮更新。
Advantage Actor-Critic (A2C)
Training of A2C
每一轮我们观测到一个transition
然后计算TD target
然后计算TD error
使用近似的策略梯度来更新策略网络参数
θ
\theta
θ
然后更新价值网络的参数
Properties of Value Functions
t时刻的动作价值可以写为下面的公式,期望中的随机性来自于动作
A
t
+
1
A_{t+1}
At+1和状态
S
t
+
1
S_{t+1}
St+1,将这两个变量求期望消除随机性,将对
A
t
+
1
A_{t+1}
At+1的期望推到里面,我们就可以得到第二个公式。 这样我们根据定义动作价值对动作求期望就是状态价值,这样进行替换,就可以得到定理1.
Properties of State-Value Function
我们知道动作价值函数对
A
t
A_t
At的期望就是状态价值函数,将期望中的
Q
π
Q_{\pi}
Qπ使用我们上面得到的定理1替换。这样我们就可以得到定理2.
在前面我们推导出了下面的公式,
g
(
a
t
)
g(a_t)
g(at)是对策略网络的策略梯度的蒙特卡洛近似,其实就是一个随机梯度,里面的
Q
π
(
s
t
,
a
t
)
−
V
π
(
s
t
)
Q_{\pi}(s_t,a_t)-V_{\pi}(s_t)
Qπ(st,at)−Vπ(st)被称为优势函数。我们不知道他们两的值,但是我们在前面得到了他们两的蒙特卡洛近似。然后我们进行替换,然后公式中就只有状态价值函数了,我们使用价值网络对它进行替换。我们可以用做后得到的公式来更新策略网络。