策略学习
前面已经学习过了策略函数 π ( a ∣ s ) \pi(a|s) π(a∣s),这是一个概率密度函数。只要有了一个好的策略函数,我们就可以根据策略函数自动控制智能体运动,所以下面我们就讨论如何找出一个函数来近似策略函数。
策略网络(policy network)
这里就是利用神经网络 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(a∣s;θ)来近似策略函数 π ( a ∣ s ) \pi(a|s) π(a∣s),其中 θ \theta θ是神经网络的参数,我们主要是通过学习来改进 θ \theta θ
使用 s o f t m a x softmax softmax激活函数是为了使得输出的概率值和为1(即归一化)。
策略学习
前面我们已经使用神经网络来将近似策略函数
π
(
a
∣
s
)
\pi(a|s)
π(a∣s),下面使用近似的策略函数来表示状态价值函数。
V
(
s
t
;
θ
)
=
∑
a
π
(
a
∣
s
t
;
θ
)
⋅
Q
π
(
s
t
,
a
)
V(s_t;\theta)= {\textstyle \sum_{a}}\pi(a|s_t;\theta)\cdot Q_{\pi}(s_t,a)
V(st;θ)=∑aπ(a∣st;θ)⋅Qπ(st,a)
θ
\theta
θ就是神经网络中的参数。我们通过改进
θ
\theta
θ的值来使得
V
V
V的值变大
J
(
θ
)
=
E
S
[
V
(
S
;
θ
)
]
J(\theta)=\mathbb{E}_S[V(S;\theta)]
J(θ)=ES[V(S;θ)]
通过求S的期望,我们可以把S消掉,最后只剩下
θ
\theta
θ,所以最终目标就是不断改进
θ
\theta
θ,使得
J
(
θ
)
J(\theta)
J(θ)变大
策略梯度(policy gradient)
首先观测到一个状态
s
s
s,
∂
V
(
s
;
θ
)
∂
θ
=
∂
∑
a
π
(
a
∣
s
t
;
θ
)
⋅
Q
π
(
s
t
,
a
)
∂
θ
=
∑
a
∂
π
(
a
∣
s
t
;
θ
)
⋅
Q
π
(
s
t
,
a
)
∂
θ
\frac{\partial{V(s;\theta)}}{\partial{\theta}}=\frac{\partial{{\textstyle \sum_{a}}\pi(a|s_t;\theta)\cdot Q_{\pi}(s_t,a)}}{\partial{\theta}} \\ ={\textstyle \sum_{a}} \frac{\partial{\pi(a|s_t;\theta)\cdot Q_{\pi}(s_t,a)}}{\partial{\theta}}
∂θ∂V(s;θ)=∂θ∂∑aπ(a∣st;θ)⋅Qπ(st,a)=∑a∂θ∂π(a∣st;θ)⋅Qπ(st,a)
然后我们假设
Q
π
Q_{\pi}
Qπ不依赖于
θ
\theta
θ
=
∑
a
∂
π
(
a
∣
s
t
;
θ
)
∂
θ
⋅
Q
π
(
s
t
,
a
)
=
∑
a
π
(
a
∣
s
t
;
θ
)
⋅
∂
l
n
π
(
a
∣
s
t
;
θ
)
∂
θ
⋅
Q
π
(
s
t
,
a
)
=
E
A
[
∂
l
n
π
(
a
∣
s
t
;
θ
)
∂
θ
⋅
Q
π
(
s
t
,
a
)
]
={\textstyle \sum_{a}} \frac{\partial{\pi(a|s_t;\theta)}}{\partial{\theta}}\cdot Q_{\pi}(s_t,a) \\ ={\textstyle \sum_{a}} \pi(a|s_t;\theta) \cdot \frac{\partial{ln\pi(a|s_t;\theta)}}{\partial{\theta}}\cdot Q_{\pi}(s_t,a) \\ =\mathbb{E}_{A}[ \frac{\partial{ln\pi(a|s_t;\theta)}}{\partial{\theta}}\cdot Q_{\pi}(s_t,a)]
=∑a∂θ∂π(a∣st;θ)⋅Qπ(st,a)=∑aπ(a∣st;θ)⋅∂θ∂lnπ(a∣st;θ)⋅Qπ(st,a)=EA[∂θ∂lnπ(a∣st;θ)⋅Qπ(st,a)]
计算离散的值,如超级玛丽中,动作action只有{“left”,“right”,“up”}这三种状态,我们可以利用上面的公式
∂
V
(
s
;
θ
)
∂
θ
=
∑
a
∂
π
(
a
∣
s
t
;
θ
)
∂
θ
⋅
Q
π
(
s
t
,
a
)
\frac{\partial{V(s;\theta)}}{\partial{\theta}}={\textstyle \sum_{a}} \frac{\partial{\pi(a|s_t;\theta)}}{\partial{\theta}}\cdot Q_{\pi}(s_t,a)
∂θ∂V(s;θ)=∑a∂θ∂π(a∣st;θ)⋅Qπ(st,a)来计算
f
(
a
,
θ
)
f(a,\theta)
f(a,θ),可以得到策略梯度:
∂
V
(
s
;
θ
)
∂
θ
=
f
(
"
l
e
f
t
"
,
θ
)
+
f
(
"
r
i
g
h
t
"
,
θ
)
+
f
(
"
u
p
"
,
θ
)
\frac{\partial{V(s;\theta)}}{\partial{\theta}}=f("left",\theta)+f("right",\theta)+f("up",\theta)
∂θ∂V(s;θ)=f("left",θ)+f("right",θ)+f("up",θ)
当然如果是连续的动作,例如动作空间是啊0-1之间的连续变量
∂
V
(
s
;
θ
)
∂
θ
=
E
A
∼
π
(
⋅
∣
s
;
θ
)
[
∂
l
n
π
(
A
∣
s
t
;
θ
)
∂
θ
⋅
Q
π
(
s
t
,
A
)
]
\frac{\partial{V(s;\theta)}}{\partial{\theta}}=\mathbb{E}_{A \sim \pi(\cdot | s;\theta)}[ \frac{\partial{ln\pi(A|s_t;\theta)}}{\partial{\theta}}\cdot Q_{\pi}(s_t,A)]
∂θ∂V(s;θ)=EA∼π(⋅∣s;θ)[∂θ∂lnπ(A∣st;θ)⋅Qπ(st,A)]
然后我们进行蒙特卡洛近似从
π
(
⋅
∣
s
;
θ
)
\pi(\cdot | s;\theta)
π(⋅∣s;θ)随机抽样
a
^
\hat{a}
a^,然后计算
g
(
a
^
,
θ
)
=
∂
l
n
π
(
a
^
∣
s
;
θ
)
∂
θ
⋅
Q
π
(
s
,
a
^
)
g(\hat{a},\theta)=\frac{\partial{ln\pi(\hat{a}|s;\theta)}}{\partial{\theta}}\cdot Q_{\pi}(s,\hat{a})
g(a^,θ)=∂θ∂lnπ(a^∣s;θ)⋅Qπ(s,a^)。显而易见的,由于是随机抽样的
g
(
a
^
,
θ
)
g(\hat{a},\theta)
g(a^,θ)是
∂
V
(
s
;
θ
)
∂
θ
\frac{\partial{V(s;\theta)}}{\partial{\theta}}
∂θ∂V(s;θ)的无偏估计。策略梯度求出之后,就可以根据策略梯度更新策略网络,
θ
t
+
1
=
θ
t
+
β
⋅
g
(
a
t
,
θ
t
)
\theta_{t+1}=\theta_{t}+\beta \cdot g(a_t,\theta_{t})
θt+1=θt+β⋅g(at,θt)。
总结
策略学习就是求出一个策略函数 π \pi π,然后根据策略函数自动控制智能体的运动。然后我们通过神经网路求策略函数,这个神经网络就是策略网络,然后通过策略梯度更新策略网络中的参数。