【强化学习】值迭代与策略迭代
值迭代 | Value Iteration
值迭代(Value Iteration)直接利用递归性,通过不断迭代逼近最优状态值函数
v
∗
(
s
)
v^{*}(s)
v∗(s)。整个算法可以概括为:
v
(
k
+
1
)
=
f
(
v
(
k
)
)
=
max
π
(
r
π
+
γ
P
π
v
(
k
)
)
,
k
=
1
,
2
,
3
…
v^{(k+1)}=f\left(v^{(k)}\right)=\max _\pi\left(r_\pi+\gamma P_\pi v^{(k)}\right), \quad k=1,2,3 \ldots
v(k+1)=f(v(k))=πmax(rπ+γPπv(k)),k=1,2,3…
因此这个算法理论上需要包含两个主要步骤:
-
策略更新(PU): π ( k + 1 ) = arg max π ( r π + γ P π v ( k ) ) \pi^{(k+1)} = \arg\max _\pi\left(r_\pi+\gamma P_\pi v^{(k)}\right) π(k+1)=argmaxπ(rπ+γPπv(k))
现在我求出了 π ( k + 1 ) \pi^{(k+1)} π(k+1),我就可以再代入下面的式子,再去求解 v ( k + 1 ) v^{(k+1)} v(k+1),他们有一个前后顺序!
-
状态更新(VU): v ( k + 1 ) = r π ( k + 1 ) + γ P π ( k + 1 ) v ( k ) v^{(k+1)}=r_{\pi^{(k+1)}}+\gamma P_{\pi^{(k+1)}} v^{(k)} v(k+1)=rπ(k+1)+γPπ(k+1)v(k)
注意!此处的 v k v_k vk并不是state value!因为step 2这个方程不是贝尔曼方程,是一个迭代式。对比一下贝尔曼方程的matrix-vector形式,你会看见方程左右应该是同一个 v k v_k vk
而策略 π 更新的时候由于使用了贪心选择,这两个步骤可以合并简化,直接使用最优的动作价值去更新状态价值:
v
(
k
+
1
)
(
s
)
=
max
a
q
(
k
+
1
)
(
s
,
a
)
v^{(k+1)}(s) = \max_a q^{(k+1)}(s,a)
v(k+1)(s)=amaxq(k+1)(s,a)
值得一提的是,贪心更新策略 π 也带来了一个有趣的现象:越靠近目标区域的状态越先变好。直观上就是因为 π 依赖于其他状态,而当其他状态都不好的时候无从更新,只有接近目标区域的状态有明确的优化方向。
具体步骤
-
初始化值函数:设定初始值 v ( 0 ) ( s ) v^{(0)}(s) v(0)(s),通常初始化为全零或任意常数。
-
迭代更新值函数: 对于每个状态 s,根据贝尔曼最优公式更新
v ( k + 1 ) ( s ) = max a [ ∑ r p ( r ∣ s , a ) r + γ ∑ s ′ p ( s ′ ∣ s , a ) v ( k ) ( s ′ ) ] v^{(k+1)}(s) = \max_a \left[ \sum_r p(r \mid s, a) r + \gamma \sum_{s'} p(s' \mid s, a) v^{(k)}(s') \right] v(k+1)(s)=amax[r∑p(r∣s,a)r+γs′∑p(s′∣s,a)v(k)(s′)] -
判断收敛: 检查值函数更新是否足够小(例如 ∥ v ( k + 1 ) − v ( k ) ∥ ∞ < ϵ \lVert v^{(k+1)} - v^{(k)} \rVert_\infty < \epsilon ∥v(k+1)−v(k)∥∞<ϵ),若收敛则停止迭代并输出 v(k+1)。
-
推导策略: 一旦得到收敛的值函数 v∗(s),通过以下方式获得对应的最优策略 π∗:
π
∗
(
s
)
=
arg
max
a
[
∑
r
p
(
r
∣
s
,
a
)
r
+
γ
∑
s
′
p
(
s
′
∣
s
,
a
)
v
∗
(
s
′
)
]
\pi^*(s) = \arg\max_a \left[ \sum_r p(r \mid s, a) r + \gamma \sum_{s'} p(s' \mid s, a) v_*(s') \right]
π∗(s)=argamax[r∑p(r∣s,a)r+γs′∑p(s′∣s,a)v∗(s′)]
假设我们有一个3 x 3的棋盘:
- 有一个单元格是超级玛丽,每回合可以往上、下、左、右四个方向移动
- 有一个单元格是宝藏,超级玛丽找到宝藏则游戏结束,目标是让超级玛丽以最快的速度找到宝藏
- 假设游戏开始时,宝藏的位置一定是(1, 2)

这个一个标准的马尔科夫决策过程(MDP):
- 状态空间State:超级玛丽当前的坐标
- 决策空间Action: 上、下、左、右四个动作
- Action对State的影响和回报 P(State’, Reward | State, Action):本文认为该关系是已知的
- 超级玛丽每移动一步,reward = -1
- 超级玛丽得到宝箱,reward = 0并且游戏结束
结合上图可以非常简单的理解价值迭代:
-
初始化:所有state的价值V(s) = 0
-
第一轮迭代:对于每个state,逐一尝试上、下、左、右四个Action
- 记录Action带来的Reward、以及新状态 V(s’)
- 选择最优的Action,更新V(s) = Reward + V(s’) = -1 + 0
- 第一轮结束后,所有状态都有V(s) = -1,即从当前位置出发走一步获得Reward=-1
-
第二轮迭代:对于每个state,逐一尝试上、下、左、右四个Action
- 记录Action带来的Reward、以及新状态 V(s’)
- 选择最优的Action,更新V(s) = Reward + V(s’)
- 对于宝箱周围的State,最优的Action是一步到达宝箱,V(s) = Reward + V(s’) = -1 + 0
- 对于其他State,所有的Action都是一样的,V(s) = Reward + V(s’) = -1 + -1
- 第二轮结束后,宝箱周围的State的价值保持不变 V(s) = -1,其他State的价值 V(s) = -2
-
第三轮迭代:对于每个state,逐一尝试上、下、左、右四个Action
- 记录Action带来的Reward、以及新状态 V(s’)
- 选择最优的Action,更新V(s) = Reward + V(s’)
- 对于宝箱周围的State,最优的Action是一步到达宝箱,V(s) = Reward + V(s’) = -1 + 0
- 对于宝箱两步距离的State,最优的Action是先一步到达宝箱周边的State,V(s) = Reward + V(s’) = -1 + -1
- 对于宝箱三步距离的State,所有Action都是一样的,V(s) = Reward + V(s’) = -1 + -2
-
第四轮迭代:对于每个state,逐一尝试上、下、左、右四个Action
-
记录Action带来的Reward、以及新状态 V(s’)
-
选择最优的Action,更新V(s) = Reward + V(s’)
- 对于宝箱周围的State,最优的Action是一步到达宝箱,V(s) = Reward + V(s’) = -1 + 0
- 对于宝箱两步距离的State,最优的Action是先一步到达宝箱周边的State,V(s) = Reward + V(s’) = -1 + -1
- 对于宝箱三步距离的State,最优的Action是所有Action都是一样的,V(s) = Reward + V(s’) = -1 + -2
-
在第四轮迭代中,所有V(s)更新前后都没有任何变化,价值迭代已经找到了最优策略。、

-
策略迭代 | Policy Iteration
策略迭代是另一种求解 BOE 的方法,核心思想是交替优化策略和状态值函数,直到收敛到最优策略 π∗。
与值迭代不同的是,策略迭代先初始化一个随机策略,再交替进行以下两个主要步骤:
- 策略评估(PE): v π ( k ) = r π ( k ) + γ P π ( k ) v π ( k ) v_{\pi^{(k)}}=r_{\pi^{(k)}}+\gamma P_{\pi^{(k)}} v_{\pi^{(k)}} vπ(k)=rπ(k)+γPπ(k)vπ(k)
- 策略改进(PI): π ( k + 1 ) = arg max π ( r π + γ P π v π ( k ) ) \pi^{(k+1)} = \arg\max _\pi\left(r_\pi+\gamma P_\pi v_{\pi^{(k)}}\right) π(k+1)=argmaxπ(rπ+γPπvπ(k))
这个算法按照如下顺序
π 0 → P E v π 0 → P I π 1 → P E v π 1 → P I π 2 → P E v π 2 → P I … {\pi_0}\xrightarrow{PE}{v_{\pi_0}}\xrightarrow{PI}\pi_1\xrightarrow{PE}{v_{\pi_1}}\xrightarrow{PI}\pi_2\xrightarrow{PE}v_{\pi_2}\xrightarrow{PI}\ldots π0PEvπ0PIπ1PEvπ1PIπ2PEvπ2PI…
PE=policy evaluation, PI=policy improvement
-
初始化策略:随机初始化一个初始策略 π ( 0 ) \pi^{(0)} π(0)。
-
策略评估:在当前策略 π ( k ) \pi^{(k)} π(k)下,通过求解以下线性方程组来获得状态
值函数 v π ( k ) ( s ) : v_{\pi^{(k)}}(s): vπ(k)(s):
v π ( k ) ( s ) = ∑ a π ( k ) ( a ∣ s ) [ ∑ r p ( r ∣ s , a ) r + γ ∑ s ′ p ( s ′ ∣ s , a ) v π ( k ) ( s ′ ) ] v_{\pi^{(k)}}(s)=\sum_a\pi^{(k)}(a\mid s)\left[\sum_rp(r\mid s,a)r+\gamma\sum_{s^{\prime}}p(s^{\prime}\mid s,a)v_{\pi^{(k)}}(s^{\prime})\right] vπ(k)(s)=a∑π(k)(a∣s)[r∑p(r∣s,a)r+γs′∑p(s′∣s,a)vπ(k)(s′)]
∘ \circ ∘当状态空间较小时,可以直接解线性方程组,
∘
\circ
∘对于较大的问题,可以使用 Bootstrap 迭代逼近的方法。这个算法过程如下:首先把所有的
V
0
(
s
)
V_0(s)
V0(s)都初始化成0,然后根据V0计算V1,…,一直继续下去直到收敛。根据
V
k
(
s
)
V_k(s)
Vk(s)计算
V
k
+
1
(
s
)
V_{k+1}(s)
Vk+1(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 V_k(s')]
Vk+1(s)=a∑π(a∣s)s′,r∑p(s′,r∣s,a)[r+γVk(s′)]
我们可以看一下收敛的时候,Vk+1=Vk,Δ=0,那么上面的迭代公式正好就是贝尔曼方程!有了上面的迭代算法,任何给定的策略ππ,我们都可以计算出它的价值函数。
- 策略改进:基于更新后的值函数 v π ( k ) v_{\pi^{(k)}} vπ(k),贪心更新策略:
π ( k + 1 ) ( s ) = arg max a [ ∑ r p ( r ∣ s , a ) r + γ ∑ s ′ p ( s ′ ∣ s , a ) v π ( k ) ( s ′ ) ] \pi^{(k+1)}(s)=\arg\max_a\left[\sum_rp(r\mid s,a)r+\gamma\sum_{s'}p(s'\mid s,a)v_{\pi^{(k)}}(s')\right] π(k+1)(s)=argamax[r∑p(r∣s,a)r+γs′∑p(s′∣s,a)vπ(k)(s′)]
- 检查收敛:如果策略不再变化,即
π
(
k
+
1
)
=
π
(
k
)
\pi^{(k+1)}=\pi^{(k)}
π(k+1)=π(k),则算法结束,
π
(
k
)
\pi^{(k)}
π(k)
即为最优策略;否则返回步骤 2。
策略提升定理
假设
π
\pi
π和
π
′
\pi^\prime
π′是两个确定的策略(一个状态s下只有一个行为a的概率是1,其余是0),如果对于所有的
s
∈
S
都有:
s\in\mathcal{S}_\text{都有:}
s∈S都有:
q π ( s , π ′ ( s ) ) ≥ v π ( s ) q_\pi(s,\pi^{\prime}(s))\geq v_\pi(s) qπ(s,π′(s))≥vπ(s)
那么策略 π ′ \pi^{\prime} π′比 π \pi π要“好”,也就是对于所有的 s ∈ S : s\in\mathcal{S}: s∈S:
v π ′ ( s ) ≥ v π ( s ) v_{\pi^{\prime}}(s)\geq v_\pi(s) vπ′(s)≥vπ(s)
并且如果第一个不等式是严格大于,那么第二个不等式也是严格大于,也就是
π
′
\pi^{\prime}
π′一定比
π
\pi
π更好(而不
是一样)。
如果这个定理成立,那就证明了我们前面结论,因为我们新的策略在s的时候采取的满足
q
π
(
s
,
a
)
≥
v
π
(
s
)
q_\pi(s,a)\geq v_\pi(s)
qπ(s,a)≥vπ(s),而其它的状态s’都是一样的,因此新的策略会更好。当然上面的新策略是随便选择一个满足条件的行为a,但更好的办法是从所有可能的a里选择
q
π
(
s
,
a
)
q_\pi(s,a)
qπ(s,a)最大的那个a,此外我们可以改变所有s的策略,而不是一个s,这个改进版本就是我们最终用到的策略提升算法。如果所有的状态,当前的a已经是
q
π
(
s
,
a
)
q_\pi(s,a)
qπ(s,a)中最大的那个呢?那说明当前策略已经是最优的策略了。下面我们来证明这个定理:
v
π
(
s
)
≤
q
π
(
s
,
π
′
(
s
)
)
t时刻使用策略
π
′
,
t+1时刻之后还是用策略
π
=
E
π
′
[
R
t
+
1
+
γ
v
π
(
S
t
+
1
)
∣
S
t
=
s
]
用前面的假设
≤
E
π
′
[
R
t
+
1
+
γ
q
π
(
S
t
+
1
,
π
′
(
S
t
+
1
)
)
∣
S
t
=
s
]
=
E
π
′
[
R
t
+
1
+
γ
E
π
′
[
R
t
+
2
+
γ
v
π
(
S
t
+
2
)
]
∣
S
t
=
s
]
=
E
π
′
[
R
t
+
1
+
γ
R
t
+
2
+
γ
2
v
π
(
S
t
+
2
)
∣
S
t
=
s
]
≤
E
π
′
[
R
t
+
1
+
γ
R
t
+
2
+
γ
2
R
t
+
3
+
γ
3
v
π
(
S
t
+
3
)
∣
S
t
=
s
]
…
≤
E
π
′
[
R
t
+
1
+
γ
R
t
+
2
+
γ
2
R
t
+
3
+
γ
3
R
t
+
4
…
+
∣
S
t
=
s
]
=
v
π
′
(
s
)
\begin{aligned}&v_{\pi}(s)\leq q_{\pi}(s,\pi^{\prime}(s))\\&\text{t时刻使用策略}\pi^{\prime},\text{t+1时刻之后还是用策略}\pi\\&=\mathbb{E}_{\pi^{\prime}}[R_{t+1}+\gamma v_{\pi}(S_{t+1})|S_{t}=s]\\&\text{用前面的假设}\\&\leq\mathbb{E}_{\pi^{\prime}}[R_{t+1}+\gamma q_{\pi}(S_{t+1},\pi^{\prime}(S_{t+1}))|S_{t}=s]\\&=\mathbb{E}_{\pi^{\prime}}[R_{t+1}+\gamma\mathbb{E}_{\pi^{\prime}}[R_{t+2}+\gamma v_{\pi}(S_{t+2})]|S_{t}=s]\\&=\mathbb{E}_{\pi^{\prime}}[R_{t+1}+\gamma R_{t+2}+\gamma^{2}v_{\pi}(S_{t+2})|S_{t}=s]\\&\leq\mathbb{E}_{\pi^{\prime}}[R_{t+1}+\gamma R_{t+2}+\gamma^{2}R_{t+3}+\gamma^{3}v_{\pi}(S_{t+3})|S_{t}=s]\\&\ldots\\&\leq\mathbb{E}_{\pi^{\prime}}[R_{t+1}+\gamma R_{t+2}+\gamma^{2}R_{t+3}+\gamma^{3}R_{t+4}\ldots+|S_{t}=s]\\&=v_{\pi^{\prime}}(s)\end{aligned}
vπ(s)≤qπ(s,π′(s))t时刻使用策略π′,t+1时刻之后还是用策略π=Eπ′[Rt+1+γvπ(St+1)∣St=s]用前面的假设≤Eπ′[Rt+1+γqπ(St+1,π′(St+1))∣St=s]=Eπ′[Rt+1+γEπ′[Rt+2+γvπ(St+2)]∣St=s]=Eπ′[Rt+1+γRt+2+γ2vπ(St+2)∣St=s]≤Eπ′[Rt+1+γRt+2+γ2Rt+3+γ3vπ(St+3)∣St=s]…≤Eπ′[Rt+1+γRt+2+γ2Rt+3+γ3Rt+4…+∣St=s]=vπ′(s)
上面的证明就是不停的应用假设条件,里面有一点就是 E π E π X = E π X E_\pi E_\pi X=E_\pi X EπEπX=EπX,因为求一次期望之后就和
π \pi π无关了,可以认为是常量了。
我们最终使用的策略是“贪心”的策略,对于所有的s,我们都选择qπ(s,a)最大的那个a。
参考文章:
https://zhuanlan.zhihu.com/p/33229439
https://hwcoder.top/RL-Note-3
更多推荐
所有评论(0)