1. 方法概述
蒙特卡罗方法是一种无模型(Model-Free) 的强化学习方法,所谓无模型,就是不需要依赖环境动态模型(如转移概率函数 P ( s ′ ∣ s , a ) P(s′∣s,a) P(s′∣s,a)和奖励函数 R ( s , a ) R(s,a) R(s,a)的显式知识)。简单来说,我们前面来说的策略都是通过公式推导出动作价值函数 Q Q Q,而蒙特卡洛可以直接通过观测数据来近似估计 Q Q Q,这样就省略了模型。
2. 如何估计 Q ( s i , a j ) Q(s_i,a_j) Q(si,aj)
将 ( s i , a j ) (s_i,a_j) (si,aj)对应的动作价值函数记作 Q ( s i , a j ) Q(s_i,a_j) Q(si,aj), s i s_i si状态下做出 a j a_j aj动作所获得的累计奖励记作 G s i , a j G{s_i,a_j} Gsi,aj。
如果你觉得我的符号命名十分混乱,请听我给你解释一下,我的文章中已经出现过多种
G
G
G 了。有
G
,
G
t
,
G
S
,
G
S
,
A
,
G
s
t
,
G
s
t
,
a
t
G,G_t,G_{S},G_{S,A},G_{s_t},G_{s_t,a_t}
G,Gt,GS,GS,A,Gst,Gst,at
其中
G
t
,
G
S
,
G
S
,
A
G_t,G_{S},G_{S,A}
Gt,GS,GS,A是等价的,都是代表某一个随机状态下获得累计奖励的随机变量。的当我们着重讨论 “时间步” 的时候(如贝尔曼公式那一节),我将其记为
G
t
G_t
Gt;当我我们关注 “状态” 时,我将其记为
G
S
G_{S}
GS;当我们关注 “状态-动作对” 时,我将其记为
G
S
,
A
G_{S,A}
GS,A。
其中
G
s
t
G_{s_t}
Gst 是指确定的某个状态
s
t
s_t
st 下获得的累计奖励,有时表示随机变量,有时表示样本。
其中
G
s
t
,
a
t
G_{s_t,a_t}
Gst,at 是指确定的某个状态
s
t
s_t
st并且做出某个确定动作
a
t
a_t
at时获得的累计奖励,有时表示随机变量,有时表示样本。
其中
G
G
G 是一个笼统的名字,就是单纯的代表 “累计奖励” 这四个字,也可以将其看作是上面的所有的符号的统称。
2.1 什么是episode(回合/轨迹)
一个 episode(回合/轨迹) 是指智能体从状态s出发,采取动作a,然后按照策略 π \pi π在环境中进行交互,直到到达终止状态(或达到最大步数)的完整过程。
2.2 使用观测到的 G s i , a j G_{s_i,a_j} Gsi,aj估计 Q ( s i , a j ) Q(s_i,a_j) Q(si,aj)
众所周知:
Q
π
(
s
,
a
)
≐
E
π
{
G
S
,
A
∣
S
=
s
,
A
=
a
}
=
E
π
{
G
s
,
a
}
\begin{align*} Q_{\pi}(s,a) &\doteq E_{\pi} \left\{ G_{S,A} \mid S=s, A=a \right\} \\ &=E_{\pi} \left\{ G_{s,a} \right\} \\ \end{align*}
Qπ(s,a)≐Eπ{GS,A∣S=s,A=a}=Eπ{Gs,a}
通过一个episode就会获得一个或多个
G
G
G 值,即
G
s
i
,
a
j
G_{s_i,a_j}
Gsi,aj 。多次采样(得到多个episode)获得足够多的
G
s
i
,
a
j
G_{s_i,a_j}
Gsi,aj ,对多个
G
s
i
,
a
j
G_{s_i,a_j}
Gsi,aj 分别求平均值。随着采样次数的增加,该估计会越来越接近当前轮次下真实的
Q
(
s
i
,
a
j
)
Q(s_i,a_j)
Q(si,aj)。
例如有一个episode
e
p
i
s
o
d
e
=
(
s
0
,
a
0
,
r
1
,
s
1
,
a
1
,
r
2
,
…
,
s
T
−
1
,
a
T
−
1
,
r
T
,
s
T
)
episode=(s_0,a_0,r_1,s_1,a_1,r_2,…,s_{T−1},a_{T−1},r_T,s_T)
episode=(s0,a0,r1,s1,a1,r2,…,sT−1,aT−1,rT,sT)
自然会得到
G
s
0
,
a
0
,
G
s
1
,
a
1
,
G
s
2
,
a
2
,
.
.
.
,
G
s
T
,
a
T
G_{s_0,a_0},G_{s_1,a_1},G_{s_2,a_2},...,G_{s_T,a_T}
Gs0,a0,Gs1,a1,Gs2,a2,...,GsT,aT
如果有多个episode,我就可能得到更多
G
s
0
,
a
0
,
G
s
1
,
a
1
,
G
s
2
,
a
2
,
.
.
.
G_{s_0,a_0},G_{s_1,a_1},G_{s_2,a_2},...
Gs0,a0,Gs1,a1,Gs2,a2,...,分别对
G
s
i
,
a
j
G_{s_i,a_j}
Gsi,aj求平均值,使用这个平均值估计
Q
(
s
i
,
a
j
)
Q(s_i,a_j)
Q(si,aj)。
当我们获得了一个可用的
Q
(
s
i
,
a
j
)
Q(s_i,a_j)
Q(si,aj)时,我们就可以使用策略迭代去更新我们的策略了。
以上就是蒙特卡洛方法的大体思想。一下是一些小细节。
3. every-visit方法和first-visit方法
当episode中有多个相同的 ( s i , a j ) (s_i,a_j) (si,aj)如
e p i s o d e = ( s 0 , a 0 , r 1 , s 1 , a 1 , r 2 , s 0 , a 0 , r 3 … ) episode=(s_0,a_0,r_1,s_1,a_1,r_2,s_0,a_0,r_3…) episode=(s0,a0,r1,s1,a1,r2,s0,a0,r3…)
其中有两个 ( s 0 , a 0 ) (s_0,a_0) (s0,a0)
如果是every-visit方法,只要出现一次就收集一次;但是对于first-visit方法,只收集第一次出现的
(
s
0
,
a
0
)
(s_0,a_0)
(s0,a0) 的q值。
every-visit比较直观,但first-visit的设计理念是什么?
- 无偏性:First-visit的估计在理论上是无偏的(即期望值等于真实 Q(s,a))。因为每次 (s,a) 的首次出现都对应一个独立的采样路径(从该状态开始的后续轨迹是独立于之前的历史的)。
- 避免依赖性:如果同一episode中多次使用同一个 (s,a) 的回报,这些回报会共享相同的后续状态和奖励,导致样本间存在相关性,可能引入偏差。
4. ε-greedy策略
为了保证所有的(s,a)都能被遍历到,我们不能使用贪心的策略去选择动作,应当给其他的动作一些“机会”,改用ε-greedy策略,即有较大概率选择当前最好的动作,一较小的概率选择其他动作。
其中,A(s)是s所对应的action的个数,参数ε为一个0~1的数。