参考资料
[1] 强化学习入门 第三讲 蒙特卡罗方法
[2] 重要性采样
本文主要是对该资料学习的笔记,并且加入了一些自己的想法,如有错误欢迎指出。
强化学习的分类
无模型强化学习 - 理论
在之前的学习中,若已知模型时,马尔科夫决策过程可以利用动态规划求解。其过程无非为两大部分:策略评估和策略改善。
基于模型的强化学习值函数计算
v k + 1 ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R s a + γ ∑ s ′ P s s ′ a v k ( s ′ ) ) (1) v_{k+1} (s) = \sum_{a \in A} \pi(a|s)\left( R^a_s + \gamma\sum_{s'} P^{a}_{ss'}v_{k}(s') \right) \tag{1} vk+1(s)=a∈A∑π(a∣s)(Rsa+γs′∑Pss′avk(s′))(1)
无模型的强化学习算法的基本过程也是如此,不过此时模型是未知的,因此值函数无法利用 P s s ′ a P^{a}_{ss'} Pss′a,需要另外求解。
回到状态值函数和行为值函数的定义:
累计回报函数
G
t
=
R
t
+
1
+
γ
R
t
+
2
+
.
.
.
=
∑
k
=
0
∞
γ
k
R
t
+
k
+
1
(2.1)
G_t = R_{t+1} + \gamma R_{t+2} + ... = \sum^{\infty}_{k=0} \gamma ^{k}R_{t+k+1} \tag{2.1}
Gt=Rt+1+γRt+2+...=k=0∑∞γkRt+k+1(2.1)
状态值函数
v
π
(
s
)
=
E
π
[
G
t
]
=
E
π
[
∑
k
=
0
∞
γ
k
R
t
+
k
+
1
∣
S
t
=
s
]
(2.2)
v_\pi (s) = E_\pi[G_t] = E_\pi \left[ \sum^{\infty}_{k=0} \gamma ^{k}R_{t+k+1} | S_t = s \right] \tag{2.2}
vπ(s)=Eπ[Gt]=Eπ[k=0∑∞γkRt+k+1∣St=s](2.2)
行为值函数
q
π
(
s
,
a
)
=
E
π
[
∑
k
=
0
∞
γ
k
R
t
+
k
+
1
∣
S
t
=
s
,
A
t
=
a
]
(2.3)
q_\pi (s,a) = E_\pi \left[ \sum^{\infty}_{k=0} \gamma ^{k}R_{t+k+1} | S_t = s , A_t = a \right] \tag{2.3}
qπ(s,a)=Eπ[k=0∑∞γkRt+k+1∣St=s,At=a](2.3)
可见状态值函数和行为值函数的定义是在策略
π
\pi
π下各次实现中累计回报函数的数学期望。
无模型的强化学习值函数计算
没有模型时,蒙特卡罗方法利用多组实验得到的结果的经验平均代替随机变量的期望,最终实现值函数的计算,这里给出计算值函数的理论。
一次实验的结果可描述为:
S
1
,
A
1
,
R
2
,
S
2
,
A
2
,
R
3
,
⋯
,
S
T
S_1, A_1, R_2, S_2, A_2, R_3, \cdots, S_T
S1,A1,R2,S2,A2,R3,⋯,ST
[1]中给出的图示描述:
其中:
- s 0 s_0 s0等为状态
- s T s_T sT为最终状态
- ( S , G i j ) (S,G_{ij}) (S,Gij)表示第i次实验状态s第j次出现
因此有:
- 经验指利用该策略做很多次试验,产生很多组数据;
- 平均指求均值,分为第一次访问与每次访问:
- 第一次访问蒙特卡罗方法:计算状态s值函数只利用每次试验中第一次访问到状态s时的累计回报函数,见式(3.1)。
- 每次访问蒙特卡罗方法:计算状态s值函数利用所有访问到状态s时的累计回报函数,见式(3.2).
v
(
s
)
=
G
11
(
s
)
+
G
21
(
s
)
+
.
.
.
N
(
s
)
(3.1)
v(s) = \frac{G_{11}(s)+G_{21}(s)+...}{N(s)} \tag{3.1}
v(s)=N(s)G11(s)+G21(s)+...(3.1)
v
(
s
)
=
G
11
(
s
)
+
G
12
(
s
)
+
G
21
(
s
)
+
.
.
.
N
(
s
)
(3.2)
v(s) = \frac{G_{11}(s)+G_{12}(s)+G_{21}(s)+...}{N(s)} \tag{3.2}
v(s)=N(s)G11(s)+G12(s)+G21(s)+...(3.2)
其中
- N ( s ) N(s) N(s)个人理解为总共访问状态s的次数?即分子有多少项。
至此,对于无模型情况下值函数的计算有了指导性的思想。
关于探索在蒙特卡罗算法中的作用
蒙特卡罗算法是利用经验的平均来估计值函数,核心在于如何获得充足的经验,即每个状态都能被访问到。
保证这一条件一种方法是探索性初始化,即令每个状态都有一定的几率作为初始状态。
探索性初始化方法描述如下:
其关键在于:
第2步中,每次试验的初始状态和动作都是随机的,以保证每个状态行为对都有机会作为初始化。在进行状态行为对值函数评估时,需要对每次试验中所有的状态行为对进行估计。
个人感觉这里的3、4只是给出一个理论指导,具体的过程在后续on-policy方法和off-policy方法中描述。
为保证保证每个状态都能被访问到,除了随机选择初始化状态与动作外,对于策略也具有一定要求:策略必须温和,即对所有的状态s和a 满足: π ( a ∣ s ) > 0 \pi(a|s)>0 π(a∣s)>0 ,即采用动作集中每个动作的概率都大于零,如下述策略:
ϵ − s o f t \epsilon - soft ϵ−soft策略
π ( a ∣ s ) ← { 1 − ϵ + ϵ ∣ A ( s ) ∣ i f a = a r g m a x q a Q ( s , a ) ϵ ∣ A ( s ) ∣ i f a ≠ a r g m a x q a Q ( s , a ) (4) \pi(a|s) \leftarrow \left\{ \begin{aligned} 1-\epsilon+\frac{\epsilon}{|A(s)|} && if a = argmaxq_aQ(s,a)\\ \frac{\epsilon}{|A(s)|} && if a \not = argmaxq_aQ(s,a) \end{aligned}\right. \tag{4} π(a∣s)←⎩⎪⎪⎨⎪⎪⎧1−ϵ+∣A(s)∣ϵ∣A(s)∣ϵifa=argmaxqaQ(s,a)ifa=argmaxqaQ(s,a)(4)
其中:
- 个人感觉 ∣ A ( s ) ∣ |A(s)| ∣A(s)∣为状态s下可用动作a的个数?
该策略用于保证选取的策略 π \pi π中每个动作概率大于0。
无模型强化学习 - 两种方法
On-policy
产生数据的策略与评估和要改善的策略是同一个策略,如: ϵ − s o f t \epsilon - soft ϵ−soft
其中:
- 步骤3最后一行感觉是在repeat后才做的?每一轮repeat都可能得到一个s,a第一次出现后的G,循环结束后将其平均值作为Q(s,a)
疑问:
- 这里还区分第一次访问和每次访问吗?
预备知识 - 重要性采样
此处参考[2],简言之,重要性采样可描述为:
希望求得
f
(
x
)
f(x)
f(x)在
π
(
x
)
\pi(x)
π(x)分布下的数学期望,而
π
(
x
)
\pi(x)
π(x)无法进行解析求解,只能通过取一系列特定值的方法近似计算(类似于定积分的定义,不取极限)。此时,在取值样点有限的情况下,在
π
(
x
)
\pi(x)
π(x)较大处密集取值可以提高精度。然而,在
π
(
x
)
\pi(x)
π(x)无法进行解析求解的前提下该方法并不可行。因此一种思想就是使用一个已知的分布
p
(
x
)
p(x)
p(x)代替
π
(
x
)
\pi(x)
π(x),实现计算的简化。
原始函数的期望:
E
(
f
)
=
∫
x
π
(
x
)
f
(
x
)
d
x
(5.1)
E(f) = \int_{x} \pi(x)f(x)dx \tag{5.1}
E(f)=∫xπ(x)f(x)dx(5.1)
使用P(x)分布下的期望:
E
(
f
)
=
∫
x
p
(
x
)
f
(
x
)
d
x
(5.2)
E(f) = \int_{x} p(x)f(x)dx \tag{5.2}
E(f)=∫xp(x)f(x)dx(5.2)
使用
p
(
x
)
p(x)
p(x)代替原始
π
(
x
)
\pi(x)
π(x)计算其原始期望:
E
(
f
)
=
∫
x
p
(
x
)
π
(
x
)
p
(
x
)
f
(
x
)
d
x
(5.3)
E(f) = \int_{x} p(x)\frac{\pi(x)}{p(x)}f(x)dx \tag{5.3}
E(f)=∫xp(x)p(x)π(x)f(x)dx(5.3)
在
p
(
x
)
p(x)
p(x)上采样
x
1
,
x
2
,
.
.
.
x_1, x_2,...
x1,x2,...后估计的期望:
E
(
f
)
=
1
N
∑
i
=
1
N
π
(
x
i
)
p
(
x
i
)
f
(
x
i
)
=
1
N
∑
i
=
1
N
ω
i
f
(
x
i
)
(5.4)
E(f) = \frac{1}{N}\sum_{i=1}^{N} \frac{\pi(x_i)}{p(x_i)}f(x_i) = \frac{1}{N}\sum_{i=1}^{N} \omega_{i}f(x_i) \tag{5.4}
E(f)=N1i=1∑Np(xi)π(xi)f(xi)=N1i=1∑Nωif(xi)(5.4)
其中,重要性权重的定义为:
ω
i
=
π
(
x
i
)
p
(
x
i
)
(5.5)
\omega_{i} = \frac{\pi(x_i)}{p(x_i)} \tag{5.5}
ωi=p(xi)π(xi)(5.5)
其中:
- 基于重要性采样的积分估计为无偏估计,即估计的期望值等于真实的期望;
- 基于重要性采样的积分估计的方差无穷大,使用的采样概率分布与原概率分布越接近,方差越小。
减小积分方差的方法:加权重要性采样:
E
(
f
)
=
1
N
∑
i
=
1
N
ω
i
∑
m
=
1
N
ω
m
f
(
x
i
)
(5.6)
E(f) = \frac{1}{N}\sum_{i=1}^{N} \frac{\omega_{i}}{\sum^N_{m=1}\omega^{m}}f(x_i) \tag{5.6}
E(f)=N1i=1∑N∑m=1Nωmωif(xi)(5.6)
疑问:
- 这里 ω m \omega^{m} ωm是什么?
Off-policy
对于一次实验的结果可描述为:
S
1
,
A
1
,
R
2
,
S
2
,
A
2
,
R
3
,
⋯
,
S
T
S_1, A_1, R_2, S_2, A_2, R_3, \cdots, S_T
S1,A1,R2,S2,A2,R3,⋯,ST
此时重要性权重定义为:
ρ
t
T
=
∏
k
=
t
T
−
1
π
(
A
k
∣
S
k
)
μ
(
A
k
∣
S
k
)
(6.1)
\rho^{T}_{t} = \prod_{k=t}^{T-1} \frac{\pi(A_k|S_k)}{\mu(A_k|S_k)} \tag{6.1}
ρtT=k=t∏T−1μ(Ak∣Sk)π(Ak∣Sk)(6.1)
其中:
- π \pi π为改进的策略
- μ \mu μ为探索的策略
- s k s_k sk、 a k a_k ak为实验中获取的具体状态、动作
此时值函数的估计为:
V
(
s
)
=
∑
t
∈
τ
(
s
)
ρ
t
T
(
t
)
G
(
t
)
∣
τ
(
s
)
∣
(6.2)
V(s) = \frac{\sum_{t \in \tau(s)} \rho_{t}^{T(t)}G(t)}{|\tau(s)|} \tag{6.2}
V(s)=∣τ(s)∣∑t∈τ(s)ρtT(t)G(t)(6.2)
其中:
- T ( t ) T(t) T(t)为时间t后第一次终止时刻
- G ( t ) G(t) G(t)为从t时刻开始到 T ( t ) T(t) T(t)时刻结束期间的累计回报
- τ ( s ) \tau(s) τ(s)为状态s发生所有时刻的集合,绝对值在这里表示取其数量?
图示:
理解:
- 这里的意思是对于每个状态s将其所有出现时候得到的累计回报函数按重要性权重加权求平均,将其结果作为值函数。
异策略每次访问蒙特卡罗算法: