之前所有模型的做法都是基于创建一个查询表,在表中维护状态值函数 V ( s ) V(s) V(s)或状态-动作值函数 Q ( s , a ) Q(s,a) Q(s,a)。但对于大规模的MDP时,为每一个状态维护 V ( s ) V(s) V(s)或为每个状态-动作对维护 Q ( s , a ) Q(s,a) Q(s,a) 则需要面临以下问题:
大规模问题:
因此,传统的方法不再适用。针对arge MDPs问题的主要解决方案有:
对于连续状态马尔可夫决策过程,我们可以对状态空间进行离散化。例如,如果用2维连续值 𝑠1, 𝑠2 表示状态,可以使用网格对状态空间进行切分从而转化为离散的状态值。
记离散的状态值为
s
ˉ
\bar{s}
sˉ,离散化的马尔可夫决策过程可以表示为:
(
S
ˉ
,
A
,
{
P
S
ˉ
a
}
,
γ
,
R
)
(\bar{S},A,\{P_{\bar{S}a}\},\gamma,R)
(Sˉ,A,{PSˉa},γ,R),这样一来,就能够使用前述方法求解马尔可夫决策过程。
对于一个大型的离散状态马尔可夫决策过程,我们可以对状态值进一步分桶以进行采样聚合,使用先验知识将相似的离散状态归类到一起。
离散化的方式优点:
• 操作简洁直观
• 高效
• 在处理许多问题时能够达到较好效果
缺点:
• 过于简单地表示价值函数𝑉,可能部分灵敏区域会被忽略
• 可能为每个离散区间假设一个常数值
• 维度灾难
构建参数化(可学习的)函数来近似值函数
V
^
(
s
,
w
)
≈
V
π
(
s
)
Q
^
(
s
,
a
,
w
)
≈
Q
π
(
s
,
a
)
ˆV(s,w)≈Vπ(s)ˆQ(s,a,w)≈Qπ(s,a)
V^(s,w)Q^(s,a,w)≈Vπ(s)≈Qπ(s,a)•
w
\mathbf{w}
w是近似函数的参数,可以通过强化学习进行更新
• 参数化的方法将现有可见的状态泛化到没有见过的状态上

我们希望模型适合在非稳态的(non-stationary),非独立同分布(non-iid)的数据上训练,因此参数化模型比树模型更适合。

梯度下降被广泛用于优化模型的参数。设
J
(
w
)
J(\mathbf{w})
J(w)是对参数
w
\mathbf{w}
w可微的函数。则
J
(
w
)
J(\mathbf{w})
J(w)的梯度可被定义为:
∇
w
J
(
w
)
=
(
∂
J
(
w
)
∂
w
1
⋮
∂
J
(
w
)
∂
w
n
)
\nabla_{\mathbf{w}}J(\mathbf{w})=(∂J(w)∂w1⋮∂J(w)∂wn)
∇wJ(w)=
∂w1∂J(w)⋮∂wn∂J(w)
为了达到损失函数
J
(
w
)
J(\mathbf{w})
J(w)的局部最小值,调整权重向量
w
\mathbf{w}
w的方向以使其朝着负梯度方向进行更新。
Δ
w
=
−
1
2
α
∇
w
J
(
w
)
\Delta\mathbf{w}=-\frac12\alpha\nabla_\mathbf{w}J(\mathbf{w})
Δw=−21α∇wJ(w)
其中,
α
\alpha
α是学习率(一个正的标量值),控制每次更新的步长.
基于随机梯度下降(SGD)的值函数近似
目标:找到参数向量
w
\mathbf{w}
w最小化值函数近似值与真实值之间的均方误差
J
(
w
)
=
E
π
[
(
V
π
(
s
)
−
V
^
(
s
,
w
)
)
2
]
J(\mathbf{w})=\mathbb{E}_\pi\left[(V_\pi(s)-\hat{V}(s,\mathbf{w}))^2\right]
J(w)=Eπ[(Vπ(s)−V^(s,w))2]误差减小的梯度方向
Δ
w
=
−
1
2
α
∇
w
J
(
w
)
=
α
E
π
[
(
V
π
(
s
)
−
V
^
(
s
,
w
)
)
∇
w
V
^
(
s
,
w
)
]
Δw=−12α∇wJ(w)=αEπ[(Vπ(s)−ˆV(s,w))∇wˆV(s,w)]
Δw=−21α∇wJ(w)=αEπ[(Vπ(s)−V^(s,w))∇wV^(s,w)]单次采样进行随机梯度下降
Δ
w
=
α
(
V
π
(
s
)
−
V
^
(
s
,
w
)
)
∇
w
V
^
(
s
,
w
)
\Delta\mathbf{w}=\alpha(V_\pi(s)-\hat{V}(s,\mathbf{w}))\nabla_\mathbf{w}\hat{V}(s,\mathbf{w})
Δw=α(Vπ(s)−V^(s,w))∇wV^(s,w)
用一个特征向量表示状态
x
(
s
)
=
[
x
1
(
s
)
⋮
x
k
(
s
)
]
x(s)=[x1(s)\varvdotsxk(s)]
x(s)=
x1(s)⋮xk(s)
以直升机控制问题为例
• 3D位置
• 3D速度(位置的变化量)
• 3D加速度(速度的变化量)
用特征的线性组合表示价值函数
V
^
(
s
,
w
)
=
x
(
s
)
⊤
w
=
∑
j
=
1
n
x
j
(
s
)
w
j
\hat{V}(s,\mathbf{w})=\mathbf{x}(s)^\top\mathbf{w}=\sum_{j=1}^n\mathbf{x}_j(s)\mathbf{w}_j
V^(s,w)=x(s)⊤w=j=1∑nxj(s)wj
目标函数是参数
w
\mathbf{w}
w的二次函数
J
(
w
)
=
E
π
[
(
V
π
(
s
)
−
x
(
s
)
⊤
w
)
2
]
J(\mathbf{w})=\mathbb{E}_\pi\left[(V_\pi(s)-\mathbf{x}(s)^\top\mathbf{w})^2\right]
J(w)=Eπ[(Vπ(s)−x(s)⊤w)2]
因而随机梯度下降能够收敛到全局最优解上 ∇ w V ^ ( s , w ) = x ( s ) Δ w = α ( V π ( s ) − V ^ ( s , w ) ) x ( s ) ∇wˆV(s,w)=x(s)Δw=α(Vπ(s)−ˆV(s,w))x(s) ∇wV^(s,w)Δw=x(s)=α(Vπ(s)−V^(s,w))x(s)Update = step-size × prediction error × feature value
之前基于表去查找的方法其实是线性状态值函数近似的一种特殊形式。
Table Lookup的Features(只有
s
=
s
i
s=s_i
s=si时才会是1,其他都是0):
x
t
a
b
l
e
(
s
)
=
(
1
(
s
=
s
1
)
⋮
1
(
s
=
s
n
)
)
\mathbf{x}^{table}(s)=(1(s=s1)\varvdots1(s=sn))
xtable(s)=
1(s=s1)⋮1(s=sn)
值函数则是向量于权重的乘积
V
^
(
s
,
w
)
=
(
1
(
s
=
s
1
)
⋮
1
(
s
=
s
n
)
)
⋅
(
w
1
⋮
w
n
)
\hat{V}(s,\mathbf{w})=(1(s=s1)\varvdots1(s=sn))\cdot(w1\varvdotswn)
V^(s,w)=
1(s=s1)⋮1(s=sn)
⋅
w1⋮wn
在之前的描述中,我们假定 V π ( s ) V_\pi(s) Vπ(s)类似于监督学习中的label,是被给定的。但在RL是无监督学习,只有奖励。因此可以做如下替换:
蒙特卡洛预测至少能收敛到一个局部最优解
• 在价值函数为线性的情况下可以收敛到全局最优

对动作-状态值函数进行近似
Q
^
(
s
,
a
,
w
)
≈
Q
π
(
s
,
a
)
\hat{Q}(s,a,\mathbf{w})\approx Q_\pi(s,a)
Q^(s,a,w)≈Qπ(s,a)
最小均方误差
J
(
w
)
=
E
π
[
(
Q
π
(
s
,
a
)
−
Q
^
(
s
,
a
,
w
)
)
2
]
J(\mathbf{w})=\mathbb{E}_\pi\left[(Q_\pi(s,a)-\hat{Q}(s,a,\mathbf{w}))^2\right]
J(w)=Eπ[(Qπ(s,a)−Q^(s,a,w))2]
在单个样本上进行随机梯度下降
−
1
2
∇
w
J
(
w
)
=
(
Q
π
(
s
,
a
)
−
Q
^
(
s
,
a
,
w
)
)
∇
w
Q
^
(
s
,
a
,
w
)
Δ
w
=
α
(
Q
π
(
s
,
a
)
−
Q
^
(
s
,
a
,
w
)
)
∇
w
Q
^
(
s
,
a
,
w
)
−12∇wJ(w)=(Qπ(s,a)−ˆQ(s,a,w))∇wˆQ(s,a,w)Δw=α(Qπ(s,a)−ˆQ(s,a,w))∇wˆQ(s,a,w)
−21∇wJ(w)Δw=(Qπ(s,a)−Q^(s,a,w))∇wQ^(s,a,w)=α(Qπ(s,a)−Q^(s,a,w))∇wQ^(s,a,w)
用特征向量表示状态-动作对
x
(
s
,
a
)
=
[
x
1
(
s
,
a
)
⋮
x
k
(
s
,
a
)
]
x(s,a)=[x1(s,a)\varvdotsxk(s,a)]
x(s,a)=
x1(s,a)⋮xk(s,a)
线性情况下,参数化后𝑄函数
Q
^
(
s
,
a
,
w
)
=
x
(
s
,
a
)
⊤
w
=
∑
j
=
1
n
x
j
(
s
,
a
)
w
j
\hat{Q}(s,a,\mathbf{w})=\mathbf{x}(s,a)^\top\mathbf{w}=\sum_{j=1}^n\mathbf{x}_j(s,a)\mathbf{w}_j
Q^(s,a,w)=x(s,a)⊤w=j=1∑nxj(s,a)wj
利用随机梯度下降更新
∇
w
Q
^
(
s
,
a
,
w
)
=
x
(
s
,
a
)
Δ
w
=
α
(
Q
π
(
s
,
a
)
−
Q
^
(
s
,
a
,
w
)
)
x
(
s
,
a
)
∇wˆQ(s,a,w)=x(s,a)Δw=α(Qπ(s,a)−ˆQ(s,a,w))x(s,a)
∇wQ^(s,a,w)Δw=x(s,a)=α(Qπ(s,a)−Q^(s,a,w))x(s,a)
类似于Prediction的方法做如下替换:
虽然 w \mathbf{w} w在时序差分学习的目标中出现,但是我们并不需要计算目标函数的梯度。因为目标值不是可学习的,就是单纯固定的一个值。如果同时学习,会造成训练不稳定。

使用深度神经网络表示Q函数。输入s,输出n+1个a(多一个no input),选出最大的a作为实际输出。

DQN 使用经验回放(experience replay)和 固定的目标Q值
L i ( θ i ) = E ( s , a , r , s ′ ) ∼ U ( D ) [ ( r + γ max a ′ Q ( s ′ , a ′ ; θ i − ) ⏟ 目标Q值 − Q ( s , a ; θ i ) ⏟ 预测Q值 ) 2 ] Li(θi)=E(s,a,r,s′)∼U(D)[(r+γmax Li(θi)=E(s,a,r,s′)∼U(D) 目标Q值 r+γa′maxQ(s′,a′;θi−)−预测Q值 Q(s,a;θi) 2
• 𝜃𝑖是第𝑖轮迭代中将要更新的网络参数
• 通过标准的反向传播算法进行更新
• 𝜃𝑖−是目标网络参数
• 仅在𝜃𝑖每更新𝐶步后进行更新
• (𝑠, 𝑎, 𝑟, 𝑠′) ~𝑈 (𝐷) :样本从经验池𝐷中均匀抽样
• 这样做可以避免在近期经验上过拟合
[1] 伯禹AI
[2] https://www.deepmind.com/learning-resources/introduction-to-reinforcement-learning-with-david-silver
[3] 动手学强化学习
[4] Reinforcement Learning