策略迭代(Policy Iteration) vs 值迭代(Value Iteration)
先说个总结:值迭代是策略迭代的内层循环,策略迭代在更新每一个策略的时候,都需要进行一次值迭代的循环,来求这一个策略的v,所以在实际情况下不存在完整的策略迭代,都是Truncated Policy Iteration。
值迭代分为两个步骤:策略更新(Policy update)和值更新(Value update),它们的公式分别为:
$$ \pi_{k+1} = \arg\max_{\pi} (r_\pi + \lambda P_\pi v_k) \tag{1} $$
$$ v_{k+1} = r_{\pi_{k+1}} + \lambda P_{\pi_{k+1}} v_k \tag{2} $$
而策略迭代分为两个步骤,策略评估(Policy Evaluation)和策略优化(Policy Improvement),它们的公式分别为:
$$ v_{\pi_k} = r_{\pi_k} + \lambda P_{\pi_k} v_{\pi_k} \tag{3} $$
$$ \pi_{k+1} = \arg\max_{\pi} (r_\pi + \lambda P_\pi v_{\pi_k}) \tag{4} $$
可以看到(1)(4)式基本上相同,唯一的不同点在于\(v\)的底标,策略迭代是\(\pi_k\),而值迭代就是\(k\),这也意味着策略迭代中算出来的其实是状态值函数,也就是对当前策略下计算出每个状态下的状态值,每个状态下又有不同的action,因此需要很多步运算,甚至是无穷步。而值迭代的更新方式是基于“最大化期望回报”,即它直接在每一步使用新的值来更新自身,而不需要完整地评估某个策略的值函数。
这张图很好地描述了两种迭代之间的关系:
总而言之:
- 值迭代通过不断逼近最优值函数 \(V^*(s)\),它不依赖于特定策略,而是直接寻找最优策略。
- 策略迭代先固定策略计算 该策略下的值函数,然后基于该值函数改进策略,如此反复,最终收敛到最优策略。
- 计算量比较:策略迭代的策略评估部分需要多次迭代(但可以提前终止),值迭代在每一步执行一次更新,因此策略迭代可能需要更多计算量,但更稳定,而值迭代通常更快收敛,但可能振荡。