Maxton‘s Blog

返回

RL学习笔记:值迭代与策略迭代

深入解析值迭代(Value Iteration)与策略迭代(Policy Iteration)的核心算法流程,推导策略更新与值更新的数学形式。探讨了截断策略迭代(Truncated Policy Iteration)如何通过调整评估步数,在统一视角下连接这两种经典算法。

值迭代与策略迭代#

值迭代 (Value Iteration)#

值迭代通过迭代更新值函数 vkv_k 来逼近最优值函数 vv_*。其核心迭代公式为:

vk+1=f(vk)=maxπ(rπ+γPπvk),k=1,2,3v_{k+1} = f(v_k) = \max_{\pi} (r_{\pi} + \gamma P_{\pi} v_k), \quad k = 1, 2, 3 \dots

该过程可分解为两个步骤:

  1. 策略更新 (Policy Update)

    πk+1=argmaxπ(rπ+γPπvk)\pi_{k+1} = \arg\max_{\pi} (r_{\pi} + \gamma P_{\pi} v_k)
  2. 值更新 (Value Update)

    vk+1=rπk+1+γPπk+1vkv_{k+1} = r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}} v_k

注:此处的 vkv_k 是第 kk 次迭代的估值向量,而非最终的 state value。

1. 策略更新 (Policy Update)#

πk+1=argmaxπ(rπ+γPπvk)\pi_{k+1} = \arg\max_{\pi} (r_{\pi} + \gamma P_{\pi} v_k)

其逐元素形式 (Elementwise form) 为:

πk+1(s)=argmaxπaπ(as)(rp(rs,a)r+γsp(ss,a)vk(s))qk(s,a),sS\pi_{k+1}(s) = \arg\max_{\pi} \sum_{a} \pi(a|s) \underbrace{\left( \sum_{r} p(r|s,a)r + \gamma \sum_{s'} p(s'|s,a)v_k(s') \right)}_{q_k(s,a)}, \quad s \in \mathcal{S}

由此得到的 πk+1\pi_{k+1} 为贪婪策略 (Greedy Policy),即在状态 ss 下选择使 qk(s,a)q_k(s,a) 最大的动作 ak(s)a_k^*(s)

ak(s)=argmaxaqk(a,s)a_k^*(s) = \arg\max_{a} q_k(a, s) πk+1(as)={1,a=ak(s)0,aak(s)\pi_{k+1}(a|s) = \begin{cases} 1, & a = a_k^*(s) \\ 0, & a \neq a_k^*(s) \end{cases}

2. 值更新 (Value Update)#

vk+1=rπk+1+γPπk+1vkv_{k+1} = r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}} v_k

其逐元素形式为:

vk+1(s)=aπk+1(as)(rp(rs,a)r+γsp(ss,a)vk(s))qk(s,a),sSv_{k+1}(s) = \sum_{a} \pi_{k+1}(a|s) \underbrace{ \left( \sum_{r} p(r|s,a)r + \gamma \sum_{s'} p(s'|s,a)v_k(s') \right) }_{q_k(s,a)}, \quad s \in \mathcal{S}

由于 πk+1\pi_{k+1} 是贪婪策略,上式等价于:

vk+1(s)=maxaqk(a,s)v_{k+1}(s) = \max_{a} q_k(a, s)

策略迭代 (Policy Iteration)#

策略迭代包含以下步骤:

  1. 初始化:给定一个随机的初始策略 π0\pi_0

  2. 策略评估 (Policy Evaluation, PE):计算当前策略的状态价值 vπkv_{\pi_k}

    vπk=rπk+γPπkvπkv_{\pi_k} = r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}
  3. 策略提升 (Policy Improvement, PI):基于当前价值生成更好的策略。

    πk+1=argmaxπ(rπ+γPπvπk)\pi_{k+1} = \arg \max_{\pi} (r_\pi + \gamma P_\pi v_{\pi_k})

1. 策略评估 (Policy Evaluation)#

求解 vπkv_{\pi_k} 通常采用迭代法:

  • 矩阵-向量形式

    vπk(j+1)=rπk+γPπkvπk(j),j=0,1,2,v_{\pi_k}^{(j+1)} = r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}^{(j)}, \quad j = 0, 1, 2, \dots
  • 逐元素形式

    vπk(j+1)(s)=aπk(as)(rp(rs,a)r+γsp(ss,a)vπk(j)(s)),sSv_{\pi_k}^{(j+1)}(s) = \sum_{a} \pi_k(a|s) \left( \sum_{r} p(r|s, a)r + \gamma \sum_{s'} p(s'|s, a)v_{\pi_k}^{(j)}(s') \right), \quad s \in \mathcal{S}

停止条件:当 jj \to \inftyvπk(j+1)vπk(j)\| v_{\pi_k}^{(j+1)} - v_{\pi_k}^{(j)} \| 足夠小时停止迭代。

2. 策略提升 (Policy Improvement)#

  • 矩阵-向量形式

    πk+1=argmaxπ(rπ+γPπvπk)\pi_{k+1} = \arg \max_{\pi} (r_\pi + \gamma P_\pi v_{\pi_k})
  • 逐元素形式

    πk+1(s)=argmaxπaπ(as)(rp(rs,a)r+γsp(ss,a)vπk(s))qπk(s,a),sS\pi_{k+1}(s) = \arg \max_{\pi} \sum_{a} \pi(a|s) \underbrace{\left( \sum_{r} p(r|s, a)r + \gamma \sum_{s'} p(s'|s, a)v_{\pi_k}(s') \right)}_{q_{\pi_k}(s, a)}, \quad s \in \mathcal{S}

ak(s)=argmaxaqπk(a,s)a_k^*(s) = \arg \max_{a} q_{\pi_k}(a, s),更新策略为确定性贪婪策略:

πk+1(as)={1,a=ak(s)0,aak(s)\pi_{k+1}(a|s) = \begin{cases} 1, & a = a_k^*(s) \\ 0, & a \neq a_k^*(s) \end{cases}

截断策略迭代 (Truncated Policy Iteration)#

我们可以从“策略评估的步数”这一角度来统一值迭代和策略迭代:

Policy Iteration: π0PEvπ0PIπ1PEvπ1PIπ2Value Iteration: π0PEv0PUπ1VUv1PUπ2\begin{alignat*}{2} \text{Policy Iteration: } & \pi_0 \xrightarrow{PE} v_{\pi_0} \xrightarrow{PI} \pi_1 \xrightarrow{PE} v_{\pi_1} \xrightarrow{PI} \pi_2 \dots \\ \text{Value Iteration: } & \phantom{\pi_0 \xrightarrow{PE}} v_0 \xrightarrow{PU} \pi_1' \xrightarrow{VU} v_1 \xrightarrow{PU} \pi_2' \dots \end{alignat*}
  • Policy IterationPvvvv...Pvvvv...\text{P} \to \text{vvvv...} \to \text{P} \to \text{vvvv...} (评估至收敛)
  • Value IterationPvPvPv\text{P} \to \text{v} \to \text{P} \to \text{v} \to \text{P} \to \text{v} (评估仅做一步)

统一视角下的算法对比:

vπ1(0)=v0初始值Value Iterationv1vπ1(1)=rπ1+γPπ1vπ1(0)(只迭代 1 次)vπ1(2)=rπ1+γPπ1vπ1(1)Truncated Policy Iterationvˉ1vπ1(j)=rπ1+γPπ1vπ1(j1)(迭代 j 次)Policy Iterationvπ1vπ1()=rπ1+γPπ1vπ1()(迭代至收敛)\begin{array}{rll} & v_{\pi_1}^{(0)} = v_0 & \text{初始值} \\ \text{Value Iteration} \leftarrow v_1 \longleftarrow & v_{\pi_1}^{(1)} = r_{\pi_1} + \gamma P_{\pi_1} v_{\pi_1}^{(0)} & \text{(只迭代 1 次)} \\ & v_{\pi_1}^{(2)} = r_{\pi_1} + \gamma P_{\pi_1} v_{\pi_1}^{(1)} & \\ & \quad \vdots & \\ \text{Truncated Policy Iteration} \leftarrow \bar{v}_1 \longleftarrow & v_{\pi_1}^{(j)} = r_{\pi_1} + \gamma P_{\pi_1} v_{\pi_1}^{(j-1)} & \text{(迭代 j 次)} \\ & \quad \vdots & \\ \text{Policy Iteration} \leftarrow v_{\pi_1} \longleftarrow & v_{\pi_1}^{(\infty)} = r_{\pi_1} + \gamma P_{\pi_1} v_{\pi_1}^{(\infty)} & \text{(迭代至收敛)} \end{array}

注意:标准的 Policy Iteration 要求在每一步都精确求解 vπkv_{\pi_k}(即 jj \to \infty),这在实际计算中往往不可行或效率低下。因此,实际应用中使用的通常是 Truncated Policy Iteration,即限制评估步数 jj