2 表格型方法
介绍容易理解的基于表格型方法的求解方式,这个过程中引入的概念对于理解其他方法能起到很大的帮助。
2.1 model-based与model-free
如果在一个问题中,四元组是已知的,也就是说,不仅知道所有可能采取的动作 A A A和所有可能的状态 S S S,还知道在每个状态下采取某一动作的后果(状态转变 P P P和奖励 R R R),那么这个模型就可以完整地建立出来,用于解决这种情况的方法就叫做model-based的方法。
但事实上大多数时候环境的转移概率函数和奖励函数都是未知的,这时采取的方法就叫做model-free的方法,强化学习主要研究的就是这种情况。
2.2 Q Q Q表格
一个最直观的想法就是试图找到每一对状态动作 ( s , a ) (s,a) (s,a)的动作价值函数 Q ( s , a ) Q(s,a) Q(s,a),从而构成了一张表格,一个维度就是状态空间 S S S,另一个维度就是动作空间 A A A。如果能够找到这个表格,那么每次行为前只要根据当前的状态,查询价值最大的行为来执行就好了,这样也就有了策略。
需要注意的是, Q Q Q表格是依赖于策略的,而策略又是查询 Q Q Q表格,这样就形成了一个迭代的形式:先初始化一张 Q Q Q表格,根据它采取行为,得到奖励以后再回来更新 Q Q Q表格的数据。
在详细介绍这个过程之前,先看另一个概念。
2.3 探索与利用 exploration and exploitation
这里介绍一个模型来帮助理解:“K-摇臂赌博机”,一台赌博机有多个摇杆,每个摇杆都对应着不同的奖励分布,目标是在有限次尝试中获得最大的累积奖励。
一方面,我们希望了解每个摇臂对应的奖励分布,另一方面,我们也希望能够获得尽可能多的奖励。
为了了解摇臂的奖励分布,我们应该尽可能地尝试不同的摇杆,由于摇杆的奖励是个分布,尝试得越多,估计得才能越准确。这样的行为就叫做探索。
而为了获得最多的奖励,我们应该尽可能多地使用那个已知奖励最大的摇杆,即使可能还有没有发现的奖励更大的摇杆。这样的行为就叫做利用。
由于尝试的总次数是一定的,因此探索和利用之间有着竞争的关系,探索过多就会失去利用最优的机会,而利用过多可能根本选不到最优的摇杆。
为了要将二者平衡起来,可以采用 ϵ \epsilon ϵ-贪心法。
每一次采取行为时,以 ϵ \epsilon ϵ的概率进行探索,具体来说就是随机选择行为,从而尝试不同的可能; 1 − ϵ 1-\epsilon 1−ϵ的概率进行利用,也就是采纳目前已知的当前状态下奖励最大的行为。
通过调整 ϵ \epsilon ϵ的值可以调节策略的倾向性,当奖励的分布较广时,可以相应地采用较大的 ϵ \epsilon ϵ。
2.4 时序差分学习 Temporal Difference
现在我们可以开始考虑如何更新 Q Q Q表格了。
交代一下背景,假设在时刻 t t t,Agent处于状态 s 0 s_0 s0,此时的表格记为 Q t Q_t Qt,这时采取行为 a 0 a_0 a0,从环境中得到了奖励 R t + 1 R_{t+1} Rt+1,状态变为 s 1 s_1 s1。按照策略,下一时刻将会采用行为 a 1 a_1 a1。
这个时候,我们希望根据已有的数据来把我们的 Q Q Q表格从 Q t Q_t Qt更新到 Q t + 1 Q_{t+1} Qt+1。
为了方便,我们把之前的动作价值函数的递推式拿过来:
Q
π
(
s
,
a
)
=
E
π
(
R
t
+
1
+
γ
Q
π
(
S
t
+
1
,
A
t
+
1
)
∣
S
t
=
s
,
A
t
=
a
)
Q_\pi(s,a)=E_\pi(R_{t+1} + \gamma Q_\pi(S_{t+1},A_{t+1})| S_t=s, A_t =a)
Qπ(s,a)=Eπ(Rt+1+γQπ(St+1,At+1)∣St=s,At=a)
下面考虑两种情况:
第一种情况,我们对之前表格中的
Q
t
(
s
t
,
a
t
)
Q_t(s_t,a_t)
Qt(st,at)数据完全不信任,想要在新的
Q
t
+
1
Q_{t+1}
Qt+1中把它覆盖掉,即
Q
t
+
1
(
s
0
,
a
0
)
=
R
t
+
1
+
γ
Q
t
(
s
1
,
a
1
)
=
Q
t
(
s
0
,
a
0
)
+
R
t
+
1
+
γ
Q
t
(
s
1
,
a
1
)
−
Q
t
(
s
0
,
a
0
)
(1)
\begin{aligned} Q_{t+1}(s_0,a_0)&= R_{t+1}+\gamma Q_{t}(s_1,a_1)\\ &=Q_t(s_0,a_0)+ R_{t+1}+\gamma Q_{t}(s_1,a_1)-Q_t(s_0,a_0)\tag{1} \end{aligned}
Qt+1(s0,a0)=Rt+1+γQt(s1,a1)=Qt(s0,a0)+Rt+1+γQt(s1,a1)−Qt(s0,a0)(1)
这样,新表格中
Q
t
+
1
(
s
0
,
a
0
)
Q_{t+1}(s_0,a_0)
Qt+1(s0,a0)就和
Q
t
(
s
0
,
a
0
)
Q_t(s_0,a_0)
Qt(s0,a0)完全没有关系了(当然我们还是会使用
Q
t
(
s
1
,
a
1
)
Q_{t}(s_1,a_1)
Qt(s1,a1),因此
Q
Q
Q表格是逐项更新的)。
第二种情况,我们信任每一次的取样(假设已经有 n n n次),希望最终表格中存储的是取样的平均值,也就是说
Q t ( s 0 , a 0 ) = 1 n ∑ i = 1 t Q t i ( s 0 , a 0 ) Q_t(s_0,a_0)=\frac{1}{n}\sum_{i=1}^tQ_t^i(s_0,a_0) Qt(s0,a0)=n1∑i=1tQti(s0,a0)(用上标 i i i表示第 i i i次取到 ( s 0 , a 0 ) (s_0,a_0) (s0,a0))
那么我们希望
t
t
t时刻操作以后,依然保持对每次取样平均看待,由此得出
Q
t
+
1
(
s
0
,
a
0
)
=
n
×
Q
t
(
s
0
,
a
0
)
+
R
t
+
1
+
γ
Q
t
(
s
1
,
a
1
)
n
+
1
=
(
n
+
1
)
×
Q
t
(
s
0
,
a
0
)
+
R
t
+
1
+
γ
Q
t
(
s
1
,
a
1
)
−
Q
t
(
s
0
,
a
0
)
n
+
1
=
Q
t
(
s
0
,
a
0
)
+
1
n
+
1
(
R
t
+
1
+
γ
Q
t
(
s
1
,
a
1
)
−
Q
t
(
s
0
,
a
0
)
)
(2)
\begin{aligned} Q_{t+1}(s_0,a_0)&=\frac{n\times Q_t(s_0,a_0)+R_{t+1}+\gamma Q_t(s_1,a_1)}{n+1}\\ &=\frac{(n+1)\times Q_t(s_0,a_0)+R_{t+1}+\gamma Q_t(s_1,a_1)-Q_t(s_0,a_0)}{n+1}\\ &=Q_t(s_0,a_0)+\frac{1}{n+1}(R_{t+1}+\gamma Q_t(s_1,a_1)-Q_t(s_0,a_0)) \tag{2} \end{aligned}
Qt+1(s0,a0)=n+1n×Qt(s0,a0)+Rt+1+γQt(s1,a1)=n+1(n+1)×Qt(s0,a0)+Rt+1+γQt(s1,a1)−Qt(s0,a0)=Qt(s0,a0)+n+11(Rt+1+γQt(s1,a1)−Qt(s0,a0))(2)
对比
(
1
)
(1)
(1)和
(
2
)
(2)
(2),我们可以归纳出一个通用公式:
Q
t
+
1
(
s
0
,
a
0
)
=
Q
t
(
s
0
,
a
0
)
+
α
[
R
t
+
1
+
γ
Q
t
(
s
1
,
a
1
)
⏟
t
a
r
g
e
t
Q
−
Q
t
(
s
0
,
a
0
)
⏟
c
u
r
r
e
n
t
Q
]
⏟
s
o
f
t
u
p
d
a
t
e
Q_{t+1}(s_0,a_0)=Q_t(s_0,a_0)+\alpha \underbrace{[\underbrace{R_{t+1}+\gamma Q_t(s_1,a_1)}_{target \space Q}-\underbrace{Q_t(s_0,a_0)}_{current\space Q}]}_{soft \space update}
Qt+1(s0,a0)=Qt(s0,a0)+αsoft update
[target Q
Rt+1+γQt(s1,a1)−current Q
Qt(s0,a0)]
其中
R
t
+
1
+
γ
Q
t
(
s
1
,
a
1
)
R_{t+1}+\gamma Q_t(s_1,a_1)
Rt+1+γQt(s1,a1)又被称为目标值,也就是在这一步的行为中我们得到的,新的
(
s
0
,
a
0
)
(s_0,a_0)
(s0,a0)对应的动作价值函数,其中
R
t
+
1
R_{t+1}
Rt+1是试验得到的奖励,
Q
t
(
s
1
,
a
1
)
Q_t(s_1,a_1)
Qt(s1,a1)是通过查阅旧表得到的。
用目标值减去当前的值,再将差值乘以一个系数 α , α ∈ [ 0 , 1 ] \alpha, \alpha \in [0,1] α,α∈[0,1],就能用来对当前的 Q Q Q表格进行一次软更新。当 α = 0 \alpha=0 α=0时就是完全不更新,当 α = 1 \alpha=1 α=1时就是完全放弃之前的 Q Q Q值(情况一),此处可以把 α \alpha α理解为学习率。
还可以这么理解,当前值是我们已有的对现实的理解,目标值是我们在实践中得到的真实的认知,学习的目的就是在一次次更新中让当前值去逼近目标值。(为什么不直接用目标值覆盖当前值,即取 α = 1 \alpha = 1 α=1?因为环境的反馈不一定是确定的,而是一个分布,单次试验的目标值并不具有代表性)。
这样的更新方式就是时序差分更新。
2.5 on-policy与off-policy
我们再回顾一下刚才的例子:
在时刻 t t t,Agent处于状态 s 0 s_0 s0,此时的表格记为 Q t Q_t Qt,这时采取行为 a 0 a_0 a0,从环境中得到了奖励 R t + 1 R_{t+1} Rt+1,状态变为 s 1 s_1 s1。按照策略,下一时刻将会采用行为 a 1 a_1 a1。
注意其中的“按照策略”,这里的策略指的是哪个策略呢?
前面说过,我们在试验的时候往往会将探索和利用结合起来,也就是说以 ϵ \epsilon ϵ的概率进行随机尝试, 1 − ϵ 1-\epsilon 1−ϵ的概率选取目前已知最优的行为,我们把这个策略记为 π \pi π。
我们也可以有纯利用的策略,也就是说永远选取已知最优的行为,把这个策略记为 μ \mu μ。
在与环境交互的时候,我们采用的是策略 π \pi π,但是,在决定更新 Q Q Q表格采用哪个 a 1 a_1 a1时,我们既可以采用策略 π \pi π,也可以采用策略 μ \mu μ。
如果交互的策略和更新学习的策略是一致的,这种方法就被称为on-policy的方法。在on-policy的方法中, Q Q Q表格的更新真实地反映了Agent的行为。
而如果交互的策略和更新学习的策略不一样,这种方法就被称为off-policy的方法。在于环境交互的时候依然采用策略 π \pi π(又被称为行为策略),但在更新的时候采取策略 μ \mu μ(这个策略也叫目标策略),即默认Agent下一步会选取最优的动作来执行,使用 a 1 = a r g m a x a Q ( s 1 , a ) a_1=\underset{a}{argmax}Q(s_1,a) a1=aargmaxQ(s1,a)来更新 Q Q Q表。当然,实际上到了下一时刻,由于探索机制的存在,Agent可能并不会采用 a 1 a_1 a1。
on-policy的方法由于要求 Q Q Q表兼顾探索和利用,因此可能会导致 Q Q Q表格的不稳定,最终训练出来的 Q Q Q表格对应的策略也会显得更加保守:在不稳定情况下最终收敛,会把探索带来的随机性考虑进来。
off-policy的方法中,行为策略 π \pi π用于与环境交互产生经验,而目标策略 μ \mu μ用于更新学习最优的策略,这样学出来的 Q Q Q表格对应的策略更具有冒险精神:不考虑随机探索可能带来的风险,只采取最优化的路线。
on-policy具有代表性的算法有SARSA,off-policy具有代表性的有Q-learning。理解了上面的内容,接下来理解这两种算法就十分容易了。
2.6 Sarsa
直接看算法流程:
1 初始化状态为 s 0 s_0 s0,初始化 Q Q Q表格
2 根据 Q Q Q表格,使用 ϵ − g r e e d y \epsilon - greedy ϵ−greedy法选择动作 a 0 a_0 a0
3 采取动作 a 0 a_0 a0,转到状态 s 1 s_1 s1,获得奖励 R 1 R_1 R1
4 根据 Q Q Q表格,使用 ϵ − g r e e d y \epsilon - greedy ϵ−greedy法选择动作 a 1 a_1 a1
5 使用 s 0 s_0 s0、 a 0 a_0 a0、 R 1 R_1 R1、 s 1 s_1 s1、 a 1 a_1 a1更新 Q Q Q表格,更新公式为
Q ( s 0 , a 0 ) = Q ( s 0 , a 0 ) + α [ R 1 + γ Q ( s 1 , a 1 ) − Q ( s 0 , a 0 ) ] Q(s_0,a_0) = Q(s_0,a_0) + \alpha [R_1 + \gamma Q(s_1,a_1) - Q(s_0,a_0)] Q(s0,a0)=Q(s0,a0)+α[R1+γQ(s1,a1)−Q(s0,a0)]
6 采取动作 a 1 a_1 a1,转到状态 s 2 s_2 s2,获得奖励 R 2 R_2 R2(这里和第3步一致了,开始循环)
…
第5步更新时所需要的五个参数正是sarsa名称的由来。
2.7 Q-learning
同样直接看流程吧
1 初始化状态为 s 0 s_0 s0,初始化 Q Q Q表格
2 根据 Q Q Q表格,使用 ϵ − g r e e d y \epsilon - greedy ϵ−greedy法选择动作 a 0 a_0 a0
3 采取动作 a 0 a_0 a0,转到状态 s 1 s_1 s1,获得奖励 R 1 R_1 R1
4 使用 s 0 s_0 s0、 a 0 a_0 a0、 R 1 R_1 R1、 s 1 s_1 s1、 a ′ a' a′更新 Q Q Q表格,其中 a ′ = a r g m a x a Q ( s 1 , a ) a'=\underset{a}{argmax}Q(s_1,a) a′=aargmaxQ(s1,a)
更新公式为
Q ( s 0 , a 0 ) = Q ( s 0 , a 0 ) + α [ R 1 + γ Q ( s 1 , a ′ ) − Q ( s 0 , a 0 ) ] Q(s_0,a_0) = Q(s_0,a_0) + \alpha [R_1 + \gamma Q(s_1,a') - Q(s_0,a_0)] Q(s0,a0)=Q(s0,a0)+α[R1+γQ(s1,a′)−Q(s0,a0)]
5 根据 Q Q Q表格,使用 ϵ − g r e e d y \epsilon - greedy ϵ−greedy法选择动作 a 1 a_1 a1,这里和第2步一致了,开始循环)
…
再解释一下前面提过的所谓保守和冒险。
想象一个走迷宫的场景,训练目的是尽可能快的到达终点,因此每走一步都会有一个负分的奖励,此外还设置了陷阱,掉到陷阱会有极大的负奖励。
假设从起点到终点有两条路,一条路较短,但需要绕过一些陷阱,另一条路没有陷阱,但距离较长。
Sarsa算法由于学习和交互是同一套策略,会将风险考虑进来,也就更倾向于选择较长的那条路;Q-learning将学习和交互分开,学习的是最优的策略,交互时却有一定的随机性,因此Q-learning更倾向于选择较短的那条路(即使它可能会经常不小心掉进陷阱)。