1.6 策略迭代与值迭代
那么通常用什么方法找到最优策略呢?从理论上来说,如果我们能够知道环境的运行规律,能够对环境建模,同时计算资源足够多,就可以用动态规划的方法来解决优化问题。其中最经典的就是策略迭代(Policy Iteration)和值迭代(Value Itereation)的方法。
策略迭代的方法很简单。假设随机找了一个策略,我们可以用这个策略来得到该策略对应的值函数,然后基于该值函数,可以去找到更好的策略;再通过一轮一轮的迭代,让最后的算法收敛。这两个过程分布就是策略评估(Policy Evaluation)和策略提升(Policy Improvement)。整个算法过程如下。
(1)初始化一个策略π和所有状态下的V值:v(s);
(2)在策略评估阶段,先基于现有的策略π给每个状态更新v(s),直到更新前后的v值不再改变。如式(1.15)所示,更新后的第i+1轮迭代的v i+1(s)和更新前的第i轮迭代的v i的值不再改变,就说明完成了策略评估;
(3)在策略提升阶段,基于上一步得到的新的V值,更新我们的策略;
(4)如果策略更新了,就继续执行第(2)步。如果策略不再更新,就得到了解答。
可以看到,策略迭代是依照贝尔曼方程来进行迭代的。另外一个思路就是直接根据贝尔曼最优方程来进行迭代,也就是值迭代的方法。
那么这个π*是怎么得到的呢?就是通过选取使上式中V值最大的动作得到,即
可以看到,值迭代在每一步计算值函数的时候,没有使用一个具体的策略去迭代更新,而是直接计算当前状态下每个动作的回报的期望。这两种方法的差异也一直贯穿整个强化学习的发展,后续不管是同策略还是异策略、值迭代还是策略迭代,都可以回溯到这里,或者更根本的贝尔曼方程。本质上,策略迭代和值迭代是一致的:策略迭代对于值函数的计算更加精确,一步一步逼近最优解;值迭代只是使用了值函数的一个期望,因此效率会更高一些。
但是,整体来说,这两种方法都依赖于状态转移概率p(s′|s,a),它在很多情况下都是不可知的。通常我们要能够对环境进行建模,才能得到这个概率。当然,现在也有很多人研究怎么从与环境的交互中学到模型,比如World Models的方法。现在大多数流行的方法如DQN、A3C、PPO等,都是无模型的(Model Free),我们在后续章节中会分别介绍。