目录
在得出策略 π \pi π的状态值函数 和 动作值函数之后,那么该如何求出最优策略?根据环境的 动态特性是否已知分为两种方法:动态规划法 和 蒙特卡洛法。
1. 动态规划(Dynamic Programming, DP)
DP是一种求解最优值得常用方法,此处用于求解系统动态特性 p ( s ′ , r ∣ s , a ) p(s',r|s,a) p(s′,r∣s,a)已知情况下的最优策略。
首先我们有一个策略 π \pi π并以此求出最优策略 π ∗ \pi* π∗。
1.1. 策略评估(预测)
策略评估做的事情是:给定策略 π \pi π,求出该策略的价值函数 v π ( s ) v_{\pi}(s) vπ(s)与 q π ( s , a ) q_{\pi}(s,a) qπ(s,a)
事实上根据马尔科夫决策过程中的描述,状态价值函数 v π ( s ) v_{\pi}(s) vπ(s)满足如下递推特性:
v π ( s ) = ∑ a π ( a ∣ s ) × q π ( s , a ) = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ × v π ( s ′ ) ] (1) v_{\pi}(s)=\sum_{a}\pi(a|s) \times q_{\pi}(s,a) =\sum_{a}\pi(a|s) \sum_{s',r}p(s',r|s,a)[r+\gamma \times v_{\pi}(s')] \tag{1} vπ(s)=a∑π(a∣s)×qπ(s,a)=a∑π(a∣s)s′,r∑p(s′,r∣s,a)[r+γ×vπ(s′)](1)
其中
γ
<
1
\gamma <1
γ<1
这实际上是一个有着
∣
S
∣
|S|
∣S∣个未知数的
∣
S
∣
|S|
∣S∣个方程的方程组,手动求解可能非常复杂,选择迭代策略评估求解。
迭代策略评估
思想是先随机初始化所有变量值,记为
v
0
(
s
)
v_0(s)
v0(s)。之后用
v
0
(
s
)
v_0(s)
v0(s)的值按照下式计算
v
1
(
s
)
v_1(s)
v1(s)的值
v
k
+
1
(
s
)
=
∑
a
π
(
a
∣
s
)
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
×
v
k
(
s
′
)
]
v_{k+1}(s) = \sum_{a}\pi(a|s) \sum_{s',r}p(s',r|s,a)[r+\gamma \times v_{k}(s')]
vk+1(s)=a∑π(a∣s)s′,r∑p(s′,r∣s,a)[r+γ×vk(s′)]
事实上就是用旧的
v
k
(
s
)
v_k(s)
vk(s)计算新的
v
k
+
1
(
s
)
v_{k+1}(s)
vk+1(s)。由于策略存在,则
v
π
(
s
)
v_{\pi}(s)
vπ(s)一定存在,可以证明
v
∞
(
s
)
→
v
π
(
s
)
v_∞(s)→v_{\pi}(s)
v∞(s)→vπ(s)。在实际编程中可以使用
max
s
∣
v
k
+
1
(
s
)
−
v
k
(
s
)
∣
<
ϵ
\max_{s}|v_{k+1}(s)-v_k(s)|<\epsilon
maxs∣vk+1(s)−vk(s)∣<ϵ判断是否终止。
得出 v π ( s ) v_{\pi}(s) vπ(s)之后就可以根据 ( 1 ) (1) (1)算出 q π ( s , a ) q_{\pi}(s,a) qπ(s,a)了。
1.2. 策略改进(控制)
在得到策略 π \pi π的值函数之后,就需要对该策略进行改进以获得更优的策略,然后再对更优的策略求更优,如此迭代反复最终找到最优策略。
什么是更优的策略?
状态价值函数更大的策略就是更优的策略,即
如果 ∀ s ∈ S , v π ′ ( s ) ≥ v π ( s ) \forall s \in S, v_{\pi'}(s) ≥v_{\pi}(s) ∀s∈S,vπ′(s)≥vπ(s)成立且至少存在一个状态 s s s满足严格不等 v π ′ ( s ) > v π ( s ) v_{\pi'}(s) >v_{\pi}(s) vπ′(s)>vπ(s),则认为策略 π ′ \pi' π′较 π \pi π更优。
如何获得更优的策略?
寻找比当前策略
π
\pi
π更优策略
π
′
\pi'
π′的思路是:先调整一个状态,对于状态
s
s
s,满足
π
′
(
s
)
=
arg max
a
q
π
(
s
,
a
)
(2)
\pi'(s)=\argmax_aq_{\pi}(s,a) \tag{2}
π′(s)=aargmaxqπ(s,a)(2)
即保证状态
s
s
s下选择的动作 一定是所有可选动作中
q
π
(
s
,
a
)
q_{\pi}(s,a)
qπ(s,a)最大的那个。
其实就是修改概率分布,这是因为
v
π
(
s
)
=
∑
a
π
(
a
∣
s
)
×
q
π
(
s
,
a
)
≤
max
a
q
π
(
s
,
a
)
=
max
a
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
×
v
k
(
s
′
)
]
=
v
π
′
(
s
)
v_{\pi}(s)=\sum_{a}\pi(a|s) \times q_{\pi}(s,a)≤\max_aq_{\pi}(s,a)=\max_a\sum_{s',r}p(s',r|s,a)[r+\gamma \times v_{k}(s')]=v_{\pi'}(s)
vπ(s)=a∑π(a∣s)×qπ(s,a)≤amaxqπ(s,a)=amaxs′,r∑p(s′,r∣s,a)[r+γ×vk(s′)]=vπ′(s)
例如
a / s a/s a/s | a1 | a2 | a3 | a4 | a5 |
---|---|---|---|---|---|
q ( s , a ) q(s,a) q(s,a) | 1 | 2 | 3 | 5 | 5 |
π ( a / s ) \pi(a/s) π(a/s) | 0.1 | 0.2 | 0.2 | 0.4 | 0.1 |
π ′ ( a / s ) \pi'(a/s) π′(a/s) | 0 | 0 | 0 | 0.5 | 0.5 |
显然下表比上表的状态价值函数更大。
1.3. 策略迭代(价值迭代)
我们要为每个状态 s s s寻找最优策略 v ∗ ( s ) v_*(s) v∗(s),1.1.和1.2.分别给出了对于策略的完整预测方法 以及 只修改一个状态策略的控制方法。
那么问题来了,如何利用预测与控制 进行迭代以找到最优策略,即 ∀ s ∈ S , v ∗ ( s ) = max π [ v π ( s ) ] \forall s \in S, v_*(s) = \max_{\pi}[v_{\pi}(s)] ∀s∈S,v∗(s)=maxπ[vπ(s)]
从策略改进 和 最优策略的 π ∗ \pi_* π∗表达式可以看到,较优的策略一定是选择最大的 q π ( s , a ) q_{\pi}(s,a) qπ(s,a),即式 ( 2 ) (2) (2)。因此如果一开始我们给定的策略就是式 ( 2 ) (2) (2),这样的策略经过多次策略评估之后是不是就是最优策略了呢?
答案是YES!也就是说式 ( 2 ) (2) (2)的策略就是最优策略。那么只需对这个策略进行策略评估,就能找到最优策略的价值函数 v ∗ ( s ) v_*(s) v∗(s),也就是Bellman最优方程,以及策略 π ( s ) \pi(s) π(s)的确定性表达式(到底选哪个 a a a)。
最优策略的预测方程为:
v k + 1 ( s ) = max a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ × v k ( s ′ ) ] v_{k+1}(s) = \max_{a} \sum_{s',r}p(s',r|s,a)[r+\gamma \times v_{k}(s')] vk+1(s)=amaxs′,r∑p(s′,r∣s,a)[r+γ×vk(s′)]
在 k → ∞ k→∞ k→∞时有 v k ( s ) → v ∗ ( s ) v_k(s)→v_*(s) vk(s)→v∗(s)成立。
实际上,计算 v k + 1 ( s ) v_{k+1}(s) vk+1(s)之后再计算 v k + 1 ( s ′ ) v_{k+1}(s') vk+1(s′)时,可以直接使用 v k + 1 ( s ) v_{k+1}(s) vk+1(s)的结果,不影响收敛性,即“就地更新”只在一个表中完成策略评估即可,即
v ( s ) = max a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ × v ( s ′ ) ] (重要) v(s) = \max_{a} \sum_{s',r}p(s',r|s,a)[r+\gamma \times v(s')]\tag{重要} v(s)=amaxs′,r∑p(s′,r∣s,a)[r+γ×v(s′)](重要)
寻找最优策略及状态价值函数流程如下:
policy FindBestPolicy(S,A,R,p,gamma,delta,maxIterationTimes)
{
foreach s in S
{
V(s) = 0;
policy(s) = rand(a in A(s));
}
i = 0;
while(i <= maxIterationTimes)
{
maxDelta = 0;
foreach s in S
{
v = V(s);
V(s) = max( sum( p(s',r|s,a) * [r + gamma* V(s')] ) );
policy(s) = argmax( a, sum( p(s',r|s,a) * [r + gamma* V(s')] ) );
maxDelta = max(maxDelata,abs(v - V(s)));
}
i++;
if(maxDelta < delta)
return policy;
}
return policy;
}
参考资料
- 强化学习. Richard S. Sutton,Andrew G. Barto
- 强化学习(三):动态规划求解MDP(Planning by Dynamic Programming)
2. 蒙特卡洛法(MonteCarlo, MC)
当系统动态特性 p ( s ′ , r ∣ s , a ) p(s',r|s,a) p(s′,r∣s,a)未知时,使用MC求解最优策略问题。
MC算法的核心思想是多次实验,用所有实验样本的平均值代表理论值,例如值函数。当实验次数趋于无穷时,就会收敛到理论值。
2.1. MC预测
预测部分用于求取策略的状态值函数。
根据 v π ( s ) v_{\pi}(s) vπ(s)的定义,为当前状态为 s s s时的折扣收益累积和 的期望,因此MC的思路就是多次实验产生多个episodes,对每个episode的每个状态 s s s求 G G G再做平均
按增量的更新式如下:
V ( S t ) = V ( S t ) + 1 ∣ R e t u r n s ( S t ) ∣ [ G − V ( S t ) ] V(S_t) = V(S_t)+\frac{1}{|Returns(S_t)|}[G-V(S_t)] V(St)=V(St)+∣Returns(St)∣1[G−V(St)]
此处使用首次访问型MC,即每个episode同一个状态可能出现了很多次,只将第一次出现的状态纳入 v ( s ) v(s) v(s)的计算中。
算法流程如下:
V MCEvaluation(S, A, R, policy, gamma, episodesNum)
{
V(S) = 0;
N(S) = 0;
i = 0;
while(i <= episodesNum)
{
episodeSequence = createEpisode(S,A,policy); //完全根据policy生成样本序列
G = 0; // 折扣收益和
//计算平均值,按照时间顺序反向遍历
for last s to first s within episodeSequence
{
G = gamma * G + R(s,a,s');
if ( is_first(s) == 1 )
{
N(s) +=1;
V(s) += (G - V(s)) / N(s);
is_first(s) = 0;
}
}
i++;
}
return V(S);
}
由于 G G G只能从序列末尾遍历计算,所以只能从倒数第二个状态开始 按照时间 倒序遍历计算 v ( s ) v(s) v(s)。
注意以上过程是通过实际实验得出的样本值进行的,即只知道根据 π ( a ∣ s ) \pi(a|s) π(a∣s)计算 a a a实现状态转移至 s ′ s' s′并获得奖励 r ( s , a , s ′ ) r(s,a,s') r(s,a,s′),但以多大概率转移至 s ′ s' s′或得到奖励则是未知的。
2.2. MC控制
即MC策略改进。既然知道式
(
2
)
(2)
(2)就是最优策略,则将该策略进行预测,并时时记录
π
(
s
)
\pi(s)
π(s)的确定行为。即在程序MCEvaluation(S, A, R, policy, gamma, episodesNum)
中的循环改成
for last (s,a) to first (s,a) within episodeSequence
{
G = gamma * G + R(s,a,s');
if ( is_first(s,a) == 1 )
{
N(s,a) +=1;
Q(s,a) += (G - Q(s,a)) / N(s,a);
policy(s) = argmax(a,Q(s,:)); //此处policy变成确定性策略
is_first(s,a) = 0;
}
}
按照贪心法则优化策略的错误
注意这种思路大错特错!!,别忘了!样本序列的生成是借助policy的!一句policy(s) = argmax(a,Q(s,:));
把policy(s)改成确定性策略了,这以后再生成包含状态
s
s
s的序列,在状态
s
s
s处一定只会有确定的行为
a
a
a,那状态
s
s
s的其他行为产生的行为值函数就一定比
Q
(
s
,
a
)
Q(s,a)
Q(s,a)小嘛?不一定!!
例如 s s s为方格中的一个格子,能够上下左右移动,在初始时由于这四种行为的行为值函数未知所以为零, ( 2 ) (2) (2)的贪心策略不能用,假设此时策略为平均分布的随机策略。
行为 a a a | Up | Down | Left | Right |
---|---|---|---|---|
π ( a \pi(a π(al s ) s) s) | 0.25 | 0.25 | 0.25 | 0.25 |
Q ( s , a ) Q(s,a) Q(s,a) | 0 | 0 | 0 | 0 |
之后生成了一个episodeSequence包括
s
s
s,通过随机数选择了行为Right,算得
Q
(
s
,
R
i
g
h
t
)
=
5
Q(s,Right) = 5
Q(s,Right)=5,根据policy(s) = argmax(a,Q(s,:));
因此上表变成
行为 a a a | Up | Down | Left | Right |
---|---|---|---|---|
π ( a \pi(a π(al s ) s) s) | 0 | 0 | 0 | 1 |
Q ( s , a ) Q(s,a) Q(s,a) | 0 | 0 | 0 | 5 |
这一下!嚎么!以后episode的序列episodeSequence如果有状态 s s s一定只有动作 R i g h t Right Right了,其他动作的值函数连算得机会都没有,那 π ( s ) = R i g h t \pi(s) = Right π(s)=Right是最优策略嘛?呸!
根本问题在于优化的策略 和 产生序列样本的策略 是同一个确定性策略,而最优策略又一定是确定性的。但是DP就不会这样,因为DP的遍历是按照状态 S S S遍历的,而非生成的序列样本,序列样本是要有策略指导的!
改进的思路很简单生成样本序列时,要让每个状态 s s s有机会遍历所有的行为 a a a。
同轨策略(on-policy) 与 离轨策略(off-policy)
根据上述出现的问题,就需要思考样本采集应该遵循什么策略了。
先上定义
行动策略:每一幕中采集样本序列遵循的策略
b
b
b
目标策略:待优化的策略
π
\pi
π
同策略(on-policy):
b
=
π
b = \pi
b=π
异策略(off-policy):
b
≠
π
b ≠ \pi
b=π
根据定义,2.1.和2.2讲的内容都是同策略,可以看出同策略MC控制不能使用确定性策略,一个思路是使策略最终收敛至最优的确定性策略。
对于off-policy而一个关键问题在于如何使用行动策略 b b b产生的样本 估计或优化 目标策略 π \pi π的值函数呢?
2.3. 离轨MC控制
用策略 b b b采的状态 和 行为,算出来应该是 b b b的值函数,如何找到 b b b和 π \pi π的值函数关系呢?
覆盖性条件:首先为了能够完整预测 π \pi π,必须保证 π \pi π能做的行动 b b b必须也能做,即 π ( a ∣ s ) > 0 \pi(a|s)>0 π(a∣s)>0必有 b ( a ∣ s ) > 0 b(a|s)>0 b(a∣s)>0成立。
至于值函数的事情,从 折扣累积收益 开始讲起。
重要度采样
对于状态 s s s用策略 b b b采样的 G G G做平均,应该是 b b b的值函数的估计,即 E b ( G t ∣ S t = s , A t = a ) E_b(G_t|St = s,At=a) Eb(Gt∣St=s,At=a),要想变成 π \pi π的值函数的估计,从值函数定义看。
E ( G t ∣ S t = s , A t = a ) = ∑ G [ p ( G t ∣ S t = s , A t = a ) ⋅ G t ] E(G_t|St = s,At=a)=\sum_{G} [p(G_t|S_t=s,A_t=a)·G_t] E(Gt∣St=s,At=a)=G∑[p(Gt∣St=s,At=a)⋅Gt]
上式是数学期望的定义,注该式可以看作 q ( s , a ) q(s,a) q(s,a)的解。对于策略 b b b和 π \pi π,二者的区别就体现在 p ( G t ∣ S t = s , A t = a ) p(G_t|St=s,At=a) p(Gt∣St=s,At=a)上,即在这一幕出现 G t G_t Gt的概率。
那么策略 π \pi π的期望可以重新成
E π ( G t ∣ S t = s , A t = a ) = ∑ G [ p b ( G t ∣ S t = s , A t = a ) ⋅ p π ( G t ∣ S t = s , A t = a ) p b ( G t ∣ S t = s , A t = a ) ⋅ G t ] E_{\pi}(G_t|St = s,At=a)=\sum_{G} [p_{b}(G_t|S_t=s,A_t=a)·\frac{p_{\pi}(G_t|S_t=s,A_t=a)}{p_{b}(G_t|S_t=s,A_t=a)}·G_t] Eπ(Gt∣St=s,At=a)=G∑[pb(Gt∣St=s,At=a)⋅pb(Gt∣St=s,At=a)pπ(Gt∣St=s,At=a)⋅Gt]
其中 p π ( G t ∣ S t = s , A t = a ) p b ( G t ∣ S t = s , A t = a ) \frac{p_{\pi}(G_t|S_t=s,A_t=a)}{p_{b}(G_t|S_t=s,A_t=a)} pb(Gt∣St=s,At=a)pπ(Gt∣St=s,At=a)就是重要度比,反映了同一个 G t G_t Gt在不同策略下出现的概率比。或者说利用策略 b b b得到的 折扣收益累积 乘以重要度比,再进行平均就是策略 π \pi π的值函数的估计
而 ( s , a ) (s,a) (s,a)时获得 G t G_t Gt的概率就是在这一episode中 ( s , a ) (s,a) (s,a)后续的一系列状态、行为、收益出现的概率,即
p b ( G t ∣ S t = s , A t = a ) = p b ( R t + 1 , S t + 1 , A t + 1 , . . . , S T ∣ S t = s , A t = a ) = p ( R t + 1 , S t + 1 ∣ S t , A t ) ⋅ b ( A t + 1 ∣ S t + 1 ) p ( R t + 2 , S t + 2 ∣ S t + 1 , A t + 1 ) ⋅ . . . ⋅ b ( A T − 1 ∣ S T − 1 ) p ( R T , S T ∣ S T − 1 , A T − 1 ) = p ( R t + 1 , S t + 1 ∣ S t , A t ) ∏ k = t + 2 T b ( A k − 1 ∣ S k − 1 ) p ( R k , S k ∣ S k − 1 , A k − 1 ) p_{b}(G_t|S_t=s,A_t=a) = p_{b}(R_{t+1},S_{t+1},A_{t+1},...,S_{T}|S_t=s,A_t=a) =p(R_{t+1},S_{t+1}|S_t,A_t)·b(A_{t+1}|S_{t+1})p(R_{t+2},S_{t+2}|S_{t+1},A_{t+1})·...·b(A_{T-1}|S_{T-1})p(R_{T},S_{T}|S_{T-1},A_{T-1}) \\=p(R_{t+1},S_{t+1}|S_t,A_t)\prod_{k=t+2}^T b(A_{k-1}|S_{k-1})p(R_{k},S_{k}|S_{k-1},A_{k-1}) pb(Gt∣St=s,At=a)=pb(Rt+1,St+1,At+1,...,ST∣St=s,At=a)=p(Rt+1,St+1∣St,At)⋅b(At+1∣St+1)p(Rt+2,St+2∣St+1,At+1)⋅...⋅b(AT−1∣ST−1)p(RT,ST∣ST−1,AT−1)=p(Rt+1,St+1∣St,At)k=t+2∏Tb(Ak−1∣Sk−1)p(Rk,Sk∣Sk−1,Ak−1)
注意到上式涉及到了动态特性 p ( s ′ , a ∣ s , a ) p(s',a|s,a) p(s′,a∣s,a)。同理 p π ( G t ∣ S t = s , A t = a ) p_{\pi}(G_t|S_t=s,A_t=a) pπ(Gt∣St=s,At=a)也有上述关系式,因此重要度比 ρ t : T − 1 \rho_{t:T-1} ρt:T−1就为
ρ t : T − 1 = p π ( G t ∣ S t = s , A t = a ) p b ( G t ∣ S t = s , A t = a ) = p ( R t + 1 , S t + 1 ∣ S t , A t ) ∏ k = t + 2 T π ( A k − 1 ∣ S k − 1 ) p ( R k , S k ∣ S k − 1 , A k − 1 ) p ( R t + 1 , S t + 1 ∣ S t , A t ) ∏ k = t + 2 T b ( A k − 1 ∣ S k − 1 ) p ( R k , S k ∣ S k − 1 , A k − 1 ) = ∏ k = t + 1 T − 1 π ( A k ∣ S k ) ∏ k = t + 1 T − 1 b ( A k ∣ S k ) \rho_{t:T-1}=\frac{p_{\pi}(G_t|S_t=s,A_t=a)}{p_{b}(G_t|S_t=s,A_t=a)}=\frac{p(R_{t+1},S_{t+1}|S_t,A_t)\prod_{k=t+2}^T \pi(A_{k-1}|S_{k-1})p(R_{k},S_{k}|S_{k-1},A_{k-1})} {p(R_{t+1},S_{t+1}|S_t,A_t)\prod_{k=t+2}^T b(A_{k-1}|S_{k-1})p(R_{k},S_{k}|S_{k-1},A_{k-1})} =\frac{\prod_{k=t+1}^{T-1} \pi(A_{k}|S_{k})}{\prod_{k=t+1}^{T-1} b(A_{k}|S_{k})} ρt:T−1=pb(Gt∣St=s,At=a)pπ(Gt∣St=s,At=a)=p(Rt+1,St+1∣St,At)∏k=t+2Tb(Ak−1∣Sk−1)p(Rk,Sk∣Sk−1,Ak−1)p(Rt+1,St+1∣St,At)∏k=t+2Tπ(Ak−1∣Sk−1)p(Rk,Sk∣Sk−1,Ak−1)=∏k=t+1T−1b(Ak∣Sk)∏k=t+1T−1π(Ak∣Sk)
动态特性被分子分母约去了,剩下的都是已知。
注意到重要度比是与目标策略有关的,而目标策略一定是确定性策略,即 π ( A k ∣ S k ) \pi(A_k|S_k) π(Ak∣Sk)不是0就是1。因此 ρ t : T − 1 \rho_{t:T-1} ρt:T−1的表达式告诉我们,如果在 t + 1 , . . . , T t+1,...,T t+1,...,T时刻中任意一个时刻选择的动作与目标策略不一致,则 0 , . . . , t 0,...,t 0,...,t时刻的策略 π \pi π下的样本收益 G t G_t Gt均为零
加权重要度采样
使用无偏估计的思路就是将 所有访问 s s s的收益 作平均即可,若令 T ( s ) T(s) T(s)为所有访问状态 s s s时刻的集合,因此有
Q ( s , a ) = ∑ t ∈ T ( s ) ρ t : T − 1 G t ∣ T ( s ) ∣ Q(s,a) = \frac{\sum_{t \in T(s)} \rho_{t:T-1} G_t}{|T(s)|} Q(s,a)=∣T(s)∣∑t∈T(s)ρt:T−1Gt
根据书上所说,这样的估计方差会比较大,主要在于重要度采样比的累乘结果 可能会远远大于1,因此常用如下的加权重要度采样
Q ( s , a ) = ∑ t ∈ T ( s ) ρ t : T − 1 G t ∑ t ∈ T ( s ) ρ t : T − 1 Q(s,a) = \frac{\sum_{t \in T(s)} \rho_{t:T-1} G_t}{\sum_{t \in T(s)} \rho_{t:T-1} } Q(s,a)=∑t∈T(s)ρt:T−1∑t∈T(s)ρt:T−1Gt
加权重要度采样的估计方法虽然是有偏的,但是方差比较小。
控制算法
算法流程与2.2中的程序类似,只不过 行动策略 和 目标策略要不同,满足覆盖性条件。
还有一点需要说明的是,虽然目标策略 π \pi π在优化过程中变成确定性策略,不会影响到样本的采集(基于策略 b b b)但目标策略 π \pi π的优化会影响重要度采样比 ρ \rho ρ。
因此,如果优化之后的 π ( s ) \pi(s) π(s)与样本中的 ( A t ∣ S t = s ) (A_t|S_t = s) (At∣St=s)不相等,则 π ( A t ∣ s ) = 0 \pi(A_t|s) = 0 π(At∣s)=0,这将导致这一episode的 ∀ k ∈ [ 0 , t ) , ρ k : T − 1 = 0 \forall k \in [0,t),\rho_{k:T-1} = 0 ∀k∈[0,t),ρk:T−1=0。此时这一episode的遍历可以立即break。
此处使用增量型更新实现,流程如下:
targetPolicy offPolicy_MCControl(S, A, R, behaviorPolicy, gamma, episodesNum)
{
Q(S,A) = 0;
C(S,A) = 0;
i = 0;
while(i <= episodesNum)
{
episodeSequence = createEpisode(S,A,behaviorPolicy); //完全根据behaviorPolicy生成样本序列
W = 1;
G = 0; // 折扣收益和
//计算平均值,按照时间顺序反向遍历
for t = T-1 to 0
{
G = gamma * G + R(s,a,s');
C(s(t),a(t)) += W;
Q(s,a) += W / C(s(t),a(t)) * ( G - Q(s,a) );
targetPolicy(s(t)) = argmax(a,Q(s(t),:));
if( targetPolicy(s(t)) != a(t) )
break;
W *= 1/behaviorPolicy( a(t)|s(t) );
}
i++;
}
return targetPolicy(S);
}
参考资料
- 强化学习. Richard S. Sutton,Andrew G. Barto
- 重要度采样
3. 总结
下面对DP和MC的优缺点进行分析
DP特点
- 需要动态特性 p ( s ′ , a ∣ s , a ) p(s',a|s,a) p(s′,a∣s,a)
- 自举,用后继值函数的估计更新当前值函数
- 效率高,可在 ∣ S ∣ |S| ∣S∣与 ∣ A ∣ |A| ∣A∣的多项式时间内找到最优策略
- 维度灾难,状态的总数量经常随着状态变量的增加而指数级上升
MC特点
- 无需动态特性 p ( s ′ , a ∣ s , a ) p(s',a|s,a) p(s′,a∣s,a),直接通过采样样本进行学习。
- 不自举,不同状态之间的价值估计 互不相关
- 需要很多episode,每个episode必须产生完整样本
- 当一个episode比较长,而 A t ≠ π ( S t ) A_t ≠ \pi(S_t) At=π(St)时必须中途截断,学习速度降低