值函数
动态规划,蒙特卡洛和时间差分的强化学习,均遵循基本的步骤:先评估值函数,然后根据值函数改进策略。之前介绍的方法也有一个前提条件即状态和行为是离散的,状态空间和行为空间有限,状态值函数为一个索引,状态-行为值函数为二维表格,因此也被成为表格型强化学习。
如果状态或者状态-行为的维度多大,比如状态为连续空间,那么就需要考虑逼近值函数了,之后仍然采用策略迭代或者值迭代的方法进行强化学习。
逼近值函数的话,那么就是监督学习了,需要确定学习的目标。重新看一下蒙特卡洛和时间差分法的公式:
蒙特卡洛方法:
ν
(
s
t
)
=
ν
(
s
t
)
+
α
(
G
t
−
ν
(
s
t
)
)
\nu(s_t)= \nu(s_t) + \alpha \big(G_t - \nu(s_t)\big)
ν(st)=ν(st)+α(Gt−ν(st))
时间差分法:
ν
(
s
t
)
=
ν
(
s
t
)
+
α
(
R
t
+
1
+
γ
ν
(
s
t
+
1
)
−
ν
(
s
t
)
)
\nu(s_t)= \nu(s_t) + \alpha \big(R_{t+1} + \gamma \nu(s_{t+1}) - \nu(s_t)\big)
ν(st)=ν(st)+α(Rt+1+γν(st+1)−ν(st))
迭代过程都是朝着一个目标更新的,在蒙特卡洛方法中是
G
t
G_t
Gt,在时间差分法中是
R
t
+
1
+
γ
v
(
s
t
+
1
)
R_{t+1} + \gamma v(s_{t+1})
Rt+1+γv(st+1). 因此逼近值函数的输入输出数据对就是
<
S
t
,
U
t
>
<S_t, U_t>
<St,Ut>,对应训练的目标函数是:
a
r
g
m
i
n
θ
(
U
t
−
ν
^
(
S
t
,
θ
)
)
2
arg min_{\theta} \big( U_t - \hat{\nu}(S_t, \theta) \big)^2
argminθ(Ut−ν^(St,θ))2
线性逼近
ν
^
(
s
,
θ
)
=
θ
T
ϕ
(
s
)
\hat{\nu}(s, \theta) = \theta^T \phi(s)
ν^(s,θ)=θTϕ(s),其中
ϕ
(
s
)
\phi(s)
ϕ(s)为基函数
常用的基函数有:
多项式函数,如
(
1
,
s
1
,
s
2
,
s
1
s
2
,
s
1
2
,
s
2
2
,
.
.
.
.
)
\big(1, s_1, s_2, s_1s_2, s_1^2, s_2^2,....)
(1,s1,s2,s1s2,s12,s22,....)
傅里叶函数,如
ϕ
i
(
s
)
=
c
o
s
(
i
π
s
)
,
s
∈
[
0
,
1
]
\phi_i(s)=cos(i\pi s),s \in [0,1]
ϕi(s)=cos(iπs),s∈[0,1]
径向基函数,如
ϕ
i
(
s
)
=
e
x
p
(
−
∣
∣
s
−
c
i
∣
∣
2
2
σ
i
2
)
,
s
∈
[
0
,
1
]
\phi_i(s)=exp \big(-\frac{||s-c_i||^2}{2\sigma_i^2} \big),s \in [0,1]
ϕi(s)=exp(−2σi2∣∣s−ci∣∣2),s∈[0,1]
代码实现见【强化学习笔记】6.2 基于值函数逼近的强化学习方法-蒙特卡洛线性逼近代码实现
代码实现见【强化学习笔记】6.3 基于值函数逼近的强化学习方法-TD Sarsa算法线性逼近代码实现
代码实现见【强化学习笔记】6.4 基于值函数逼近的强化学习方法-TD Q-learning线性逼近代码实现
非线性逼近
常用神经网络等。
代码实现见【强化学习笔记】6.5 基于值函数逼近的强化学习方法-TD Q-learning非线性逼近代码实现
增量式学习方法
随机梯度法(SDG)是常用的增量式学习方法。参数更新的方式为:
θ
t
+
1
=
θ
t
+
α
[
U
t
−
ν
^
(
S
t
,
θ
)
]
∇
θ
ν
^
(
S
t
,
θ
)
\theta_{t+1} = \theta_t + \alpha \big[U_t - \hat{\nu}(S_t, \theta) \big] \nabla_{\theta} \hat{\nu}(S_t, \theta)
θt+1=θt+α[Ut−ν^(St,θ)]∇θν^(St,θ)
对于蒙特卡洛方法,
θ
t
+
1
=
θ
t
+
α
[
G
t
−
ν
^
(
S
t
,
θ
)
]
∇
θ
ν
^
(
S
t
,
θ
)
\theta_{t+1} = \theta_t + \alpha \big[G_t - \hat{\nu}(S_t, \theta) \big] \nabla_{\theta} \hat{\nu}(S_t, \theta)
θt+1=θt+α[Gt−ν^(St,θ)]∇θν^(St,θ)
对于时间差分方法,
θ
t
+
1
=
θ
t
+
α
[
R
t
+
1
+
γ
ν
^
(
S
t
+
1
,
θ
)
−
ν
^
(
S
t
,
θ
)
]
∇
θ
ν
^
(
S
t
,
θ
)
\theta_{t+1} = \theta_t + \alpha \big[R_{t+1} + \gamma \hat{\nu}(S_{t+1}, \theta)- \hat{\nu}(S_t, \theta) \big] \nabla_{\theta} \hat{\nu}(S_t, \theta)
θt+1=θt+α[Rt+1+γν^(St+1,θ)−ν^(St,θ)]∇θν^(St,θ)
注意在时间差分法中目标值中也含有参数
θ
\theta
θ,在这里忽略其影响,这种方法称之为半梯度方法。
当采用线性逼近函数
ν
^
(
s
,
θ
)
=
θ
T
ϕ
(
s
)
\hat{\nu}(s, \theta) = \theta^T \phi(s)
ν^(s,θ)=θTϕ(s)时,
ν
^
(
S
t
,
θ
)
=
ϕ
(
S
t
)
\hat{\nu}(S_t, \theta)=\phi(S_t)
ν^(St,θ)=ϕ(St)
增量式学习方法
可以提高计算效率,但是计算复杂。相关知识可以参看机器学习,不再赘述。
参考书籍:
欢迎关注微信公众号:AITBOOK