本文是对Reinforcement Learning An Introduction (2nd edition) 第4.3和4.4小节的总结。
主要内容:
- 什么是策略迭代
- 什么是值迭代
- 策略迭代与值迭代之间的关系
- 策略迭代与值迭代的对比
什么是策略迭代
策略迭代包括策略评估(policy evaluation)和策略提升(policy improvement)。
策略评估本身也是迭代运算。每次进行策略评估时,值函数(value function)的初始值是上一个策略(policy)的值函数。这通常会显著提高策略评估的收敛速度(猜测可能因为相邻两个策略的值函数改变很小)。
说明:
- 使用迭代策略评估
- 第2步第6行值函数更新时没有
,因为这里的策略是确定性策略(deterministic policy),每个状态与动作是一一对应的,所以
- 第2步第7行保存所有状态对应的
的最大值,如果满足条件,那么所有状态的值函数都满足该条件
- 第3步第5行也说明策略
是确定性策略
- 策略评估时根据策略
选择动作,策略提升时基于收敛的值函数根据选择动作,策略提升得到的策略与之前的策略不一定相同
令人惊讶的是策略迭代通常只需要很少的几次迭代即可收敛!
什么是值迭代
策略迭代存在一个问题:每次迭代都需要进行策略评估,而策略评估本身可能需要多次迭代才能收敛。
是否可以提前结束策略评估呢?
先看一下gridworld的例子(参考原书Example 4.1和Figure 4.1):
左边的表格为等概率随机策略的值函数,右边的表格为值函数对应的贪婪策略(greedy policy)。
从上图可以看出,第三步开始已经得到了最优策略(optimal policy),虽然值函数还没有收敛!
实际上,策略评估中迭代过程的提前终止,不会影响策略迭代的收敛!有多种方法实现策略评估的提前终止,其中最重要的一种就是值迭代算法。
值迭代算法是策略评估过程只进行一次迭代的策略迭代算法。
下面从策略迭代的角度分析值迭代,上图中内层Loop循环的值函数更新可以拆分为两步:
- 策略提升:根据更新前的值函数进行策略提升,得到贪婪策略
- 策略评估:根据贪婪策略选择状态s下的贪婪动作(greedy action)a对应的值(value),更新s对应的值函数
值迭代方法将上述两个过程在一个公式中实现了。
如果从另一个角度理解值迭代,第5行的公式其实就是贝尔曼最优公式(Bellman Optimality Equation),值迭代算法将其作为了值函数更新公式。
策略迭代与值迭代之间的关系
值迭代算法是策略评估过程只进行一次迭代的策略迭代算法。
策略迭代与值迭代的对比
从运算量角度看,值迭代方法中策略评估只需要一次迭代,需要的运算量更小,应该比策略迭代更快收敛。
但是,通常在策略提升中间插入需要多次迭代的策略评估的算法,收敛的更快!
我认为这可能与值迭代算法的终止条件有关。值迭代算法的终止条件对象为值函数,策略迭代算法的终止条件对象为策略,结合之前gridworld中观察的现象(策略可能比值函数收敛的更快),所以策略迭代可能比值迭代更快收敛。
那么问题来了:是否可以修改值迭代的终止条件对象也为策略,从而加快值迭代的收敛速度呢?
我认为不能。原因:对于值迭代,如果终止条件对象为策略,当策略满足终止条件时,可能无法保证策略是最优的(不确定该结论是否正确)!而对于策略迭代,当策略满足终止条件时,因为策略对应的值函数已经收敛,可以保证策略是最优的!