一、策略梯度法
1、评估策略
在前面的学习中,我们已经了解到了,强化学习的目标是求解下式:
θ ∗ = a r g max θ E τ ∼ p θ ( τ ) [ ∑ t r ( s t , a t ) ] (1) \theta^*=arg \max_{\theta}E_{\mathcal{\tau} \sim p_{\theta}(\tau)}[\sum_tr(s_t,a_t)] \tag{1} θ∗=argθmaxEτ∼pθ(τ)[t∑r(st,at)](1)
其中: p θ ( τ ) = p ( s 1 ) Π t = 1 T π θ ( a t ∣ s t ) p ( s t + 1 ∣ s t , a t ) (2) p_{\theta}(\tau) = p(s_1)\Pi_{t=1}^T\pi_{\theta}(a_t|s_t)p(s_{t+1}|s_t,a_t) \tag{2} pθ(τ)=p(s1)Πt=1Tπθ(at∣st)p(st+1∣st,at)(2)
要推导出梯度策略法,我们先研究如何评估目标函数:
J
(
θ
)
=
E
τ
∼
p
θ
(
τ
)
[
∑
t
r
(
s
t
,
a
t
)
]
(3)
J(\theta) = E_{\tau \sim p_{\theta}(\tau)}[\sum_tr(s_t,a_t)] \tag{3}
J(θ)=Eτ∼pθ(τ)[t∑r(st,at)](3)
由于不清楚 p θ ( τ ) p_{\theta}(\tau) pθ(τ)的解析式,因此我们没法直接求解,但是我们能够使用蒙特卡洛方法抽样近似,即:
J ( θ ) = 1 N ∑ i ∑ t r ( s i , t , a i , t ) (4) J(\theta) = \frac{1}{N}\sum_i\sum_tr(s_{i,t},a_{i,t}) \tag{4} J(θ)=N1i∑t∑r(si,t,ai,t)(4)
其中 N N N表示抽样的样本数。 s i , t , a i , t s_{i,t}, a_{i,t} si,t,ai,t分别表示第 i i i个样本在时刻 t t t的状态和行动。
这里的抽样即在橘色框中完成,抽样的结果可以理解为下图右方的多条路径。
而计算(4)
式的过程即在绿色框中完成。
现在我们利用蒙特卡洛抽样的方法能够评估策略的好快,那么我们如何完成蓝色框中的任务,即优化策略呢?
2、优化策略
在优化中,最常见的方法便是根据梯度优化目标函数,在这里我们仍然采用该方法。令:
r
(
τ
)
=
∑
t
r
(
s
t
,
a
t
)
(5)
r(\tau)=\sum_tr(s_t,a_t) \tag{5}
r(τ)=t∑r(st,at)(5)
则目标函数(3)
式可写为:
J
(
θ
)
=
∫
p
θ
(
τ
)
r
(
τ
)
d
τ
(6)
J(\theta) = \int p_{\theta}(\tau)r(\tau)d\tau \tag{6}
J(θ)=∫pθ(τ)r(τ)dτ(6)
其梯度为:
∇
θ
J
(
θ
)
=
∫
∇
θ
p
θ
(
τ
)
r
(
τ
)
d
τ
(7)
\nabla_{\theta}J(\theta)=\int \nabla_{\theta} p_{\theta}(\tau)r(\tau)d\tau \tag{7}
∇θJ(θ)=∫∇θpθ(τ)r(τ)dτ(7)
同样,不知道
p
θ
(
τ
)
p_{\theta}(\tau)
pθ(τ)的表达式,且该处有积分,我们无法直接计算(7)
式。 但是我们有以下的重要恒等式:
p θ ( τ ) ∇ θ l o g p θ ( τ ) = ∇ θ p θ ( τ ) (8) p_{\theta}(\tau) \nabla_{\theta}logp_{\theta}(\tau)=\nabla_{\theta}p_{\theta}(\tau) \tag{8} pθ(τ)∇θlogpθ(τ)=∇θpθ(τ)(8)
由(7)
和(8)
式,我们得到
∇
θ
J
(
θ
)
=
∫
p
θ
(
τ
)
∇
θ
l
o
g
p
θ
(
τ
)
r
(
τ
)
d
τ
(9)
\nabla_{\theta}J(\theta)=\int p_{\theta}(\tau) \nabla_{\theta}logp_{\theta}(\tau)r(\tau)d\tau \tag{9}
∇θJ(θ)=∫pθ(τ)∇θlogpθ(τ)r(τ)dτ(9)
对(9)
式,现在我们可以使用蒙特卡洛方法近似梯度(数学实在神奇), 可写为:
∇ θ J ( θ ) = ∫ p θ ( τ ) ∇ θ l o g p θ ( τ ) r ( τ ) d τ = 1 N ∑ i = 1 N ∇ θ l o g p θ ( τ i ) r ( τ i ) (10) \nabla_{\theta}J(\theta)=\int p_{\theta}(\tau) \nabla_{\theta}logp_{\theta}(\tau)r(\tau)d\tau =\frac{1}{N} \sum_{i=1}^N\nabla_{\theta}log \ p_{\theta}(\tau_i)r(\tau_i) \tag{10} ∇θJ(θ)=∫pθ(τ)∇θlogpθ(τ)r(τ)dτ=N1i=1∑N∇θlog pθ(τi)r(τi)(10)
现根据(2)
式求出:
l
o
g
p
θ
(
τ
)
=
l
o
g
p
(
s
1
)
+
∑
t
=
1
T
[
l
o
g
π
θ
(
a
t
∣
s
t
)
+
l
o
g
p
(
s
t
+
1
∣
a
t
,
s
t
)
]
(11)
logp_{\theta}(\tau)=logp(s_1) + \sum_{t=1}^T[log\pi_{\theta}(a_t|s_t)+log \ p(s_{t+1}|a_t,s_t)] \tag{11}
logpθ(τ)=logp(s1)+t=1∑T[logπθ(at∣st)+log p(st+1∣at,st)](11)
因此有:
∇
θ
l
o
g
p
θ
(
τ
)
=
∑
t
=
1
T
∇
θ
l
o
g
π
θ
(
a
t
∣
s
t
)
(12)
\nabla_{\theta}log \ p_{\theta}(\tau)=\sum_{t=1}^T \nabla_{\theta}log \ \pi_{\theta}(a_t|s_t) \tag{12}
∇θlog pθ(τ)=t=1∑T∇θlog πθ(at∣st)(12)
根据(10)
和(12)
式,并将
r
(
τ
)
r(\tau)
r(τ)展开,我们可以写出梯度的最终形式:
∇ θ J ( θ ) = 1 N ∑ i = 1 N [ ( ∑ t = 1 T ∇ θ l o g π θ ( a t ∣ s t ) ) ( ∑ t = 1 T r ( s i , t , a i , t ) ) ] (13) \nabla_{\theta}J(\theta)=\frac{1}{N}\sum_{i=1}^N\left[\left(\sum_{t=1}^T \nabla_{\theta}log \ \pi_{\theta}(a_t|s_t)\right) \left( \sum_{t=1}^Tr(s_{i,t}, a_{i,t}) \right) \right] \tag{13} ∇θJ(θ)=N1i=1∑N[(t=1∑T∇θlog πθ(at∣st))(t=1∑Tr(si,t,ai,t))](13)
可以看到,这个梯度竟然既不依赖初始分布,也不依赖转移概率,实在惊喜,这样,只要我们能够求出 ∇ θ l o g π θ ( a t ∣ s t ) \nabla_{\theta}log\pi_{\theta}(a_t|s_t) ∇θlogπθ(at∣st), 我们便能够求得梯度,进而实现策略的优化。而这,就是最简单的梯度策略法:REINFORCE (Williams, 1992)
3、直观理解
推导到这里,我们再简单小结一下算法流程:
(1) 黄色框: 运行策略
π
θ
(
a
∣
s
)
\pi_{\theta}(a|s)
πθ(a∣s), 抽样得到
{
τ
}
i
=
1
N
\{ \tau\}_{i=1}^N
{τ}i=1N
(2) 绿色框: 根据(4)
式计算总的奖励,衡量当前策略的好坏
(3) 蓝色框:根据(13)
式计算参数梯度,然后走一个梯度上升步
θ
←
θ
+
λ
∇
θ
J
(
θ
)
\theta \leftarrow \theta+\lambda \nabla_{\theta}J(\theta)
θ←θ+λ∇θJ(θ)
但是,如果我们仅仅使用该算法进行学习,学习的效果往往是不太好的。要分析为什么不太好,以及如何改进,我们先进一步理解 ∇ θ l o g π θ ( a t ∣ s t ) \nabla_{\theta}log \ \pi_{\theta}(a_t|s_t) ∇θlog πθ(at∣st)究竟代表什么。
回顾我们所做的工作,我们使用轨迹样本近似了目标函数梯度
∇
θ
J
(
θ
)
=
1
N
∑
i
=
1
N
∇
θ
l
o
g
p
θ
(
τ
i
)
r
(
τ
i
)
(14)
\nabla_{\theta}J(\theta) = \frac{1}{N}\sum_{i=1}^N \nabla_{\theta}log \ p_{\theta}(\tau_i)r(\tau_i) \tag{14}
∇θJ(θ)=N1i=1∑N∇θlog pθ(τi)r(τi)(14)
而我们知道,对于普通的监督学习,如果我们采用极大似然估计学习策略,最终我们的梯度为:
∇
θ
J
M
L
(
θ
)
=
1
N
∑
i
=
1
N
∇
θ
l
o
g
p
θ
(
τ
i
)
(15)
\nabla_{\theta}J_{ML}(\theta)=\frac{1}{N}\sum_{i=1}^N \nabla_{\theta}log \ p_{\theta}(\tau_i) \tag{15}
∇θJML(θ)=N1i=1∑N∇θlog pθ(τi)(15)
观察(14)
和(15)
式,可以看到策略梯度算法在做和极大似然估计非常相似的事情。只是策略梯度算法多了一个奖励函数的权重
r
(
τ
i
)
r(\tau_i)
r(τi).
这也很容易理解,对于极大似然问题,我们认为每一个样本都是合理的,因此都需要最大化其出现概率。对于策略梯度算法,有的样本是好的,有的样本是坏的,是好是坏我们根据奖励函数决定,当一个样本对应的奖励函数的值为正时,那么策略梯度算法便会增大其概率,为负,则减少其概率。
当然,如果我们只有部分观测信息,即不能得到状态
s
s
s而只能得到观测
o
o
o, 我们同样可以使用(13)
式得到基于观测的梯度
∇ θ J ( θ ) = 1 N ∑ i = 1 N [ ( ∑ t = 1 T ∇ θ l o g π θ ( a t ∣ o t ) ) ( ∑ t = 1 T r ( o i , t , a i , t ) ) ] (16) \nabla_{\theta}J(\theta)=\frac{1}{N}\sum_{i=1}^N\left[\left(\sum_{t=1}^T \nabla_{\theta}log \ \pi_{\theta}(a_t|o_t)\right) \left(\sum_{t=1}^Tr(o_{i,t}, a_{i,t}) \right) \right] \tag{16} ∇θJ(θ)=N1i=1∑N[(t=1∑T∇θlog πθ(at∣ot))(t=1∑Tr(oi,t,ai,t))](16)
这是策略梯度法一个很好的性质,但是在我们以后介绍的基于Q函数之类的学习算法,这个性质往往是不成立的。
了解了策略梯度算法和极大似然估计实际在做类似的事情,只是其多了一个权重 r ( τ i ) r(\tau_i) r(τi)来指导概率分布的更新,这样,我们便能够分析其存在的问题了。
4、高方差问题
由于本质上我们计算(13)
的过程是抽样,而抽样可能是不充分的,因此会导致结果不稳定,可以从此方面预感到高方差的问题。
下面从直观来理解:
如上图所示,蓝色的实曲线是当前概率分布
p
θ
(
τ
)
p_{\theta}(\tau)
pθ(τ), 若我们经过一次抽样得到3个样本,其奖励函数值如绿色实线所示,那么根据(14)
式,由于最左放的绿色实线奖励函数为负,因此策略梯度算法会急剧地将概率分布拉向右边的两个奖励分布为正的样本。 但是, 若我们对三个奖励函数同时加一个常数得到黄色实线,同样根据(14)
式,算法却不会那么急剧的移动。而且更严重的,如果较好的样本对应的奖励函数刚好是0,则其对梯度的贡献也是0,因此是不会产生优化效果的。
就这样加一个常数,就能够很大地改变梯度,影响分布的优化,因此策略梯度算法优化是极不稳定的,也就是说它是高方差的。
再啰嗦一点,观察(6)
式,其实如果对奖励函数加一个函数,我们将常数提出来,最后是不会影响梯度的。但是最后实践却产生了影响,这本质还是因为采样不充分。