强化学习理论——动态规划理论
之前的文章:
1、引入
在上一篇文章中,我们描述了基于MDP框架的下的强化学习过程以及策略评估过程的推导,下面我们主要来介绍基于动态规划过程的强化学习过程。
1.1、动态规划理论的引入
在我们之前介绍的MDP过程中,我们使用MDP=(S,A,P,r,γ)来表示一个马尔科夫决策过程,进一步根据转移概率P的是否已知,我们可以将MDP过程分成基于动态规划的学习方法和基于无模型的强化学习方法。整个分类可以用下图进行表示:
回顾一下在上一篇文章中提到的关于MDP中的最优的状态—值函数和状态—行为值函数,其贝尔曼最优化方程为:
V
∗
(
s
)
=
m
a
x
a
R
s
a
+
γ
∑
s
′
∈
S
P
s
s
a
V
∗
(
s
′
)
V^*(s)=max_{a}R_s^a+γ∑_{s'∈S}P_{ss}^aV^*(s')
V∗(s)=maxaRsa+γs′∈S∑PssaV∗(s′)
q
∗
(
s
,
a
)
=
R
s
a
+
γ
∑
s
′
∈
S
P
s
s
a
m
a
x
a
q
∗
(
s
′
,
a
′
)
q^*(s,a)=R_s^a+γ∑_{s'∈S}P_{ss}^amax_{a}q^*(s',a')
q∗(s,a)=Rsa+γs′∈S∑Pssamaxaq∗(s′,a′)
如果对于动态规划有基本的了解,则很容易从这两个最优化的方程中看出,这两个方程明显满足动态规划的基本条件。首先,在最优化方程中, R s a , γ , P s s a R_s^a,γ,P_{ss}^a Rsa,γ,Pssa都是已知的,我们动态规划计算的无非就是 V ∗ ( s ) V^*(s) V∗(s)和 V ∗ ( s ′ ) V^*(s') V∗(s′),显然,这是满足递推公式, q ∗ ( s , a ) q^*(s,a) q∗(s,a)同理。
1.2 高斯—赛德尔算法
在介绍高斯—赛德尔算法之前,我们先来介绍迭代求解的过程。
首先,我们假设一般的线性方程组的一般形式:
A
X
=
b
AX=b
AX=b
我们的目标是给定一个初始的
X
0
X_0
X0,将其放入到迭代公式中,计算之后得到
X
1
X_1
X1,在将
X
1
X_1
X1带入到迭代公式中,循环进行直到X收敛。
进一步,我们该解法的核心在于如何设计迭代公式,其中最基本的迭代方法为雅克比迭代法,在雅克比迭代方式中,假设系数矩阵A的对角元素
a
i
i
≠
0
a_{ii}≠0
aii=0。从线性方程中分离出
X
i
X_i
Xi,依次构造出迭代方程为:
{
X
1
=
1
a
11
(
−
a
12
X
2
−
a
13
X
3
−
,
.
.
.
−
a
1
n
X
n
+
b
1
)
X
2
=
1
a
22
(
−
a
21
X
1
−
a
23
X
3
−
,
.
.
.
−
a
1
n
X
n
+
b
2
)
.
.
.
.
X
n
=
1
a
n
n
(
−
a
n
1
X
1
−
a
n
2
X
2
−
,
.
.
.
−
a
n
,
n
−
1
X
n
−
1
+
b
n
)
\begin{cases} X_1=\frac{1}{a_{11}}(-a_{12}X_2-a_{13}X_3-,...-a_{1n}X_n+b_1)\\ X_2=\frac{1}{a_{22}}(-a_{21}X_1-a_{23}X_3-,...-a_{1n}X_n+b_2)\\ \frac{}{}....\\ X_n=\frac{1}{a_{nn}}(-a_{n1}X_1-a_{n2}X_2-,...-a_{n,n-1}X_{n-1}+b_n) \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧X1=a111(−a12X2−a13X3−,...−a1nXn+b1)X2=a221(−a21X1−a23X3−,...−a1nXn+b2)....Xn=ann1(−an1X1−an2X2−,...−an,n−1Xn−1+bn)
将上述的过程整理成矩阵的形式有:
X
=
−
D
−
1
(
L
+
U
)
X
+
D
−
1
b
X=-D^{-1}(L+U)X+D^{-1}b
X=−D−1(L+U)X+D−1b
其中
D
=
[
a
11
a
22
.
.
.
a
n
n
]
D= \left[ \begin{matrix} a_{11} & \\ & a_{22} & \\ &&. \\ & & & . &\\ &&&&.\\ &&&&&a_{nn} \end{matrix} \right]
D=⎣⎢⎢⎢⎢⎢⎢⎡a11a22...ann⎦⎥⎥⎥⎥⎥⎥⎤
L
=
[
0
a
21
0
a
31
a
32
0
.
.
.
.
.
.
.
.
a
n
1
a
n
2
a
n
3
.
.
0
]
L= \left[ \begin{matrix} 0 & \\ a_{21}& 0& \\ a_{31}&a_{32}&0 \\ .&. & . & . &\\ .&.&.&&.\\ a_{n1}&a_{n2}&a_{n3}&.&.&0 \end{matrix} \right]
L=⎣⎢⎢⎢⎢⎢⎢⎡0a21a31..an10a32..an20..an3....0⎦⎥⎥⎥⎥⎥⎥⎤
U
=
[
0
a
12
a
13
.
.
.
a
1
n
0
a
23
.
.
.
a
2
n
.
.
.
.
.
.
.
.
.
.
.
.
0
]
U= \left[ \begin{matrix} 0&a_{12}&a_{13}&...&&a_{1n} \\ & 0&a_{23}&...&&a_{2n} \\ &. . . &...&...&&...\\ &&&&&0 \end{matrix} \right]
U=⎣⎢⎢⎡0a120...a13a23............a1na2n...0⎦⎥⎥⎤
记
B
=
−
D
−
1
(
L
+
U
)
,
d
=
D
−
1
b
B=-D^{-1}(L+U),d=D^{-1}b
B=−D−1(L+U),d=D−1b,则迭代公式为:
X
=
B
X
+
d
X=BX+d
X=BX+d
在第k次迭代的时候,其基本的计算过程为:
{
X
1
k
+
1
=
1
a
11
(
−
a
12
X
2
k
−
a
13
X
3
k
−
,
.
.
.
−
a
1
n
X
n
k
+
b
1
)
X
2
k
+
1
=
1
a
22
(
−
a
21
X
1
k
−
a
23
X
3
k
−
,
.
.
.
−
a
1
n
X
n
k
+
b
2
)
.
.
.
.
X
n
k
+
1
=
1
a
n
n
(
−
a
n
1
X
1
k
−
a
n
2
X
2
k
−
,
.
.
.
−
a
n
,
n
−
1
X
n
−
1
k
+
b
n
)
\begin{cases} X_1^{k+1}=\frac{1}{a_{11}}(-a_{12}X_2^k-a_{13}X_3^k-,...-a_{1n}X_n^k+b_1)\\ X_2^{k+1}=\frac{1}{a_{22}}(-a_{21}X_1^k-a_{23}X_3^k-,...-a_{1n}X_n^k+b_2)\\ \frac{}{}....\\ X_n^{k+1}=\frac{1}{a_{nn}}(-a_{n1}X_1^k-a_{n2}X_2^k-,...-a_{n,n-1}X_{n-1}^k+b_n) \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧X1k+1=a111(−a12X2k−a13X3k−,...−a1nXnk+b1)X2k+1=a221(−a21X1k−a23X3k−,...−a1nXnk+b2)....Xnk+1=ann1(−an1X1k−an2X2k−,...−an,n−1Xn−1k+bn)
进一步,在计算k+1时刻的 X i k + 1 X_i^{k+1} Xik+1的时候能够利用 X i − 1 k + 1 , X i − 2 k + 1 , X i − 3 k + 1 , . . X_{i-1}^{k+1},X_{i-2}^{k+1},X_{i-3}^{k+1},.. Xi−1k+1,Xi−2k+1,Xi−3k+1,..等信息,提出高斯—赛德尔算法,其基本形式如下:
{
X
1
k
+
1
=
1
a
11
(
−
a
12
X
2
k
−
a
13
X
3
k
−
,
.
.
.
−
a
1
n
X
n
k
+
b
1
)
X
2
k
+
1
=
1
a
22
(
−
a
21
X
1
k
+
1
−
a
23
X
3
k
−
,
.
.
.
−
a
1
n
X
n
k
+
b
2
)
.
.
.
.
X
n
k
+
1
=
1
a
n
n
(
−
a
n
1
X
1
k
+
1
−
a
n
2
X
2
k
+
1
−
,
.
.
.
−
a
n
,
n
−
1
X
n
−
1
k
+
b
n
)
\begin{cases} X_1^{k+1}=\frac{1}{a_{11}}(-a_{12}X_2^k-a_{13}X_3^k-,...-a_{1n}X_n^k+b_1)\\ X_2^{k+1}=\frac{1}{a_{22}}(-a_{21}X_1^{k+1}-a_{23}X_3^k-,...-a_{1n}X_n^k+b_2)\\ \frac{}{}....\\ X_n^{k+1}=\frac{1}{a_{nn}}(-a_{n1}X_1^{k+1}-a_{n2}X_2^{k+1}-,...-a_{n,n-1}X_{n-1}^k+b_n) \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧X1k+1=a111(−a12X2k−a13X3k−,...−a1nXnk+b1)X2k+1=a221(−a21X1k+1−a23X3k−,...−a1nXnk+b2)....Xnk+1=ann1(−an1X1k+1−an2X2k+1−,...−an,n−1Xn−1k+bn)
用矩阵可以表示为:
(
D
+
L
)
X
k
+
1
=
−
U
X
k
+
b
(D+L)X^{k+1}=-UX^k+b
(D+L)Xk+1=−UXk+b
写成迭代方式的形式有:
X
k
+
1
=
G
X
k
+
d
X^{k+1}=GX^k+d
Xk+1=GXk+d
G
=
−
(
D
+
L
)
−
1
U
,
d
=
(
D
+
L
)
−
1
b
G=-(D+L)^{-1}U,d=(D+L)^{-1}b
G=−(D+L)−1U,d=(D+L)−1b
2、基于高斯—赛德尔的动态规划求解
在动态规划的策略更新下,对于MDP的求解包括如下两个过程。
- 策略评估
- 策略迭代
下面,我们来逐步的分析这两个过程。
2.1 策略评估
在进行这个过程之前,我们需要首先明确一下策略评估的概念,对象,以及目标。首先,策略评估的概念是指在给定某一个策略π之下,计算该策略所产生的累积回报值。策略评估的对象是我们给定的策略,其目标是在给定策略π之下,计算策略π所产生的值函数的结果。
在明确了策略评估的作用之后,我们接下来就是求解的过程了,首先,我们回顾状态—值函数:
V k + 1 ( s ) = ∑ a ∈ A ( R s a + γ ∑ s ′ ∈ S P s s a V k ( s ′ ) ) V_{k+1}(s)=∑_{a∈A}(R_s^a+γ∑_{s'∈S}P_{ss}^aV_k(s')) Vk+1(s)=a∈A∑(Rsa+γs′∈S∑PssaVk(s′))
在回顾了MDP中的最优化方程,理解了高斯—赛德尔算法之后,我们下面使用高斯—赛德尔算法对最优化方程进行求解过程。
首先,我们给出算法描述:
- 输入:需要评估的策略π,状态转移概率 P s s a P_{ss}^a Pssa,回报函数 R s a R_s^a Rsa,折扣因子γ
- 初始化状态—值函数:V(s)=0
- 开始迭代
- 对于每一个状态s,采用高斯—赛德尔算法进行迭代
- V k + 1 ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R s a + γ ∑ s ′ ∈ S P s s a V k ( s ′ ) ) V_{k+1}(s)=∑_{a∈A}π(a|s)(R_s^a+γ∑_{s'∈S}P_{ss}^aV_k(s')) Vk+1(s)=a∈A∑π(a∣s)(Rsa+γs′∈S∑PssaVk(s′))
- 当 V k + 1 = V k V_{k+1}=V_k Vk+1=Vk的时候,结束迭代。
- 输出 V ( s ) V(s) V(s)
为了便于理解,这里我们举一个关于策略评估的例子,下面给出一个网格世界和可以采用的动作:
根据上图,我们可以知道状态空间S包括{
S
1
,
S
2
,
.
.
.
,
S
1
4
S_1,S_2,...,S_14
S1,S2,...,S14},动作空间包括A={东,南,西,北},假设立即回报函数r=-1,折扣因子γ=1,假设我们接下来要评估的策略π的动作分布如下所示:
π
(
东
∣
⋅
)
=
0.25
,
π
(
西
∣
⋅
)
=
0.25
,
π
(
南
∣
⋅
)
=
0.25
,
π
(
北
∣
⋅
)
=
0.25
π(东|·)=0.25,π(西|·)=0.25,π(南|·)=0.25,π(北|·)=0.25
π(东∣⋅)=0.25,π(西∣⋅)=0.25,π(南∣⋅)=0.25,π(北∣⋅)=0.25
接下来,我们来计算k=1到k=2的计算过程,首先我们能够得到初始的回报,和第一轮迭代的状态值函数。
下面,我们来计算第一个状态的回报情况:
V
2
(
1
)
=
0.25
∗
(
−
1
+
1
∗
(
−
1.0
)
)
+
0.25
∗
(
−
1
+
1
∗
(
−
1
)
)
+
0.25
∗
(
−
1
+
1
∗
(
−
1
)
)
+
0.25
∗
(
−
1
+
1
∗
(
0
)
)
=
0.25
∗
(
−
7
)
=
−
1.75
V_2(1)=0.25*(-1+1*(-1.0))+0.25 *(-1+1*(-1))+0.25*(-1+1*(-1))+0.25 *(-1+1*(0))=\\ 0.25 *(-7)=-1.75
V2(1)=0.25∗(−1+1∗(−1.0))+0.25∗(−1+1∗(−1))+0.25∗(−1+1∗(−1))+0.25∗(−1+1∗(0))=0.25∗(−7)=−1.75
我们采用值函数对策略进行评估,而计算值函数的目的也是为了寻找最优策略。所以,下一步,我们要做的就是根据计算出来的值函数来寻找最优策略,另外,这里需要注意的是,我们求的是最优策略,那么对于不是最优策略的值函数,我不需要进行冗余的计算,换句话来说,为了求最大的累积回报对应的策略π,我们这里采用贪心策略来减少时空复杂度,也就是 π k + 1 ( s ) ∈ a r g m a x a q π ( s , a ) π_{k+1}(s)∈argmax_{a}q_{π}(s,a) πk+1(s)∈argmaxaqπ(s,a)
2.2 策略迭代
首先,我们来回顾一下状态—动作值函数的计算形式:
q
π
(
s
,
a
)
=
R
s
a
+
γ
∑
s
′
∈
S
P
s
s
a
V
π
(
s
′
)
q_{π}(s,a)=R_s^a+γ∑_{s'∈S}P_{ss}^aV_π(s')
qπ(s,a)=Rsa+γs′∈S∑PssaVπ(s′)
在确定了状态值函数的计算方法和贪心策略对于策略的选择。下一步,就是对于策略的迭代过程,这里我们首先给出一个更新的例子:
假设当前进行第K=10轮的迭代过程,并且已经计算出来了各个状态的状态值函数。下一步,我们根据当前的状态值函数的结果来选择最大的状态值函数来更新策略
π
π
π。以状态1为例:
π 1 ( 1 ) = a r g m a x a { q ( 1 , 东 ) , q ( 1 , 南 ) , q ( 1 , 西 ) , q ( 1 , 北 ) } = a r g m a x a { − 1 − 8.4 , − 1 − 7.7 , − 1 + 0 , − 1 − 6.1 } = { 西 } π_1(1)=argmax_{a}\{q(1,东),q(1,南),q(1,西),q(1,北)\}=\\ argmax_{a}\{-1-8.4,-1-7.7,-1+0,-1-6.1\}=\{西\} π1(1)=argmaxa{q(1,东),q(1,南),q(1,西),q(1,北)}=argmaxa{−1−8.4,−1−7.7,−1+0,−1−6.1}={西}
在确定了策略评估和改良算法之后,下一步我们来描述策略迭代算法。
- 输入:状态转移概率 P s s a P_{ss}^a Pssa,回报函数 R s a R_s^a Rsa,折扣因子γ,初始化状态—值函数V(s)=0,初始化策略 π 0 π_{0} π0
- 开始迭代
- 对策略计算其评估值 V π k V_{π_k} Vπk
- 采用贪心策略选择最优
π k + 1 ( s ) ∈ a r g m a x a π_{k+1}(s)∈argmax_{a} πk+1(s)∈argmaxa - 当策略 π l + 1 = π l π_{l+1}=π_l πl+1=πl,即策略收敛的时候迭代停止。
- 输出: π ∗ = π l π^*=π_l π∗=πl
2.3. 总结
在策略评估下,给定某个具体的策略,通过值函数迭代的算法不断的计算该策略下的每个状态的值函数,直到各个状态值函数收敛。然后根据贪心策略和计算出来的值函数,对策略进行更新,知道策略收敛。
3 参考
- BiliBili—强化学习纲要
- 深入浅出的强化学习