赞
踩
前面几篇文章价值函数近似、DQN算法、DQN改进算法DDQN和Dueling DQN介绍了 DQN 算法以及其改进算法 DDQN 和 Dueling DQN 。他们都是对价值函数进行了近似表示,也就是 学习价值函数,然后从价值函数中提取策略,这种方式叫做 Value Based。
回顾学习路径发现,从动态规划到蒙地卡罗,到TD到Qleaning再到DQN,一路为计算Q值和V值绞尽脑汁。但大家有没有发现,上述过程包含一个固定思维,就是求解最优策略一定要算Q值和V值,然后找到具有最大Q值的动作,这种思路属于Value Based算法。但是计算Q值和V值并不是最终目的呀,强化学习问题是要找一个最优策略,那为什么不直接学习这个最优策略呢?这就是 Policy Based 算法的路线。
Value Based 强化学习方法在很多领域得到比较好的应用,但是其也有局限性。
1)首先就是对连续动作处理能力不足,算法 DQN 使用的 CartPole-v1 环境,在这个环境中只有两个动作:控制小车向左或者向右,这就是离散动作。那连续动作就是动作不光有方向,而且还有大小,对小车施加的力越大,小车的动作幅度也会越大。例如自动驾驶控制方向盘,还请读者自行体会。这个时候,使用离散的方式是不好表达的,而使用基于 Policy Based 方法就很容易。
2)无法解决随机策略(Stochastic Policy)问题。随机性策略就是把当前状态输入网络,输出的是不同动作的概率分布(比如 40% 的概率向左,60% 的概率向右)或者是对于连续动作输出一个高斯分布。而基于 Value Based 的算法是输出是每个动作的动作价值
Q
(
s
,
a
)
Q(s,a)
Q(s,a) ,然后选择一个价值最大的动作,也就是说输出的是一个确定的动作,这种称之为确定性策略(Deterministic Policy)。但是有些问题的最优策略是随机策略,所以此时 基于 Value Based 的方法就不再适用,这时候就可以适用基于 Policy Based 的方法。
类比于近似价值函数的过程: q ^ ( s , a , w ) ≈ q π ( s , a ) \hat{q}(s, a, w) \approx q_\pi(s, a) q^(s,a,w)≈qπ(s,a) 。对于 Policy Based 强化学习方法下,可以使用同样的方法对策略进行近似,给定一个使用参数 θ \theta θ 近似的 π θ ( s , a ) \pi_\theta(s,a) πθ(s,a) ,然后找出最好的 θ \theta θ 。
那么该如何评估策略 π θ \pi_\theta πθ 的好坏呢?也就是优化目标是什么?
对于离散动作的环境可以优化初始状态收获的期望:
J
1
(
θ
)
=
V
π
θ
(
s
1
)
=
E
π
θ
[
v
1
]
J_1(\theta) = V_{\pi_\theta}(s_1) = E_{\pi_\theta}[v_1]
J1(θ)=Vπθ(s1)=Eπθ[v1]
对于那些没有明确初始状态的连续环境,可以优化平均价值:
J
a
v
V
(
θ
)
=
∑
s
d
π
θ
(
s
)
V
π
θ
(
s
)
J_{avV}(\theta) = \sum_sd_{\pi_{\theta}}(s)V_{\pi_\theta}(s)
JavV(θ)=s∑dπθ(s)Vπθ(s)
或者定义为每一段时间步的平均奖励:
J
a
v
R
(
θ
)
=
∑
s
d
π
θ
(
s
)
∑
a
π
θ
(
s
,
a
)
R
(
s
,
a
)
J_{avR}(\theta) = \sum_sd_{\pi_\theta}(s)\sum_a\pi_\theta(s,a)R(s,a)
JavR(θ)=s∑dπθ(s)a∑πθ(s,a)R(s,a)
其中 d π θ ( s ) d_{\pi_\theta}(s) dπθ(s) 是基于策略 π θ \pi_\theta πθ 生成的马尔科夫链关于状态 的静态分布
无论采用上述哪一种优化 方法,最终对
θ
\theta
θ 求导的梯度都可以表示为:
∇
θ
J
(
θ
)
=
E
π
θ
[
∇
θ
l
o
g
π
θ
(
s
,
a
)
R
(
s
,
a
)
]
\nabla_\theta J(\theta) = E_{\pi_\theta}[\nabla_\theta\;log\pi_\theta(s,a)R(s,a)]
∇θJ(θ)=Eπθ[∇θlogπθ(s,a)R(s,a)]
具体推导请往下看
现在假设策略
π
θ
\pi_\theta
πθ 是可导的,就来计算策略梯度
∇
θ
π
θ
(
s
,
a
)
\nabla_\theta \pi_\theta(s,a)
∇θπθ(s,a) 。这里先介绍一个叫 likelihood ratio
的小技巧:
∇
θ
π
θ
(
s
,
a
)
=
π
θ
(
s
,
a
)
∇
θ
π
θ
(
s
,
a
)
π
θ
(
s
,
a
)
=
π
θ
(
s
,
a
)
⋅
∇
θ
l
o
g
π
θ
(
s
,
a
)
\nabla_\theta \pi_\theta(s,a) = \pi_\theta(s,a)\frac{\nabla_\theta \pi_\theta(s,a)}{\pi_\theta(s,a)} \\ = \pi_\theta(s,a) \cdot \nabla_\theta log\pi_\theta(s,a)
∇θπθ(s,a)=πθ(s,a)πθ(s,a)∇θπθ(s,a)=πθ(s,a)⋅∇θlogπθ(s,a)
这里的
∇
θ
l
o
g
π
θ
(
s
,
a
)
\nabla_\theta log\pi_\theta(s,a)
∇θlogπθ(s,a) 就叫做 score function
。
下面介绍策略函数的形式,对于离散动作一般就是 Softmax Policy。关于 Softmax 函数,相信学过深度学习应该都比较了解,这里不在赘述。对于连续动作环境就是 Gaussian Policy。下面分别介绍
把策略用线性特征组合的方式表示为:
ϕ
(
s
,
a
)
T
θ
\phi(s,a)^T\theta
ϕ(s,a)Tθ 。此时有:
π
θ
(
s
,
a
)
=
e
x
p
ϕ
(
s
,
a
)
T
θ
∑
a
′
e
x
p
ϕ
(
s
,
a
)
T
θ
\pi_\theta(s,a) = \frac{exp^{\phi(s,a)^T\theta}}{\sum_{a'}exp^{\phi(s,a)^T\theta}}
πθ(s,a)=∑a′expϕ(s,a)Tθexpϕ(s,a)Tθ
此时的 score function
为:
∇
θ
l
o
g
π
θ
(
s
,
a
)
=
∇
θ
[
l
o
g
e
x
p
ϕ
(
s
,
a
)
T
θ
−
∑
a
′
l
o
g
e
x
p
ϕ
(
s
,
a
)
T
θ
]
=
∇
θ
[
ϕ
(
s
,
a
)
T
θ
−
∑
a
′
ϕ
(
s
,
a
)
T
θ
]
=
ϕ
(
s
,
a
)
−
∑
a
′
ϕ
(
s
,
a
)
在连续动作空间中,一般使用 Gaussian policy 。其中的均值是特征的线性组合: μ ( s ) = ϕ ( s ) T θ \mu(s) = \phi(s)^T\theta μ(s)=ϕ(s)Tθ 。方差可以固定为 σ 2 \sigma^2 σ2 也可以作为一个参数。那么对于连续动作空间有: a ~ N ( μ ( s ) , σ 2 ) a\;~ \;N(\mu(s), \sigma^2) a~N(μ(s),σ2) 。
此时的 score function
为:
∇
θ
l
o
g
π
θ
(
s
,
a
)
=
∇
θ
l
o
g
[
1
2
π
σ
e
x
p
(
−
(
a
−
μ
(
s
)
)
2
2
σ
2
)
]
=
∇
θ
[
l
o
g
1
2
π
σ
−
l
o
g
e
x
p
(
(
a
−
μ
(
s
)
)
2
2
σ
2
)
]
=
−
∇
θ
(
(
a
−
ϕ
(
s
)
T
θ
)
2
2
σ
2
)
=
(
a
−
μ
(
s
)
)
ϕ
(
s
)
σ
2
对于 Policy Gradient 的求导应该来说是比较复杂的,重点是理解对于一条轨迹如何表示,弄明白符号所代表的含义,推导过程也不是那么复杂。下面正式开始 Policy Gradient 的推导,首先推导对于一条 MDP 轨迹的 Policy Gradient,然后再推导有多条轨迹的情况。
开始的状态 s 有: s ~ d ( s ) s\;~\;d(s) s~d(s) 。对于这一步的奖励 为 r = R ( s , a ) r = R(s,a) r=R(s,a) 。
上文有提到其中 d π θ ( s ) d_{\pi_\theta}(s) dπθ(s) 是基于策略 π θ \pi_\theta πθ 生成的马尔科夫链关于状态 的静态分布
J ( θ ) = E π θ [ r ] = ∑ s ∈ S d ( s ) ∑ a ∈ A π θ ( s , a ) ⋅ r J(\theta) = E_{\pi_\theta}[r] = \sum_{s\in S}d(s)\sum_{a\in A}\pi_\theta(s,a)\cdot r J(θ)=Eπθ[r]=s∈S∑d(s)a∈A∑πθ(s,a)⋅r
那么优化目标就是使奖励尽可能的大,然后使用 likelihood ratio
计算 Policy Gradient :
∇
J
(
θ
)
=
∑
s
∈
S
d
(
s
)
∑
a
∈
A
π
θ
(
s
,
a
)
∇
θ
l
o
g
π
θ
(
s
,
a
)
⋅
r
=
E
π
θ
[
∇
θ
l
o
g
π
θ
(
s
,
a
)
⋅
r
]
下面介绍在多条 MDP 轨迹的情况,假设一个状态轨迹如下表示:
τ
=
(
s
0
,
a
0
,
r
1
,
…
,
s
T
−
1
,
a
T
−
1
,
r
T
,
s
T
)
~
(
π
θ
,
P
(
s
t
+
1
∣
s
t
,
a
t
)
)
\tau = (s_0, a_0, r_1,\ldots,s_{T-1}, a_{T-1}, r_T, s_T)\;~\;(\pi_\theta,P(s_{t+1}|s_t, a_t))
τ=(s0,a0,r1,…,sT−1,aT−1,rT,sT)~(πθ,P(st+1∣st,at))
这里把按照策略 π θ \pi_\theta πθ 的状态轨迹表示为概率 P 的形式
一条轨迹下所获得的奖励之和表示为:
R
(
τ
)
=
∑
t
=
0
T
R
(
s
t
,
a
t
)
R(\tau) = \sum_{t=0}^TR(s_t, a_t)
R(τ)=∑t=0TR(st,at) 。那么轨迹的奖励期望就是优化目标。还可以把获得的奖励写成加和的形式:如果能表示出每条轨迹发生的概率
P
(
τ
;
θ
)
P(\tau;\theta)
P(τ;θ),那么每条轨迹的奖励期望就等于轨迹获得奖励乘以对应轨迹发生的概率:
J
(
θ
)
=
E
π
θ
[
∑
t
=
0
T
R
(
s
t
,
a
t
)
]
=
∑
τ
P
(
τ
;
θ
)
R
(
τ
)
J(\theta) = E_{\pi_\theta}\left[\sum_{t=0}^TR(s_t, a_t)\right] = \sum_\tau P(\tau;\theta)R(\tau)
J(θ)=Eπθ[t=0∑TR(st,at)]=τ∑P(τ;θ)R(τ)
此时的最优参数
θ
∗
\theta^*
θ∗ 可以表示为:
θ
∗
=
a
r
g
m
a
x
θ
J
(
θ
)
=
a
r
g
m
a
x
∑
τ
P
(
τ
;
θ
)
R
(
τ
)
\theta^* = arg\;max_\theta J(\theta) = arg\;max \sum_\tau P(\tau;\theta)R(\tau)
θ∗=argmaxθJ(θ)=argmaxτ∑P(τ;θ)R(τ)
下面就来求导
J
(
θ
)
J(\theta)
J(θ) :
∇
θ
J
(
θ
)
=
∇
θ
∑
τ
P
(
τ
;
θ
)
R
(
τ
)
=
∑
τ
P
(
τ
;
θ
)
∇
θ
(
τ
;
θ
)
P
(
τ
;
θ
)
R
(
τ
)
=
∑
τ
P
(
τ
;
θ
)
∇
θ
l
o
g
P
(
τ
;
θ
)
⋅
R
(
τ
)
这里
∇
θ
J
(
θ
)
\nabla_\theta J(\theta)
∇θJ(θ) 是基于轨迹来表示的,其实轨迹
τ
\tau
τ 的分布是不知道的。所以可以采用 MC 采样的方法来近似表示,假如采集到 m 条轨迹,那么就可以把这 m 条奖励和取平均,就得到对优化目标的近似求导结果:
∇
θ
J
(
θ
)
≈
1
m
∑
i
=
1
m
R
(
τ
i
)
∇
θ
l
o
g
P
(
τ
i
;
θ
)
\color{red}\nabla_\theta J(\theta) \approx \frac{1}{m}\sum_{i=1}^mR(\tau_i)\;\nabla_\theta log\;P(\tau_i;\theta)
∇θJ(θ)≈m1i=1∑mR(τi)∇θlogP(τi;θ)
那一条轨迹发生的概率
P
(
τ
;
θ
)
P(\tau;\theta)
P(τ;θ) 如何表示呢?若一条轨迹图如下所示,可以看到就是是一系列的概率连乘,(注意,图中下标从 1 开始,而下面公式下标从 0 开始)
那么
P
(
τ
;
θ
)
P(\tau;\theta)
P(τ;θ) 就可以表示为:
P
(
τ
;
θ
)
=
μ
(
s
0
)
∏
t
=
0
T
−
1
π
θ
(
a
t
∣
s
t
)
⋅
p
(
s
t
+
1
∣
s
t
,
a
t
)
P(\tau;\theta) = \mu(s_0) \prod_{t=0}^{T-1}\pi_\theta(a_t|s_t)\cdot p(s_{t+1}|s_t,a_t)
P(τ;θ)=μ(s0)t=0∏T−1πθ(at∣st)⋅p(st+1∣st,at)
现在就把
∇
θ
J
(
θ
)
\nabla_\theta J(\theta)
∇θJ(θ) 中的将轨迹分解为状态和动作:
∇
θ
l
o
g
P
(
τ
i
;
θ
)
=
∇
θ
l
o
g
[
P
(
τ
;
θ
)
=
μ
(
s
0
)
∏
t
=
0
T
−
1
π
θ
(
a
t
∣
s
t
)
⋅
p
(
s
t
+
1
∣
s
t
,
a
t
)
]
=
∇
θ
[
l
o
g
μ
(
s
0
)
+
∑
t
=
0
T
−
1
l
o
g
π
θ
(
a
t
∣
s
t
)
+
∑
t
=
0
T
−
1
l
o
g
p
(
s
t
+
1
∣
s
t
,
a
t
)
]
=
∑
t
=
0
T
−
1
∇
θ
l
o
g
π
θ
(
a
t
∣
s
t
)
对于一连串的连乘形式,把 log
放进去就会变成连加的形式,在上面式子中,只有中间一项和 参数
θ
\theta
θ 有关,使得最终结果大大简化。这也是为何使用 likelihood ratio
的原因,这样就可以消去很多无关的变量。然后就得到了优化目标的最终求导结果:
∇
θ
J
(
θ
)
≈
1
m
∑
i
=
1
m
R
(
τ
i
)
∑
t
=
0
T
−
1
∇
θ
l
o
g
π
θ
(
a
t
i
∣
s
t
i
)
\color{red}\nabla_\theta J(\theta) \approx \frac{1}{m}\sum_{i=1}^mR(\tau_i)\;\sum_{t=0}^{T-1}\nabla_\theta\;log\;\pi_\theta(a_t^i|s_t^i)
∇θJ(θ)≈m1i=1∑mR(τi)t=0∑T−1∇θlogπθ(ati∣sti)
对于当前的目标函数梯度,是基于MC采样得到的,会有比较高的方差 ,下一篇文章将会介绍两种减小方差的方法,以及 Policy Gradient 基础的 REINFORCE
算法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。