这里是深度强化学习的个人笔记,目前资料来源:蘑菇书 、Reinforce Learning:An Introduction、动手学强化学习。
5. 时序差分学习
时序差分(Temporal Difference,TD)算法是强化学习中最核心、最新颖的算法,其集合了动态规划和蒙特卡洛方法的优点,既与环境交互获取经验,又利用自举的思想进行更新,无需等待交互的最终结果。在强化学习中,DP、MC、TD三种方法的有机结合、相互交融常常是热门话题。这三种方法都遵循GPI的思想和范式,也就是首先进行策略评估(预测),再根据评估结果进行控制(策略改进),区别在于它们分别用不同方式解决这两个步骤。
5.1 时序差分预测
5.1.1 时序差分预测的思想
对于MC算法来说,其使用采样的回报来增量式更新价值估计,一个简单的每次访问型MC算法的增量式可以表示为
V
(
S
t
)
=
V
(
S
t
)
+
α
[
G
t
−
V
(
S
t
)
]
V(S_t)=V(S_t)+\alpha\left[G_t-V(S_t)\right]
V(St)=V(St)+α[Gt−V(St)],其中
α
\alpha
α 为常量更新的步长。但基于经验的MC算法需要将一幕遍历完整才能得到
G
t
G_t
Gt 用来更新估计,而TD可以结合单步的收益
R
t
+
1
R_{t+1}
Rt+1 (或短暂几步收益)和其他状态的估计值来更新,这里介绍单步TD的更新方法,表示为 TD(0):
V
(
S
t
)
←
V
(
S
t
)
+
α
[
R
t
+
1
+
γ
V
(
S
t
+
1
)
−
V
(
S
t
)
]
,
(5.1)
V(S_t)\leftarrow V(S_t)+\alpha\left[R_{t+1}+\gamma V(S_{t+1})-V(S_t)\right],\tag{5.1}
V(St)←V(St)+α[Rt+1+γV(St+1)−V(St)],(5.1)根据式(2.10)可知,
v
π
(
s
)
≐
E
π
[
G
t
∣
S
t
=
s
]
=
E
π
[
R
t
+
1
+
γ
G
t
+
1
∣
S
t
=
s
]
v_{\pi}(s)\doteq \mathbb{E}_{\pi}\left[G_t|S_t=s\right]=\mathbb{E}_{\pi}\left[R_{t+1}+\gamma G_{t+1}|S_t=s\right]
vπ(s)≐Eπ[Gt∣St=s]=Eπ[Rt+1+γGt+1∣St=s],因此 TD(0) 所比较的是
V
(
S
t
)
V(S_t)
V(St) 和
R
t
+
1
+
γ
V
(
S
t
+
1
)
R_{t+1}+\gamma V(S_{t+1})
Rt+1+γV(St+1) 的差异,并将其更新在估计值中,而这个差异被定义为 TD 误差:
δ
t
≐
R
t
+
1
+
γ
V
(
S
t
+
1
)
−
V
(
S
t
)
.
(5.2)
\delta_t\doteq R_{t+1}+\gamma V(S_{t+1})-V(S_t).\tag{5.2}
δt≐Rt+1+γV(St+1)−V(St).(5.2)
相对应的,MC算法比较的是
V
(
S
t
)
V(S_t)
V(St) 和
G
t
G_t
Gt 的差异,当价值函数向量
V
V
V 在一幕内没有发生改变时(也就是类似于MC算法这种),则蒙特卡洛误差可以写作 TD 误差之和:
G
t
−
V
(
S
t
)
=
R
t
+
1
+
γ
G
t
+
1
−
V
(
S
t
)
=
R
t
+
1
+
γ
G
t
+
1
−
V
(
S
t
)
+
γ
V
(
S
t
+
1
)
−
γ
V
(
S
t
+
1
)
=
[
R
t
+
1
+
γ
V
(
S
t
+
1
)
−
V
(
S
t
)
]
+
[
γ
G
t
+
1
−
γ
V
(
S
t
+
1
)
]
=
δ
t
+
γ
[
G
t
+
1
−
V
(
S
t
+
1
)
]
(下一时刻的
M
C
误差)
=
δ
t
+
γ
{
δ
t
+
1
+
γ
[
G
t
+
2
−
V
(
S
t
+
2
)
]
}
=
⋯
=
∑
k
=
t
T
−
1
γ
k
−
t
δ
k
,
(5.3)
\begin{align*}G_t-V(S_t)&=R_{t+1}+\gamma G_{t+1}-V(S_{t})\\ &=R_{t+1}+\gamma G_{t+1}-V(S_{t})+\gamma V(S_{t+1})-\gamma V(S_{t+1})\\ &=\left[ R_{t+1}+\gamma V(S_{t+1})-V(S_{t})\right]+\left[\gamma G_{t+1}-\gamma V(S_{t+1})\right]\\ &=\delta_t+\gamma\left[ G_{t+1}-V(S_{t+1})\right](下一时刻的MC误差)\\ &=\delta_t+\gamma\left\{ \delta_{t+1}+\gamma\left[ G_{t+2}-V(S_{t+2})\right]\right\}\\ &=\cdots\\ &=\sum_{k=t}^{T-1}\gamma^{k-t}\delta_k, \end{align*}\tag{5.3}
Gt−V(St)=Rt+1+γGt+1−V(St)=Rt+1+γGt+1−V(St)+γV(St+1)−γV(St+1)=[Rt+1+γV(St+1)−V(St)]+[γGt+1−γV(St+1)]=δt+γ[Gt+1−V(St+1)](下一时刻的MC误差)=δt+γ{δt+1+γ[Gt+2−V(St+2)]}=⋯=k=t∑T−1γk−tδk,(5.3)当然,若该幕中价值函数
V
V
V 变化了,那这个式子并不能成立,但如果时间步长很小,依然可以近似成立。式(5.3)的泛化在TD理论中非常重要。
5.1.2 时序差分预测的优势
举一个人类学习和评估的例子:你是一个城市中的通勤者,每天上下班的经验告诉你,开车回家大概率要花费30分钟,这是对当前状态的一种价值评估。但当你某天开了25分钟后遭遇了堵车,此时你依据平时的经验预估,还需要堵25分钟,最终花费50分钟才能回到家。这个问题中你并不需要等一幕的结束(开车回到家)才能得到价值的采样值,而是中途可以使用对其他状态(堵车)的评估来更新当前估计值,这就是TD和MC的不同之处。
事实上TD相比DP或MC算法,存在很多优势。首先显而易见,TD 算法使用交互的方法获得样本来进行预测,无需完备的环境知识,相比DP应用范围更广。另外TD算法在每一步都可以进行即时更新,相比于MC算法,TD 是一种在线学习的方法,对于幕很长或持续性任务(难以划分幕)有明显优势。
但TD算法是否能保证收敛,或者说是否能保证预测时TD算法能否得到正确的值?已有研究已经证实,对于任意固定的策略,如果步长参数足够小或根据随机近似条件(1.2.3提到)逐渐减小,TD(0) 都可以保证收敛到真实价值。同时在实践中发现,TD方法在随机任务上通常比常量步长MC方法收敛更快。
5.1.3 时序差分方法的最优性
对于某个分幕式任务,给定足够的数据,TD和MC都可以收敛到正确值。然而在有限经验中,这两个算法的学习能力有很大差别。同样以上文中开车回家的例子,假设你三次从工作单位出发(设为状态
B
B
B)开车回家都没有遭遇堵车,第四次从饭店回到工作单位(
A
−
B
A-B
A−B)花费10分钟,再开车回家时遭遇了堵车(设为状态
C
C
C),则此时估计值
V
(
B
)
=
(
30
+
30
+
30
+
50
)
/
4
=
35
V(B)=(30+30+30+50)/4=35
V(B)=(30+30+30+50)/4=35,
P
(
C
∣
B
)
=
1
4
P(C|B)=\frac{1}{4}
P(C∣B)=41,TD和MC算法都会得到这个结果。而对于
V
(
A
)
V(A)
V(A),TD算法和MC算法会给出不同的答案。对于MC算法,对状态
A
A
A的采样结果只有一条
G
{
A
−
B
−
C
−
E
n
d
}
=
10
+
50
=
60
G\{A-B-C-End\}=10+50=60
G{A−B−C−End}=10+50=60,因此
V
(
A
)
=
60
V(A)=60
V(A)=60,但我们知道从饭店到工作单位,以及从工作单位回到家,这两段路花费时间基本可以认为是独立的,因此根据TD(0)算法,
V
(
A
)
=
10
+
γ
V
(
B
)
=
γ
=
1
45
V(A)=10+\gamma V(B)\overset{\gamma=1}{=}45
V(A)=10+γV(B)=γ=145(该问题中未来的时长无需折扣,因此
γ
=
1
\gamma=1
γ=1),这个事实上是更加合理的估计结果。
为什么会产生上面所讲的差异呢?我们先介绍批量更新的概念。如上述例子,我们首先使用全部(有限的)数据来完成对
V
(
B
)
V(B)
V(B) 的估计(包括第四幕),再使用全部数据以及
V
(
B
)
V(B)
V(B) 的估计值来估计
V
(
A
)
V(A)
V(A),这种以成批使用数据,每一批中不更新估计值的方法叫批量更新。根据上面的介绍可知,MC算法是将每一幕作为一个样本,去最小化每批的均方误差,而 TD 算法是更细粒度的学习,从每批数据中找出完全符合马尔可夫过程模型的最大似然估计参数,正如上面的例子,我们从数据中找到了状态转移的信息
P
(
B
∣
A
)
P(B|A)
P(B∣A),利用这些转移过程中的信息来估计价值函数。如果环境模型是正确的,那么估计也就是正确的(从已有数据中的估计),这种估计被称为确定性等价估计。TD(0) 算法通常可以收敛到确定性等价估计,而这是MC算法在很多时候做不到的“最优答案”。而这也可以解释 TD(0) 算法收敛更快的原因,因为在每收集到一批数据后,TD(0) 算法可以在每一次批量更新时都收敛到确定性等价估计。下图是某个随机游走任务(无需动作的马尔可夫过程模型)中使用 TD 算法和 MC 算法的批量训练曲线。
还有一点值得注意的是,通常计算确定性等价估计时需要先计算状态转移函数,当状态数为
n
=
∣
S
∣
n=|S|
n=∣S∣ 时仅仅维护状态转移矩阵就需要
O
(
n
2
)
O(n^2)
O(n2) 的空间复杂度,再加上价值估计向量,一共需要
O
(
n
3
)
O(n^3)
O(n3) 的空间复杂度,而 TD 算法无需显示地维护状态转移矩阵,只需要使用交互的样本中下一个状态的价值
V
(
s
′
)
V(s')
V(s′) 就可以将状态转移信息利用起来,最终以
O
(
n
)
O(n)
O(n) 的空间复杂度来逼近确定性等价估计,这一优势是惊人的。甚至在状态空间非常巨大的任务中,TD 可能是唯一可行逼近最优解的方法。
5.2 时序差分控制
5.2.1 Sarsa:同轨策略下的时序差分控制
类似于MC控制,TD方法中的控制步骤也需要在探索和开发之间进行权衡,同样的,TD控制也被划分为同轨策略的TD和离轨策略的TD。
对于同轨策略方法,要计算动作价值估计来进行策略改进。同样的,TD 算法的动作价值更新也同时采用自举的思想和与环境互动得到的收益,即:
Q
(
S
t
,
A
t
)
←
Q
(
S
t
,
A
t
)
+
α
[
R
t
+
1
+
γ
Q
(
S
t
+
1
,
A
t
+
1
)
−
Q
(
S
t
,
A
t
)
]
,
(5.4)
Q(S_t,A_t)\leftarrow Q(S_t,A_t)+\alpha\left[R_{t+1}+\gamma Q(S_{t+1},A_{t+1})-Q(S_t,A_t)\right],\tag{5.4}
Q(St,At)←Q(St,At)+α[Rt+1+γQ(St+1,At+1)−Q(St,At)],(5.4)在数学上式(5.4)和式(5.1)是等价的,因此式(5.4)同样保证可以收敛到真实值。当
S
t
+
1
S_{t+1}
St+1 为终止状态时,
Q
(
S
t
+
1
,
A
t
+
1
)
Q(S_{t+1},A_{t+1})
Q(St+1,At+1) 被定义为0。这个更新规则涉及一个五元组
<
S
t
,
A
t
,
R
t
+
1
,
S
t
+
1
,
A
t
+
1
>
<S_t,A_t,R_{t+1},S_{t+1},A_{t+1}>
<St,At,Rt+1,St+1,At+1>,该五元组简写为“Sarsa”,因此该方法也被称为Sarsa。和其他同轨策略控制方法一样,Sarsa也可以使用
ϵ
\epsilon
ϵ - 贪心的方法保证足够的探索。
5.2.2 Q-Learning:离轨策略下的时序差分控制
Q-Learning 与 Sarsa 非常类似,Q-Learning 的动作价值更新公式为:
Q
(
S
t
,
A
t
)
←
Q
(
S
t
,
A
t
)
+
α
[
R
t
+
1
+
γ
max
a
Q
(
S
t
+
1
,
a
)
−
Q
(
S
t
,
A
t
)
]
,
(5.5)
Q(S_t,A_t)\leftarrow Q(S_t,A_t)+\alpha\left[R_{t+1}+\gamma \underset{a}{\max }Q(S_{t+1},a)-Q(S_t,A_t)\right],\tag{5.5}
Q(St,At)←Q(St,At)+α[Rt+1+γamaxQ(St+1,a)−Q(St,At)],(5.5)从公式中易知,Sarsa 五元组中的
A
t
+
1
A_{t+1}
At+1 是从采样数据中得到的,采样数据基于
ϵ
\epsilon
ϵ - 贪心策略等软性策略,因此并不能保证
A
t
+
1
A_{t+1}
At+1 是最优动作,其思想是利用所有
A
t
+
1
A_{t+1}
At+1 的动作价值加权更新当前状态-动作的价值
Q
(
S
t
,
A
t
)
Q(S_t,A_t)
Q(St,At),权值为使用数据中出现频率来估计的
P
(
S
t
+
1
∣
S
t
)
⋅
P
(
A
t
+
1
∣
S
t
+
1
)
P(S_{t+1}|S_t)\cdot P(A_{t+1}|S_{t+1})
P(St+1∣St)⋅P(At+1∣St+1) 的值(通过采样隐式地体现)。而 Q-Learing 则是只使用下一个状态
S
t
+
1
S_{t+1}
St+1 的最优动作价值来更新当前动作价值。
在 Q-Learning 中,通过不断更新动作价值函数使得
R
t
+
1
+
γ
max
a
Q
(
S
t
+
1
,
a
)
R_{t+1}+\gamma \underset{a}{\max }Q(S_{t+1},a)
Rt+1+γamaxQ(St+1,a) 与
Q
(
S
t
,
A
t
)
Q(S_t,A_t)
Q(St,At) 的差不断减小,而
π
∗
(
S
t
+
1
)
=
arg
max
a
Q
(
S
t
+
1
,
a
)
\pi_*(S_{t+1})=\underset{a}{\arg\max}Q(S_{t+1},a)
π∗(St+1)=aargmaxQ(St+1,a),因此被优化的策略事实上是以一种贪心的思想被设定的,这与采样中的行动策略
π
(
A
t
∣
S
t
)
\pi(A_t|S_t)
π(At∣St) 不同(
ϵ
\epsilon
ϵ - 贪心策略等),因此 Q-Learning 被认为是一种离轨策略。
两种方法在实际应用中所体现的差别在,Q-Learning更加勇敢,对于
π
(
A
t
∣
S
t
)
\pi(A_t|S_t)
π(At∣St),其主要考虑的是未来可能的最高收益,也就是
max
a
Q
(
S
t
+
1
,
a
)
\underset{a}{\max} Q(S_{t+1},a)
amaxQ(St+1,a),不考虑其他的
S
t
+
1
=
a
S_{t+1}=a
St+1=a 是否会有很低的价值。而Sarsa会综合考虑所有的
S
t
+
1
S_{t+1}
St+1 来选择
π
(
A
t
∣
S
t
)
\pi(A_t|S_t)
π(At∣St),更加安全稳妥,对于某些策略在未来可能会带来的巨大惩罚,Sarsa会纳入考虑,而Q-Learning则会忽视。在悬崖行走问题中,智能体从起点(Start,S)移动到(Goal,G),途中每个方格内可以选择上下左右四种动作(除非到了边界或悬崖),每一次动作会获得-1的收益,而如果掉入悬崖则会产生-100的收益,因此智能体需要寻找不掉入悬崖的最短路径。下图显示了悬崖行走问题中基于
ϵ
=
0.1
\epsilon=0.1
ϵ=0.1 的
ϵ
\epsilon
ϵ - 贪心策略的 Sarsa 和 Q-Learning 方法学习曲线:
看上去 Q-Learning 表现比 Sarsa 差,但是实际上这是因为Q-Learning学习到了比较勇敢的最佳路线(贴着悬崖走),但因为
ϵ
\epsilon
ϵ - 贪心策略偶尔会选择不愿看到的动作,导致该路径有时会掉入悬崖。而 Sarsa 认识到了这种情况从而选择了更安全的路径,如下图所示:
5.2.3 期望Sarsa
期望 Sarsa 是在 Sarsa 的基础上将下一时刻的采样改为期望,其公式为:
Q
(
S
t
,
A
t
)
←
Q
(
S
t
,
A
t
)
+
α
[
R
t
+
1
+
γ
E
[
Q
(
S
t
+
1
,
A
t
+
1
)
∣
S
t
+
1
]
−
Q
(
S
t
,
A
t
)
]
=
Q
(
S
t
,
A
t
)
+
α
[
R
t
+
1
+
γ
∑
a
π
(
a
∣
S
t
+
1
)
Q
(
S
t
+
1
,
a
)
−
Q
(
S
t
,
A
t
)
]
,
(5.6)
\begin{align*}Q(S_t,A_t)&\leftarrow Q(S_t,A_t)+\alpha\left[R_{t+1}+\gamma \mathbb{E}[Q(S_{t+1},A_{t+1})|S_{t+1}]-Q(S_t,A_t)\right]\\&=Q(S_t,A_t)+\alpha\left[R_{t+1}+\gamma \sum_a \pi(a|S_{t+1}) Q(S_{t+1},a)-Q(S_t,A_t)\right],\end{align*}\tag{5.6}
Q(St,At)←Q(St,At)+α[Rt+1+γE[Q(St+1,At+1)∣St+1]−Q(St,At)]=Q(St,At)+α[Rt+1+γa∑π(a∣St+1)Q(St+1,a)−Q(St,At)],(5.6)在单步更新时,其计算量比 Sarsa 更大,但其考虑的信息是更加全面的,因此期望 Sarsa 算法作为一种同轨策略,其性能在短期和长期都要优于 Sarsa 和 Q-Learning,同时在训练时不易受学习率
α
\alpha
α 的影响(Sarsa受影响较大)。
在更一般的情况下,期望 Sarsa 也可以使用离轨策略思想进行,此时如果目标策略是一个贪心策略,行动策略以某种方式更加注重探索,则期望 Sarsa 就变成了 Q-Learning。
5.2.4 最大化偏差与双学习
最大化偏差:在之前讨论的 Q-Learning 算法中,动作价值通过下一个状态的最大动作价值来更新,这会带来一个问题,就是下一个状态的最大动作价值很可能不是真正的价值。举例来说,在一个任务中智能体从起始状态
S
0
S_0
S0 出发,可以选择动作
A
0
A_0
A0 移动到到
P
P
P 和
B
B
B 两个状态,该步收益为0,若转移到
P
P
P 则以0收益终止,若转移到
B
B
B 则执行下一步动作
A
1
A_{1}
A1,
A
1
A_1
A1 有很多种可能(10种或更多),而无论选择哪种动作都会获得一个随机收益
R
2
∼
N
(
−
0.1
,
1
)
R_2\sim N(-0.1,1)
R2∼N(−0.1,1) 并终止。此时对
Q
(
S
0
,
A
0
)
Q(S_0,A_0)
Q(S0,A0) 的更新时,若
S
1
=
P
S_{1}=P
S1=P 则
max
Q
(
S
1
,
A
1
)
=
0
\max Q(S_1,A_1)=0
maxQ(S1,A1)=0,而若
S
1
=
B
S_{1}=B
S1=B 则很可能
max
Q
(
S
1
,
A
1
)
>
0
\max Q(S_1,A_1)>0
maxQ(S1,A1)>0(因为
A
1
A_1
A1 有很多种可能,对这些可能进行采样很容易采样到高于均值的收益),从而得到
Q
(
S
0
,
A
t
o
P
)
<
Q
(
S
0
,
A
t
o
B
)
Q(S_0,A_{to\ P})<Q(S_0,A_{to\ B})
Q(S0,Ato P)<Q(S0,Ato B),则将
A
t
o
B
A_{to\ B}
Ato B 作为最优动作,但实际上我们很容易知道
E
[
Q
(
S
1
,
A
t
o
B
)
=
−
0.1
]
\mathbb{E}[Q(S_1,A_{to\ B})=-0.1]
E[Q(S1,Ato B)=−0.1],这种由于最大动作价值导致的价值估计偏差被称为最大化偏差。
在上面的例子中,最大化偏差会导致 Q-Learning 在早期执着于选择
A
t
o
B
A_{to\ B}
Ato B ,在后期才逐渐降低选择
A
t
o
B
A_{to\ B}
Ato B 的概率,但仍然无法收敛到较低的值。为了解决最大化偏差的影响,一种可行的方法是使用上文中提到的期望 Sarsa 方法,其对下一个状态的动作价值估计是采用期望的方法,这种估计是无偏的。还有另外一种方法是双学习(Double-Learning),双学习的思想是认为最大化偏差的来源是估计价值使用的样本和选择最优动作的样本完全相同,这样会导致价值估计中产生的偏差影响最优动作选择,而双学习将训练样本分为两个集合,用一个来决定最优动作,另一个来估计价值,从而将这两个步骤解耦,消除最大化偏差的影响,这两个集合的任务可以在一次训练中多次交换。
举例来说,双Q学习是双学习思想应用于Q学习的算法,为Q学习设置两组动作价值函数
Q
1
(
s
,
a
)
Q_1(s,a)
Q1(s,a) 和
Q
2
(
s
,
a
)
Q_2(s,a)
Q2(s,a),在价值更新时随机使用下面两个公式:
Q
1
(
S
t
,
A
t
)
←
Q
1
(
S
t
,
A
t
)
+
α
[
R
t
+
1
+
γ
Q
2
(
S
t
+
1
,
arg max
a
Q
1
(
S
t
+
1
,
a
)
)
−
Q
1
(
S
t
,
A
t
)
]
,
(5.7)
\begin{align*}Q_1(S_t,A_t)&\leftarrow Q_1(S_t,A_t)+\\&\alpha\left[R_{t+1}+\gamma Q_2(S_{t+1},\underset{a}{\argmax}Q_1(S_{t+1},a))-Q_1(S_t,A_t)\right]\end{align*},\tag{5.7}
Q1(St,At)←Q1(St,At)+α[Rt+1+γQ2(St+1,aargmaxQ1(St+1,a))−Q1(St,At)],(5.7)
Q
2
(
S
t
,
A
t
)
←
Q
2
(
S
t
,
A
t
)
+
α
[
R
t
+
1
+
γ
Q
1
(
S
t
+
1
,
arg max
a
Q
2
(
S
t
+
1
,
a
)
)
−
Q
2
(
S
t
,
A
t
)
]
,
(5.8)
\begin{align*}Q_2(S_t,A_t)&\leftarrow Q_2(S_t,A_t)+\\&\alpha\left[R_{t+1}+\gamma Q_1(S_{t+1},\underset{a}{\argmax}Q_2(S_{t+1},a))-Q_2(S_t,A_t)\right]\end{align*},\tag{5.8}
Q2(St,At)←Q2(St,At)+α[Rt+1+γQ1(St+1,aargmaxQ2(St+1,a))−Q2(St,At)],(5.8)也就是对采样中的每一步,随机用
Q
2
(
s
,
a
)
Q_2(s,a)
Q2(s,a) 更新
Q
1
(
s
,
a
)
Q_1(s,a)
Q1(s,a) 或用
Q
1
(
s
,
a
)
Q_1(s,a)
Q1(s,a) 更新
Q
2
(
s
,
a
)
Q_2(s,a)
Q2(s,a) 。
在上面的例子中,最大化偏差会导致 Q-Learning 在早期执着于选择
A
t
o
B
A_{to\ B}
Ato B ,在后期才逐渐降低选择
A
t
o
B
A_{to\ B}
Ato B 的概率,这是因为少数样本很容易因为采样的随机性产生最大化偏差,从而影响价值估计,而当样本数越来越多,偏差会逐渐减小,但无法完全减到0,因为在这个任务中
Q
(
S
0
,
A
t
o
B
)
Q(S_0,A_{to\ B})
Q(S0,Ato B) 始终是有偏估计。而双 Q-Learning 的两个样本集几乎不会产生同样的偏差(例如一个正偏差一个负偏差,或者一个大偏差一个小偏差),而交替使用两个集合的动作价值互相更新可以极大程度减小这种偏差,使得在短期训练中就可以得到相对好很多的策略,而在长期训练时也可以保证
E
[
Q
1
(
s
,
arg max
a
Q
2
(
s
,
a
)
)
]
=
q
(
a
∗
)
=
E
[
Q
2
1
(
s
,
arg max
a
Q
1
(
s
,
a
)
)
]
=
q
(
a
∗
)
\mathbb{E}[Q_1(s,\underset{a}{\argmax}Q_2(s,a))]=q(a_*)=\mathbb{E}[Q_21(s,\underset{a}{\argmax}Q_1(s,a))]=q(a_*)
E[Q1(s,aargmaxQ2(s,a))]=q(a∗)=E[Q21(s,aargmaxQ1(s,a))]=q(a∗),因此双Q学习的价值估计是无偏估计。下图是上述例子中的两种算法性能比较:
5.2.5 后位状态
在一些任务中,我们使用传统的动作价值函数来寻找最优策略的方法可能并不是最好的路径。例如在一些游戏和棋局中,我们所在意的是我们进行了一个动作之后,游戏会进入到一个什么样的局面,这样的局面或状态被称为后位状态(after state)。此时的动作选择为选择使后位状态价值最大的动作,虽然此时使用传统动作价值函数方法也会得到
Q
(
s
1
,
a
1
)
=
Q
(
s
2
,
a
2
)
∣
i
f
p
(
s
1
′
∣
s
1
,
a
1
)
=
p
(
s
2
′
∣
s
2
,
a
2
)
Q(s_1,a_1)=Q(s_2,a_2)\ |\ if\ p(s_1'|s_1,a_1)=p(s_2'|s_2,a_2)
Q(s1,a1)=Q(s2,a2) ∣ if p(s1′∣s1,a1)=p(s2′∣s2,a2),但这是通过学习逐渐收敛的结果,而基于后位价值的学习过程一开始就明白上式成立,这种先验知识在非常重视后位状态价值的任务中可以提高算法性能和收敛速度。
后位状态的方法依然符合GPI的框架,同时在很多情况下也需要面临探索-开发,同轨策略和离轨策略的权衡。
6. n步自举法
面对没有完备模型信息的问题,蒙特卡洛方法和单步时序差分都不是最好的方法。n步自举法又叫n步时序差分,是蒙特卡洛和时序差分方法的融合。作为一种框架,n步时序差分可以平滑地切换为蒙特卡洛和时序差分两种方法,其中间方法的性能往往优于这两种方法。
从另一个角度来看,n步自举法实现了采样和更新的灵活性。蒙特卡洛方法必须等到一幕的结束才能进行更新,时序差分方法急于对每一步交互就进行更新。而对于很多场景和任务,往往需要综合一个时间段内的信息才能达到高效的价值更新,n步自举法提供了这样的方案。
6.1 n步时序差分预测
单步回报:在上一章中的单步时序差分方法中,每一次状态价值的更新都是最小化当前状态和后续回报的差距,而这个后续回报由单步采样收益与当前时刻下一个状态的价值来近似,称为单步回报:
G
t
:
t
+
1
≐
R
t
+
1
+
γ
V
t
(
S
t
+
1
)
.
(6.1)
G_{t:t+1}\doteq R_{t+1}+\gamma V_t(S_{t+1}).\tag{6.1}
Gt:t+1≐Rt+1+γVt(St+1).(6.1)
在n步时序差分中,后续回报可以从n步的采样收益中获取信息,n步回报的公式为:
G
t
:
t
+
n
≐
R
t
+
1
+
γ
R
t
+
2
+
⋯
γ
n
−
1
R
t
+
n
+
γ
n
V
t
+
n
−
1
(
S
t
+
1
)
,
(6.2)
G_{t:t+n}\doteq R_{t+1}+\gamma R_{t+2}+\cdots \gamma^{n-1}R_{t+n}+\gamma^n V_{t+n-1}(S_{t+1}),\tag{6.2}
Gt:t+n≐Rt+1+γRt+2+⋯γn−1Rt+n+γnVt+n−1(St+1),(6.2)当n步后已经超出了终止状态,即
t
+
n
>
T
t+n > T
t+n>T 时,n步回报等价于全部回报
G
t
:
t
+
n
=
G
t
G_{t:t+n}=G_t
Gt:t+n=Gt。公式(6.2)中,
R
t
+
n
R_{t+n}
Rt+n 和
V
t
+
n
−
1
(
S
t
+
1
)
V_{t+n-1}(S_{t+1})
Vt+n−1(St+1) 都需要来到时刻
t
+
n
t+n
t+n 才能计算,因此n步自举法的状态更新也需要到
t
+
n
t+n
t+n 时才能进行:
V
t
+
n
(
S
t
)
≐
V
t
+
n
−
1
(
S
t
)
+
α
[
G
t
:
t
+
n
−
V
t
+
n
−
1
(
S
t
)
]
,
(6.3)
V_{t+n}(S_{t})\doteq V_{t+n-1}(S_{t})+\alpha \left[G_{t:t+n}-V_{t+n-1}(S_{t})\right],\tag{6.3}
Vt+n(St)≐Vt+n−1(St)+α[Gt:t+n−Vt+n−1(St)],(6.3)该更新方法使得在n-1次交互之前该时刻价值都无法得到更新,因此在
t
>
T
−
n
t>T-n
t>T−n 时,使用
G
t
:
t
+
n
=
∑
i
=
t
+
1
T
γ
i
−
t
−
1
R
i
G_{t:t+n}=\sum_{i=t+1}^T\gamma^{i-t-1}R_i
Gt:t+n=∑i=t+1Tγi−t−1Ri 来更新状态价值。
6.2 n步同轨控制
TD(0) 的同轨策略控制方法为 Sarsa,将其拓展为n步TD即为n步Sarsa(或Sarsa(n)),也就是将n步TD的状态价值更新改为动作价值更新,公式为: G t : t + n ≐ R t + 1 + γ R t + 2 + ⋯ γ n − 1 R t + n + γ n Q t + n − 1 ( S t + 1 , A t + 1 ) , (6.4) G_{t:t+n}\doteq R_{t+1}+\gamma R_{t+2}+\cdots \gamma^{n-1}R_{t+n}+\gamma^n Q_{t+n-1}(S_{t+1},A_{t+1}),\tag{6.4} Gt:t+n≐Rt+1+γRt+2+⋯γn−1Rt+n+γnQt+n−1(St+1,At+1),(6.4) Q t + n ( S t , A t ) ≐ Q t + n − 1 ( S t , A t ) + α [ G t : t + n − Q t + n − 1 ( S t , A t ) ] . (6.5) Q_{t+n}(S_{t},A_{t})\doteq Q_{t+n-1}(S_{t},A_{t})+\alpha \left[G_{t:t+n}-Q_{t+n-1}(S_{t},A_{t})\right].\tag{6.5} Qt+n(St,At)≐Qt+n−1(St,At)+α[Gt:t+n−Qt+n−1(St,At)].(6.5)
6.3 n步离轨控制
n步时序差分的离轨控制同蒙特卡洛方法中的思想,使用两种策略计算重要度采样比,使之为权重来计算每一次回报的更新,公式为:
ρ
t
:
h
=
∏
k
=
t
min
(
h
,
T
−
1
)
π
(
A
k
∣
S
k
)
b
(
A
k
∣
S
k
)
,
h
>
t
,
(6.6)
\rho_{t:h}=\prod_{k=t}^{\min (h,T-1)}\frac{\pi(A_k|S_k)}{b(A_k|S_k)},h>t,\tag{6.6}
ρt:h=k=t∏min(h,T−1)b(Ak∣Sk)π(Ak∣Sk),h>t,(6.6)
Q
t
+
n
(
S
t
,
A
t
)
≐
Q
t
+
n
−
1
(
S
t
,
A
t
)
+
α
ρ
t
+
1
:
t
+
n
[
G
t
:
t
+
n
−
Q
t
+
n
−
1
(
S
t
,
A
t
)
]
.
(6.7)
Q_{t+n}(S_{t},A_{t})\doteq Q_{t+n-1}(S_{t},A_{t})+\alpha \rho_{t+1:t+n} \left[G_{t:t+n}-Q_{t+n-1}(S_{t},A_{t})\right].\tag{6.7}
Qt+n(St,At)≐Qt+n−1(St,At)+αρt+1:t+n[Gt:t+n−Qt+n−1(St,At)].(6.7)
基于重要度采样的离轨控制方法有两个共同的缺点,一是其行动策略和目标策略的差异造成了采样效率的低下,二是采样到的数据会因为重要度采样比而产生很大方差,因此必须要设置较小的步长以保证收敛,这两个缺点都导致了离轨策略方法学习得非常缓慢。因此需要有一种无需重要度采样的方案,此处介绍一个常用方法:n步树回溯法。
如下图所示,n步树回溯法会综合每一步所有动作的信息来更新当前时刻的动作价值,对于采样中选择到的动作,使用采样信息
R
t
+
i
R_{t+i}
Rt+i,对于未选择的动作,使用这些动作的动作价值信息。
对单步树回溯来说,其回报计算方法与单步期望Sarsa相同:
G
t
:
t
+
1
≐
R
t
+
1
+
γ
∑
a
π
(
a
∣
S
t
+
1
)
Q
t
(
S
t
+
1
,
a
)
,
(6.8)
G_{t:t+1}\doteq R_{t+1}+\gamma\sum_a\pi(a|S_{t+1})Q_t(S_{t+1},a),\tag{6.8}
Gt:t+1≐Rt+1+γa∑π(a∣St+1)Qt(St+1,a),(6.8)而n步回溯树的期望可以用递归算得:
G
t
:
t
+
n
≐
R
t
+
1
+
γ
∑
a
≠
A
t
+
1
π
(
a
∣
S
t
+
1
)
Q
t
+
n
−
1
(
S
t
+
1
,
a
)
+
γ
π
(
A
t
+
1
∣
S
t
+
1
)
G
t
+
1
:
t
+
n
,
(6.9)
G_{t:t+n} \doteq R_{t+1}+\gamma\sum_{a\neq A_{t+1}}\pi(a|S_{t+1})Q_{t+n-1}(S_{t+1},a)+\gamma\pi(A_{t+1}|S_{t+1})G_{t+1:t+n},\tag{6.9}
Gt:t+n≐Rt+1+γa=At+1∑π(a∣St+1)Qt+n−1(St+1,a)+γπ(At+1∣St+1)Gt+1:t+n,(6.9)
在这n-1步采样中,动作可以基于任意行动策略来选择,甚至是任意选择,而目标策略
π
\pi
π 可以是基于
Q
Q
Q 的贪心策略,这样的回报计算方法可以自动使用
π
\pi
π 所选择的动作价值估计和实际采取的动作的收益来学习,即使目标策略和行动策略差异很大,也可以有效利用信息。
6. Dyna-Q算法
在之前讨论过的算法中,DP是有模型的强化学习方法,MC和TD是免模型的强化学习方法,这里介绍Dyna-Q算法,是一种新的基于模型的强化学习方法,但其模型并不是已知的,而是通过采样数据估计得到。利用对模型的估计,可以对智能体和环境的交互进行模拟,进而降低真实交互和采样的成本。但其环境模型始终是估计,并不能完全替代真实环境,因此其性能可能会不如无模型强化学习方法。
6.1 算法流程
在时序差分方法中有一种经典方法是Q-Learning,而Dyna-Q