给定一个马尔科夫决策过程(MDP) < S , A , P , R , γ > <\mathcal S,\mathcal A,\mathcal P,\mathcal R,\gamma> <S,A,P,R,γ>,根据状态转移概率 P \mathcal P P是否已知,强化学习可分为基于模型(Model-based)和无模型(Model-free)的两种学习方法。而动态规划是基于模型的强化学习方法,分为策略迭代(policy iteration)和价值迭代(value iteration)两种。
1. 策略迭代
策略迭代包括策略评估和策略改进。
1) 策略评估
策略评估的目的是给定一个策略
π
\pi
π,计算出每个状态在该策略下的价值函数,即评估每个状态的好坏。
我们首先给出当前状态
s
∈
S
s\in \mathcal S
s∈S的价值函数与后继状态
s
′
s^\prime
s′的价值函数之间的关系:
v
π
(
s
)
=
∑
a
π
(
a
∣
s
)
(
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
π
(
s
′
)
]
)
(1)
v_\pi(s)=\sum_{a}\pi(a|s) \left (\sum_{s^\prime,r} p(s^\prime,r|s,a)[r+\gamma v_\pi(s^\prime)] \right) \tag{1}
vπ(s)=a∑π(a∣s)⎝⎛s′,r∑p(s′,r∣s,a)[r+γvπ(s′)]⎠⎞(1)
其中,
π
(
a
∣
s
)
\pi(a|s)
π(a∣s)为待评估的策略,是已知的。奖励
r
∈
R
r\in \mathcal R
r∈R,折扣因子
γ
\gamma
γ,转移概率
p
(
s
′
,
r
∣
s
,
a
)
p(s^\prime, r|s,a)
p(s′,r∣s,a)也是已知的。因此方程(1)中唯一的未知数是状态价值函数
v
π
(
s
′
)
v_\pi(s^\prime)
vπ(s′),且有
∣
S
∣
|\mathcal S|
∣S∣个未知数和
∣
S
∣
|\mathcal S|
∣S∣个等式的线性方程组。理论上,该方程可以被直接解出来,但计算过程较复杂,因此我们采用迭代的方式来解决此问题,这里选择高斯-赛德尔迭代法:
v
k
+
1
(
s
)
=
∑
a
∈
A
π
(
a
∣
s
)
(
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
k
(
s
′
)
]
)
(2)
v_{k+1}(s)=\sum_{a\in \mathcal A}\pi(a|s) \left (\sum_{s^\prime,r} p(s^\prime,r|s,a)[r+\gamma v_k(s^\prime)] \right) \tag{2}
vk+1(s)=a∈A∑π(a∣s)⎝⎛s′,r∑p(s′,r∣s,a)[r+γvk(s′)]⎠⎞(2)
其中下标
k
k
k为迭代次数,给定方程一个初始解,例如
(
0
,
0
,
.
.
.
,
0
)
(0,0,...,0)
(0,0,...,0),通过迭代直到收敛到一个最优解。
以下为策略评估的伪代码:
\rule[0pt]{17.8cm}{0.2em}
输入待评估的策略
π
\pi
π,设置一个决定评估精度的
θ
>
0
\theta > 0
θ>0,初始化非终止状态
s
∈
S
+
s\in \mathcal S^+
s∈S+的价值
V
(
s
)
V(s)
V(s),而终止状态的价值
V
(
t
e
r
m
i
n
a
l
)
=
0
V(terminal)=0
V(terminal)=0
Loop:
\text{Loop:}
Loop:
Δ
←
0
\Delta \leftarrow 0
Δ←0
Loop for each
s
∈
S
:
\text{Loop for each }\ s\in S:
Loop for each s∈S:
v
←
V
(
s
)
v\leftarrow V(s)
v←V(s)
V
(
s
)
←
∑
a
π
(
a
∣
s
)
(
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
V
(
s
′
)
]
)
V(s) \leftarrow \sum_a \pi(a|s) \left (\sum_{s^\prime,r}p(s^\prime,r|s,a)[r+\gamma V(s^\prime)] \right)
V(s)←∑aπ(a∣s)(∑s′,rp(s′,r∣s,a)[r+γV(s′)])
Δ
←
max
(
Δ
,
∣
v
−
V
(
s
)
∣
)
\Delta \leftarrow \max(\Delta,|v-V(s)|)
Δ←max(Δ,∣v−V(s)∣)
Until
Δ
<
θ
\text{Until}\ \Delta < \theta
Until Δ<θ
\rule[0pt]{17.8cm}{0.2em}
\\[30pt]
- 例1 :考虑下面4×4的网格图
该MDP描述为:- S \mathcal S S:非终止状态集 S = { 1 , 2 , . . . , 14 } \mathcal S=\{1,2,...,14\} S={1,2,...,14}
- A \mathcal A A:对于 S \mathcal S S中的每个状态有4种可能的动作 A = { up,down,left,right } \mathcal A=\{\text{up,down,left,right}\} A={up,down,left,right}
- P \mathcal P P:当前状态 s s s选择任一动作 a a a后只有一个确定的下一个状态和收益,即 s ′ 和 r s^\prime和r s′和r唯一。因此我们有 p ( s ′ , r ∣ s , a ) = 1 p(s^\prime,r|s,a)=1 p(s′,r∣s,a)=1
- R \mathcal R R:到达终止状态之前,所有的动作收益 R = − 1 R=-1 R=−1
- γ \gamma γ: γ = 1 \gamma=1 γ=1,即无折扣
注意,每个动作会导致状态转移,但当动作会导致智能体移出网格时,状态保持不变。假定我们需要评估的策略为均等的随机策略,即:
π
(
up
∣
s
)
=
π
(
down
∣
s
)
=
π
(
left
∣
s
)
=
π
(
right
∣
s
)
=
0.25
,
∀
s
∈
S
\pi(\text{up}|s)=\pi(\text{down}|s)=\pi(\text{left}|s)=\pi(\text{right}|s)=0.25, \ \forall s\in \mathcal S
π(up∣s)=π(down∣s)=π(left∣s)=π(right∣s)=0.25, ∀s∈S
下图为迭代过程中14个状态的价值函数变化过程,我们可以看出当k=3时,已经达到了optimal policy。
根据公式(2),我们计算k=2时,状态4的价值函数:
v
2
(
4
)
=
0.25
×
(
−
1
+
0
)
+
0.25
×
(
−
1
−
1
)
+
0.25
×
(
−
1
−
1
)
+
0.25
×
(
−
1
−
1
)
=
−
1.75
v_2(4)=0.25 \times (-1+0) + 0.25 \times (-1-1) + 0.25 \times (-1-1) + 0.25 \times (-1-1)=-1.75
v2(4)=0.25×(−1+0)+0.25×(−1−1)+0.25×(−1−1)+0.25×(−1−1)=−1.75
保留两位有效数字便是-1.7。
2) 策略改进
计算一个给定策略下的价值函数的目的是为了找出更好的策略。假定对于给定的一个策略,我们已经计算出在该策略下所有状态的价值函数
v
π
(
s
)
,
s
∈
S
v_\pi(s), s\in S
vπ(s),s∈S。对于某个状态
s
s
s,我们想知道是否应该选择一个不同于给定的策略的动作
a
≠
π
(
s
)
a\neq \pi(s)
a=π(s)。一个很自然的方法是当已知当前策略下的价值函数时,在每个状态处采用贪婪策略对当前策略进行改进,即
π
l
+
1
(
s
)
=
arg max
a
q
π
l
(
s
,
a
)
=
arg max
a
(
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
π
(
s
′
)
]
)
(3)
\pi_{l+1}(s)=\argmax\limits_a q_{\pi_l}(s,a)=\argmax\limits_a \left (\sum_{s^\prime,r} p(s^\prime,r|s,a)[r+\gamma v_\pi(s^\prime)] \right) \tag{3}
πl+1(s)=aargmaxqπl(s,a)=aargmax⎝⎛s′,r∑p(s′,r∣s,a)[r+γvπ(s′)]⎠⎞(3)
假定在策略评估阶段我们迭代10次(k=10)来计算策略
π
0
\pi_0
π0下所有状态的价值函数,随后进行策略改进。下图为k=10时的价值函数以及对应的贪婪策略,我们以状态4和5为例来说明怎样做策略改进:
- 状态4:
π 1 ( 4 ) = arg max a { q π 0 ( 4 , up ) , q π 0 ( 4 , down ) , q π 0 ( 4 , left ) , q π 0 ( 4 , right ) } = arg max a { − 1 + 0 , − 1 − 8.4 , − 1 − 6.1 , − 1 − 7.7 } = { up } \begin{aligned} \pi_1(4) & = \argmax\limits_a \{ q_{\pi_0}(4,\text{up}),q_{\pi_0}(4,\text{down}) ,q_{\pi_0}(4,\text{left}),q_{\pi_0}(4,\text{right}) \} \\ & = \argmax\limits_a \{-1+0,-1-8.4,-1-6.1,-1-7.7\}\\ &=\{\text{up}\} \end{aligned} π1(4)=aargmax{qπ0(4,up),qπ0(4,down),qπ0(4,left),qπ0(4,right)}=aargmax{−1+0,−1−8.4,−1−6.1,−1−7.7}={up}
根据以上的计算可知在状态4的改进策略为:
π ( up ∣ 4 ) = 1 , π ( down ∣ 4 ) = π ( left ∣ 4 ) = π ( right ∣ 4 ) = 0 \pi(\text{up}|4)=1,\pi(\text{down}|4)=\pi(\text{left}|4)=\pi(\text{right}|4)=0 π(up∣4)=1,π(down∣4)=π(left∣4)=π(right∣4)=0 - 状态5:
π 1 ( 5 ) = arg max a { q π 0 ( 5 , up ) , q π 0 ( 5 , down ) , q π 0 ( 5 , left ) , q π 0 ( 5 , right ) } = arg max a { − 1 − 6.1 , − 1 − 8.4 , − 1 − 6.1 , − 1 − 8.4 } = { up,left } \begin{aligned} \pi_1(5) & = \argmax\limits_a \{ q_{\pi_0}(5,\text{up}),q_{\pi_0}(5,\text{down}) ,q_{\pi_0}(5,\text{left}),q_{\pi_0}(5,\text{right}) \} \\ & = \argmax\limits_a \{-1-6.1,-1-8.4,-1-6.1,-1-8.4\}\\ &=\{\text{up,left}\} \end{aligned} π1(5)=aargmax{qπ0(5,up),qπ0(5,down),qπ0(5,left),qπ0(5,right)}=aargmax{−1−6.1,−1−8.4,−1−6.1,−1−8.4}={up,left}
根据以上的计算可知在状态5的改进策略为:
π ( up ∣ 5 ) = π ( left ∣ 5 ) = 0.5 , π ( down ∣ 4 ) = π ( right ∣ 4 ) = 0 \pi(\text{up}|5)=\pi(\text{left}|5)=0.5,\pi(\text{down}|4)=\pi(\text{right}|4)=0 π(up∣5)=π(left∣5)=0.5,π(down∣4)=π(right∣4)=0
3) 策略迭代过程
策略迭代包括策略评估和策略改进两个步骤。在策略评估中,对于给定的一个策略,通过迭代法计算得到该策略下所有状态的价值函数;然后在策略改进中利用该价值函数和贪婪策略得到新的策略。如此循环下去,最终得到最优策略。下面为策略迭代的流程。
\rule[0pt]{17.8cm}{0.2em}
- 初始化
对 s ∈ S s\in S s∈S,任意设定 V ( s ) ∈ R V(s)\in \Bbb R V(s)∈R以及策略 π 0 \pi_0 π0,一个决定评估精度的 θ > 0 \theta >0 θ>0 - 策略评估
Loop: \text{Loop:} Loop:
Δ ← 0 \Delta \leftarrow 0 Δ←0
Loop for each s ∈ S : \text{Loop for each }\ s\in S: Loop for each s∈S:
v ← V ( s ) v \leftarrow V(s) v←V(s)
V ( s ) = ∑ s ′ , r p ( s ′ , r ∣ s , π ( s ) ) [ r + γ V ( s ′ ) ] V(s)=\sum_{s^\prime,r}p(s^\prime,r|s,\pi(s))[r+\gamma V(s^\prime)] V(s)=∑s′,rp(s′,r∣s,π(s))[r+γV(s′)]
Δ = max ( Δ , ∣ v − V ( s ) ∣ ) \Delta= \max(\Delta,|v-V(s)|) Δ=max(Δ,∣v−V(s)∣)
Until Δ < θ \text{Until}\ \Delta < \theta Until Δ<θ - 策略改进
p o l i c y - s t a b l e = t r u e policy\text{-}stable = true policy-stable=true
For each s ∈ S : \text{For each}\ s\in S: For each s∈S:
o l d - a c t i o n = π ( s ) old\text{-}action = \pi(s) old-action=π(s)
π ( s ) = arg max a ( ∑ s ′ , r p ( s ′ , r ∣ s , a ) + [ r + γ v ( s ′ ) ) \pi(s)=\argmax\limits_a \left (\sum_{s^\prime,r}p(s^\prime,r|s,a)+[r+\gamma v(s^\prime) \right) π(s)=aargmax(∑s′,rp(s′,r∣s,a)+[r+γv(s′))
如果 o l d - a c t i o n ≠ π ( s ) old\text{-}action \neq \pi(s) old-action=π(s),那么 p o l i c y - s t a b l e = f a l s e policy\text{-}stable = false policy-stable=false
如果 p o l i c y - s t a b l e policy\text{-}stable policy-stable为 t r u e true true,那么停止并 v ≈ v ∗ v\approx v^* v≈v∗,以及 π ≈ π ∗ \pi \approx \pi^* π≈π∗;否则跳转到步骤2
\rule[0pt]{17.8cm}{0.2em}
\\[30pt]
2. 价值迭代
从策略迭代的流程来看,进行策略改进之前要得到价值函数的收敛,而价值函数的收敛需要迭代多次,那么问题来了,在进行策略改进之前我们是否需要等到价值函数的收敛呢?回答是肯定的。如果我们在评估一次策略之后就进行策略改进,这种方法称为价值迭代(value iteration)。
\rule[0pt]{17.8cm}{0.2em}
初始化
对
s
∈
S
s\in S
s∈S,任意设定
V
(
s
)
∈
R
V(s)\in \Bbb R
V(s)∈R,一个决定估计精度的
θ
>
0
\theta >0
θ>0
Loop
:
\text{Loop}:
Loop:
Δ
←
0
\Delta \leftarrow 0
Δ←0
Loop for each
s
∈
S
:
\text{Loop for each}\ s\in S:
Loop for each s∈S:
v
←
V
(
s
)
v \leftarrow V(s)
v←V(s)
V
(
s
)
←
max
a
(
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
V
(
s
′
)
]
)
V(s) \leftarrow \max\limits_a \left(\sum_{s^\prime,r}p(s^\prime,r|s,a)[r+\gamma V(s^\prime)] \right)
V(s)←amax(∑s′,rp(s′,r∣s,a)[r+γV(s′)])
Δ
=
max
(
Δ
,
∣
v
−
V
(
s
)
∣
)
\Delta= \max(\Delta,|v-V(s)|)
Δ=max(Δ,∣v−V(s)∣)
Until
Δ
←
θ
\text{Until}\ \Delta \leftarrow \theta
Until Δ←θ
输出
π
(
s
)
=
arg max
a
(
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
V
(
s
′
)
]
)
\pi(s)=\argmax\limits_a \left(\sum_{s^\prime,r}p(s^\prime,r|s,a)[r+\gamma V(s^\prime)] \right)
π(s)=aargmax(∑s′,rp(s′,r∣s,a)[r+γV(s′)])
\rule[0pt]{17.8cm}{0.2em}
\\[30pt]
3. 寻宝问题
下面的代码是解决以下寻宝问题,其中红色圆圈为智能体,黑色方框为陷阱,箱子为宝藏。
策略迭代和价值迭代的python代码
参考资料:
(1)Richard S. Sutton and Andrew G. Barto著, 俞凯译《强化学习》第二版
(2)张斯俊. 欢迎大家入坑Reinforcment Learning【知乎】
(3)郭宪, 方勇纯. 《深入浅出强化学习:原理入门》