本系列文章介绍强化学习基础知识与经典算法原理,大部分内容来自西湖大学赵世钰老师的强化学习的数学原理课程(参考资料1),并参考了部分参考资料2、3的内容进行补充。
系列博文索引:(更新中)
参考资料:
*注:【】内文字为个人想法,不一定准确
*图源:https://zhuanlan.zhihu.com/p/36494307
先前的内容介绍了如何在无模型(model-free)的情况下,基于蒙特卡洛方法(Monte Carlo,MC)来进行策略评估。实际上,无模型的强化学习方法还有另外一个重要分支:时序差分学习(Temporal Difference,TD)。
最基础的时序差分学习估计状态值,而后续提出的Sarsa和Q-learning方法则直接对动作值进行估计。
*注:时序差分的原理部分依赖于随机优化理论,可参阅本文后续的随机近似(SA)&随机梯度下降(SGD)章节。
最原始的TD Learning算法:在策略评估中估计给定策略 π \pi π的状态值 v π v_\pi vπ?,本质上是在无模型的情况下求解贝尔曼方程(解法类似于RM算法,详见后一章节)。
在 t = 0 , 1 , 2 , ? t =0, 1,2, \cdots t=0,1,2,?时刻,更新被访问状态 s t s_t st?的状态值估计 v t + 1 ( s t ) v_{t+1}(s_t) vt+1?(st?),但不更新其他未访问状态的状态值估计。
TD的目标:使得估计值
v
t
(
s
t
)
v_{t}(s_t)
vt?(st?)接近
v
ˉ
t
\bar{v}_t
vˉt?(*对于估计动作值的TD算法而言,是使得
q
t
(
s
t
,
a
t
)
q_t(s_t, a_t)
qt?(st?,at?)接近于
q
ˉ
t
\bar{q}_t
qˉ?t?
v
t
+
1
(
s
t
)
?
new?estimation
=
v
t
(
s
t
)
?
current?estimation
?
α
(
s
t
)
[
v
t
(
s
t
)
?
[
r
t
+
1
+
γ
v
t
(
s
t
+
1
)
?
TD?target?
v
ˉ
t
]
?
TD?error?
δ
t
]
\underbrace{v_{t+1}(s_t)}_{\text{new estimation}} = \underbrace{v_t(s_t)}_{\text{current estimation}} - \alpha(s_t) [\overbrace{v_t (s_t) - [\underbrace{r_{t+1} + \gamma v_t(s_{t+1})}_{\text{TD target } \bar{v}_t}]}^{\text{TD error } \delta_t} ]
new?estimation
vt+1?(st?)??=current?estimation
vt?(st?)???α(st?)[vt?(st?)?[TD?target?vˉt?
rt+1?+γvt?(st+1?)??]
?TD?error?δt??]
这种最原始的TD算法不能用来估计动作值,也不能用来搜索最优策略。
*注:不同文献和资料中的公式表述存在差异,比如Sutton书中(参考资料2)的TD形式如下:
V
(
S
t
)
←
V
(
S
t
)
+
α
[
R
t
+
1
+
γ
V
(
S
t
+
1
)
?
V
(
S
t
)
]
V(S_t) \larr V(S_t) + \alpha [R_{t+1} + \gamma V(S_{t+1}) - V(S_t)]
V(St?)←V(St?)+α[Rt+1?+γV(St+1?)?V(St?)]
TD算法本质上是求解贝尔曼期望方程(Bellman Expectation Equation):
v
π
(
s
)
=
E
[
R
+
γ
v
π
(
S
′
)
∣
S
=
s
]
,
s
∈
S
v_\pi(s) = \mathbb{E} [R + \gamma v_\pi (S') | S = s], \quad s \in S
vπ?(s)=E[R+γvπ?(S′)∣S=s],s∈S
TD算法的收敛性:如满足以下条件,则当
t
→
∞
t\rarr\infin
t→∞时,
v
t
(
s
)
v_t(s)
vt?(s)可以收敛至
v
π
(
s
)
v_\pi(s)
vπ?(s)(w.p.1,
?
s
∈
S
\forall s \in \mathcal{S}
?s∈S)
?
s
∈
S
\forall s \in \mathcal{S}
?s∈S,
∑
t
a
t
(
s
)
=
∞
\textstyle\sum_{t} a_t(s) = \infin
∑t?at?(s)=∞且
∑
t
a
t
2
(
s
)
<
∞
\textstyle\sum_{t} a_t^2(s) < \infin
∑t?at2?(s)<∞
*需要对每个状态访问很多次(理论上是无穷次)
TD / Sarsa | MC |
---|---|
Online:可以使用每步的reward,立即更新状态/动作值 | Offline:需要等待每个episode数据采集完毕 |
Continuing & Episodic tasks | 仅Episodic tasks |
Bootstrapping:依赖于初始估计和历史估计 | Non-bootstrapping:直接估计,不依赖初始值 |
Lower estimation variance:只依赖少数几个随机变量 | Higher estimation variance:依赖的随机变量较多 |
TD估计的期望是有偏的,因为其依赖于初始估计(Bootstrapping),但随着数据量的增加,最终会收敛到正确的估计值;相反,MC的期望是无偏估计。
目标:估计给定策略
π
\pi
π的动作值
q
π
(
s
,
a
)
q_\pi(s, a)
qπ?(s,a)
数据:
{
(
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(State-Action-Reward-State-Action) 算法:
*与原始TD算法的差异:将公式中的 v ( s t ) v(s_t) v(st?)替换为 q ( s t , a t ) q(s_t, a_t) q(st?,at?),因此Sarsa是TD算法的动作值估计的版本
Sarsa求解贝尔曼期望方程的动作值形式:
q
π
(
s
,
a
)
=
E
[
R
+
γ
q
π
(
S
′
,
A
′
)
∣
s
,
a
]
,
?
s
,
a
q_\pi(s, a) = \mathbb{E} [R + \gamma q_\pi (S', A') | s, a], \quad \forall s, a
qπ?(s,a)=E[R+γqπ?(S′,A′)∣s,a],?s,a
其中,
R
~
p
(
R
∣
s
,
a
)
R \sim p (R | s ,a)
R~p(R∣s,a),
S
′
~
p
(
S
′
∣
s
,
a
)
S' \sim p(S' | s, a)
S′~p(S′∣s,a),
A
′
~
π
(
A
′
∣
S
′
)
A' \sim \pi(A' | S')
A′~π(A′∣S′)(
~
\sim
~表示服从某种概率分布)。
注意到Sarsa所依赖的5个变量中,在给定 s t s_t st?和 a t a_t at?的情况下,只有 a t + 1 a_{t+1} at+1?依赖于策略 π t \pi_t πt?,而 r t + 1 r_{t+1} rt+1?和 s t + 1 s_{t+1} st+1?本身并不依赖于策略,而是依赖于转移概率分布(通过采样确定)。
Sarsa收敛性类似于TD,略。
Sarsa+策略提升的完整算法:(也属于GPI框架)
Sarsa有两个变体:Expected Sarsa和n-step Sarsa
其中, E q t ( s t + 1 , A ) = v t ( s t + 1 ) \mathbb{E} q_t (s_{t+1}, A) = v_t (s_{t + 1}) Eqt?(st+1?,A)=vt?(st+1?)是状态值而非动作值
Expected Sarsa求解以下形式的贝尔曼公式:
q
π
(
s
,
a
)
=
E
[
R
t
+
1
+
γ
v
π
(
S
t
+
1
)
∣
S
t
=
s
,
A
t
=
a
]
q_\pi (s, a) = \mathbb{E} [R_{t+1} + \gamma v_\pi(S_{t+1}) | S_t =s, A_t =a]
qπ?(s,a)=E[Rt+1?+γvπ?(St+1?)∣St?=s,At?=a]
与Sarsa的区别:
n-step Sarsa是Sarsa的推广,统一了Sarsa和MC的思想
公式及其他细节略。
n-step Sarsa本身仅用于策略估计,也可以和策略提升相结合。
Q-learing直接估计最优动作值,因此不需要策略评估-策略提升的过程。
Q-learing和Sarsa在公式上的唯一区别是TD target(公式的红字部分)。每个状态下,Q-learing在对action进行优化,但Sarsa只是依据当前策略选择action。
Sarsa求解贝尔曼方程,但Q-learing求解贝尔曼最优方程:
q
(
s
,
a
)
=
E
[
R
t
+
1
+
γ
max
?
a
q
(
s
t
+
1
,
a
)
∣
S
t
=
s
,
A
t
=
a
]
,
?
s
,
a
q(s, a) = \mathbb{E} [ R_{t+1} + \gamma \max_a q(s_{t+1}, a) | S_t =s, A_t = a ], \quad \forall s,a
q(s,a)=E[Rt+1?+γmaxa?q(st+1?,a)∣St?=s,At?=a],?s,a
此外,Sarsa属于on-policy算法,而Q-learing属于off-policy算法。
Q-learing算法步骤(off-policy):
由行为策略
π
B
\pi_B
πB?生成若干episode,每个episode包含
{
s
0
,
a
0
,
r
1
,
s
1
,
a
1
,
r
2
,
?
?
}
\{ s_0, a_0, r_1, s_1, a_1, r_2, \cdots \}
{s0?,a0?,r1?,s1?,a1?,r2?,?}。
在每个episode的每个时间步 t = 0 , 1 , 2 , ? t=0,1,2,\cdots t=0,1,2,?中:
对于off-policy的Q-learing而言,行为策略的探索性越强,其目标策略收敛于最优策略的速度越快。
所有估计动作值的TD算法可以由下式统一表示:
q
t
+
1
(
s
t
,
a
t
)
=
q
t
(
s
t
,
a
t
)
?
α
t
(
s
t
,
a
t
)
[
q
t
(
s
t
,
a
t
)
?
q
ˉ
t
]
q_{t+1} (s_{t}, a_t) = q_{t} (s_{t}, a_t) - \alpha_t (s_t, a_t) [q_{t} (s_t, a_t) - {\color{blue} \bar{q}_t}]
qt+1?(st?,at?)=qt?(st?,at?)?αt?(st?,at?)[qt?(st?,at?)?qˉ?t?]
其中,
q
ˉ
t
\bar{q}_t
qˉ?t?为TD target,而TD算法的目标即使得
q
t
(
s
t
,
a
t
)
q_t(s_t,a_t)
qt?(st?,at?)接近
q
ˉ
t
\bar{q}_t
qˉ?t?,或者说缩小TD error(
q
t
(
s
t
,
a
t
)
?
q
ˉ
t
q_{t} (s_t, a_t) - {\bar{q}_t}
qt?(st?,at?)?qˉ?t?)。
不同算法的差异在于 q ˉ t \bar{q}_t qˉ?t?的形式不同:【注意到,TD和MC实际上是有关联的,主要差异是采样的数量不同】
算法 | q ˉ t \bar{q}_t qˉ?t?形式 |
---|---|
Sarsa | q ˉ t = r t + 1 + γ q t ( s t + 1 , a t + 1 ) \bar{q}_t = r_{t+1} + \gamma q_{t} (s_{t+1}, a_{t+1}) qˉ?t?=rt+1?+γqt?(st+1?,at+1?) |
Expected-Sarsa | q ˉ t = r t + 1 + γ ∑ a π t ( a ∣ s t + 1 ) q t ( s t + 1 , a ) \bar{q}_t = r_{t+1} + \gamma \textstyle\sum_a\pi_t(a|s_{t+1}) q_{t} (s_{t+1}, a) qˉ?t?=rt+1?+γ∑a?πt?(a∣st+1?)qt?(st+1?,a) |
n-step Sarsa | q ˉ t = r t + 1 + γ r t + 2 + ? + γ n q t ( s t + n , a t + n ) \bar{q}_t = r_{t+1} + \gamma r_{t+2} + \cdots + \gamma^{n} q_{t} (s_{t+n}, a_{t+n}) qˉ?t?=rt+1?+γrt+2?+?+γnqt?(st+n?,at+n?) |
Q-learning | q ˉ t = r t + 1 + γ max ? a q t ( s t + 1 , a ) \bar{q}_t = r_{t+1} + \gamma \textstyle\max_a q_{t} (s_{t+1}, a) qˉ?t?=rt+1?+γmaxa?qt?(st+1?,a) |
Monte Carlo | q ˉ t = r t + 1 + γ r t + 2 + ? + γ ∞ r t + ∞ \bar{q}_t = r_{t+1} + \gamma r_{t+2} + \cdots + \gamma^{\infin} r_{t+\infin} qˉ?t?=rt+1?+γrt+2?+?+γ∞rt+∞?(均为单步折扣奖励,没有 q t q_t qt?) |
不同算法求解的公式也不同:
【*注:本节内容主要是为理解时序差分的原理提供资料,但与强化学习核心内容关系不大,可以跳过。】
考虑求解均值估计(Mean Estimation)问题,MC利用采样的算数均值来估计期望,但缺点是需要等待所有样本收集完毕后再进行计算。
另一种求解思路:用增量和迭代方法进行计算,有多少数据利用多少数据。
举例:如何增量和迭代式地计算均值?
设
w
k
+
1
=
1
k
∑
i
=
1
k
x
i
w_{k+1} = \frac{1}{k} \sum_{i=1}^{k} x_i
wk+1?=k1?∑i=1k?xi?,可知
w
k
+
1
=
w
k
?
1
k
(
w
k
?
x
k
)
w_{k+1} = w_k - \frac{1}{k} (w_k - x_k)
wk+1?=wk??k1?(wk??xk?)。基于该方式,只需要基于过去的均值计算结果
w
k
w_k
wk?和新采样
x
k
x_k
xk?,即可计算出总体均值【思路上有点像是EWMA】。采样数量越多,计算结果越准确。
可以对上式进一步推广,得到 w k + 1 = w k ? α k ( w k ? x k ) w_{k+1} = w_k - {\color{red}\alpha_k} (w_k - x_k) wk+1?=wk??αk?(wk??xk?),其中 α k > 0 \alpha_k>0 αk?>0。可以证明,当 α k \alpha_k αk?满足一定条件时,其迭代的计算结果会收敛至期望值。这是一种特殊的随机近似(SA)/随机梯度下降(SGD)算法。
随机近似(Stochastic Approximation,SA):一类随机迭代算法,适用于方程求解或优化问题,但不需要目标函数/方程的表达式/导数形式。
目标:在不知道
g
(
w
)
g(w)
g(w)的具体形式的情况下(视作黑盒),求解
g
(
w
)
=
0
g(w) = 0
g(w)=0,设其解为
w
?
w^*
w?。
*
g
(
w
)
g(w)
g(w)须为单调递增
RM算法:
w
k
+
1
=
w
k
?
a
k
g
~
(
w
k
,
η
k
)
w_{k+1} = w_k - a_k \tilde{g} (w_k, \eta_k)
wk+1?=wk??ak?g~?(wk?,ηk?)
RM算法依赖于数据:
RM定理(收敛性):在RM算法中,当以下三个条件成立时, w k w_k wk?会按照概率1(w.p.1)收敛至 w ? w^* w?
a k a_k ak?的常见选择: a k = 1 k a_k = \frac{1}{k} ak?=k1?(或非常小的常数,为了避免最近采样的权重下降)
欧拉常数(Euler-Mascheroni constant)
γ = lim ? n → ∞ ( ∑ k = 1 n 1 k ? ln ? n ) ≈ 0.557 \gamma = \lim_{n\rarr\infin} (\sum_{k=1}^{n}\frac{1}{k} - \ln n) \approx 0.557 γ=limn→∞?(∑k=1n?k1??lnn)≈0.557
当 n → ∞ n\rarr\infin n→∞时, ln ? n → ∞ \ln n\rarr\infin lnn→∞,因此可知 ∑ k = 1 ∞ 1 k = ∞ \sum_{k=1}^{\infin}\frac{1}{k} = \infin ∑k=1∞?k1?=∞
巴塞尔问题(Basel Problem)
∑ k = 1 ∞ 1 k 2 = π 2 6 < ∞ \sum_{k=1}^{\infin}\frac{1}{k^2} = \frac{\pi^2}{6} < \infin ∑k=1∞?k21?=6π2?<∞
SGD是RM算法的一种特殊情况。
目标:求解以下优化问题
min
?
w
J
(
w
)
=
E
[
f
(
w
,
X
)
]
\min_w \quad J(w) = \mathbb{E} [f(w, X)]
wmin?J(w)=E[f(w,X)]
*最小化用梯度下降,最大化用梯度上升
求解方法1:GD
w
k
+
1
=
w
k
?
α
k
?
w
E
[
f
(
w
k
,
X
)
]
=
w
k
?
α
k
E
[
?
w
f
(
w
k
,
X
)
]
w_{k+1} = w_k - \alpha_k \nabla_w \mathbb{E}[f(w_k, X)] = w_k - \alpha_k \mathbb{E}[\nabla_w f(w_k, X)]
wk+1?=wk??αk??w?E[f(wk?,X)]=wk??αk?E[?w?f(wk?,X)]
求解方法2:BGD(Batch Gradient Descent),基于数据采样计算期望
E
[
?
w
f
(
w
k
,
X
)
]
≈
1
n
∑
i
=
1
n
?
w
f
(
w
k
,
x
i
)
\mathbb{E}[\nabla_w f(w_k, X)] \approx \frac{1}{n} \sum_{i=1}^{n} \nabla_w f(w_k, x_i)
E[?w?f(wk?,X)]≈n1?∑i=1n??w?f(wk?,xi?)(
n
n
n次采样)
w
k
+
1
=
w
k
?
α
k
1
n
∑
i
=
1
n
?
w
f
(
w
k
,
x
i
)
w_{k+1} = w_k - \alpha_k \frac{1}{n} \sum_{i=1}^{n} \nabla_w f(w_k, x_i)
wk+1?=wk??αk?n1?∑i=1n??w?f(wk?,xi?)
求解方法3:SGD
w
k
+
1
=
w
k
?
α
k
?
w
f
(
w
k
,
x
k
)
w_{k+1} = w_k - \alpha_k \nabla_w f(w_k, x_k)
wk+1?=wk??αk??w?f(wk?,xk?)
SGD收敛性:若以下三个条件成立,则 w k w_k wk?会按照概率1(w.p.1)收敛至 w ? w^* w?( ? w E [ f ( w , X ) ] = 0 \nabla_w \mathbb{E} [f(w, X)] = 0 ?w?E[f(w,X)]=0的解)
SGD的收敛模式:
算法 | 形式 | 说明 |
---|---|---|
BGD | w k + 1 = w k ? α k 1 n ∑ i = 1 n ? w f ( w k , x i ) w_{k+1} = w_k - \alpha_k \frac{1}{n} \sum_{i=1}^{n} \nabla_w f(w_k, x_i) wk+1?=wk??αk?n1?∑i=1n??w?f(wk?,xi?) | 基于所有采样,最接近于均值 |
MBGD (mini batch) | w k + 1 = w k ? α k 1 m ∑ j ∈ I k ? w f ( w k , x j ) w_{k+1} = w_k - \alpha_k \frac{1}{m} \sum_{j \in \mathcal{I}_k} \nabla_w f(w_k, x_j) wk+1?=wk??αk?m1?∑j∈Ik???w?f(wk?,xj?) | 基于部分采样( ∣ I k ∣ = m ≤ n \vert \mathcal{I}_k \vert=m \leq n ∣Ik?∣=m≤n) |
SGD | w k + 1 = w k ? α k ? w f ( w k , x k ) w_{k+1} = w_k - \alpha_k \nabla_w f(w_k, x_k) wk+1?=wk??αk??w?f(wk?,xk?) | 基于单个采样 |
MBGD可以视作BGD和SGD的一种中间情况