【3】强化学习之动态规划(策略迭代和价值迭代)

目录

  • 1. 策略迭代
    • 1) 策略评估
    • 2) 策略改进
    • 3) 策略迭代过程
  • 2. 价值迭代
  • 3. 寻宝问题

给定一个马尔科夫决策过程(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 sS的价值函数与后继状态 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π(as)s,rp(s,rs,a)[r+γvπ(s)](1)
其中, π ( a ∣ s ) \pi(a|s) π(as)为待评估的策略,是已知的。奖励 r ∈ R r\in \mathcal R rR,折扣因子 γ \gamma γ,转移概率 p ( s ′ , r ∣ s , a ) p(s^\prime, r|s,a) p(s,rs,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)=aAπ(as)s,rp(s,rs,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^+ sS+的价值 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  sS:
     v ← V ( s ) v\leftarrow V(s) vV(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π(as)(s,rp(s,rs,a)[r+γV(s)])
     Δ ← max ⁡ ( Δ , ∣ v − V ( s ) ∣ ) \Delta \leftarrow \max(\Delta,|v-V(s)|) Δmax(Δ,vV(s))
Until  Δ < θ \text{Until}\ \Delta < \theta Until Δ<θ

\rule[0pt]{17.8cm}{0.2em}

\\[30pt]

  • 例1 :考虑下面4×4的网格图
    【3】强化学习之动态规划(策略迭代和价值迭代)_第1张图片
    该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 sr唯一。因此我们有 p ( s ′ , r ∣ s , a ) = 1 p(s^\prime,r|s,a)=1 p(s,rs,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 π(ups)=π(downs)=π(lefts)=π(rights)=0.25, sS
下图为迭代过程中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×(11)+0.25×(11)+0.25×(11)=1.75
保留两位有效数字便是-1.7。
【3】强化学习之动态规划(策略迭代和价值迭代)_第2张图片

2) 策略改进

计算一个给定策略下的价值函数的目的是为了找出更好的策略。假定对于给定的一个策略,我们已经计算出在该策略下所有状态的价值函数 v π ( s ) , s ∈ S v_\pi(s), s\in S vπ(s),sS。对于某个状态 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)=aargmaxs,rp(s,rs,a)[r+γvπ(s)](3)
假定在策略评估阶段我们迭代10次(k=10)来计算策略 π 0 \pi_0 π0下所有状态的价值函数,随后进行策略改进。下图为k=10时的价值函数以及对应的贪婪策略,我们以状态4和5为例来说明怎样做策略改进:
【3】强化学习之动态规划(策略迭代和价值迭代)_第3张图片

  • 状态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,18.4,16.1,17.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 π(up4)=1π(down4)=π(left4)=π(right4)=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{16.1,18.4,16.1,18.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 π(up5)=π(left5)=0.5π(down4)=π(right4)=0

3) 策略迭代过程

策略迭代包括策略评估和策略改进两个步骤。在策略评估中,对于给定的一个策略,通过迭代法计算得到该策略下所有状态的价值函数;然后在策略改进中利用该价值函数和贪婪策略得到新的策略。如此循环下去,最终得到最优策略。下面为策略迭代的流程。

\rule[0pt]{17.8cm}{0.2em}

  1. 初始化
    s ∈ S s\in S sS,任意设定 V ( s ) ∈ R V(s)\in \Bbb R V(s)R以及策略 π 0 \pi_0 π0,一个决定评估精度的 θ > 0 \theta >0 θ>0
  2. 策略评估
    Loop: \text{Loop:} Loop:
       Δ ← 0 \Delta \leftarrow 0 Δ0
       Loop for each   s ∈ S : \text{Loop for each }\ s\in S: Loop for each  sS:
         v ← V ( s ) v \leftarrow V(s) vV(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,rs,π(s))[r+γV(s)]
         Δ = max ⁡ ( Δ , ∣ v − V ( s ) ∣ ) \Delta= \max(\Delta,|v-V(s)|) Δ=max(Δ,vV(s))
    Until  Δ < θ \text{Until}\ \Delta < \theta Until Δ<θ
  3. 策略改进
    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 sS:
       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,rs,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^* vv,以及 π ≈ π ∗ \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 sS,任意设定 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 sS:
     v ← V ( s ) v \leftarrow V(s) vV(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,rs,a)[r+γV(s)])
     Δ = max ⁡ ( Δ , ∣ v − V ( s ) ∣ ) \Delta= \max(\Delta,|v-V(s)|) Δ=max(Δ,vV(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,rs,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)郭宪, 方勇纯. 《深入浅出强化学习:原理入门》

你可能感兴趣的:(强化学习,机器学习)