前面部分介绍了策略改进定理的理论推导和策略迭代求解策略 π \pi π的具体算法过程,本节将介绍动态规划求解强化学习任务最后一个模块——价值迭代。
在整体介绍中介绍了策略迭代共包含2个步骤:
重复执行策略评估和策略改进,直到获取最优策略 π \pi π,迭代结束。
在整个迭代过程中,策略评估(迭代解) 本身就是一个迭代过程,即便使用了策略改进定理优化了计算最优价值函数的过程,但仍改变不了其循环嵌套循环的本质。
为了优化掉这个嵌套循环的过程,我们将介绍价值迭代。
针对策略迭代中策略评估过程中的缺陷,思考如何优化策略评估步骤;
首先回顾策略评估的算法过程:
输入 | 初始策略: π ( a ∣ s ) \pi(a \mid s) π(a∣s),动态特性函数: p ( s ′ , r ∣ s , a ) p(s',r\mid s,a) p(s′,r∣s,a),奖励: r r r,折扣系数: γ \gamma γ |
---|---|
初始化操作 (Initialization operation) |
1. 对 ∀ s ∈ S \forall s \in \mathcal S ∀s∈S,初始化状态价值函数:如 V ( s ) = 0 V(s) = 0 V(s)=0; 2.设置一个阈值 θ \theta θ,将其设置为很小的实数值,如 θ = 0.01 \theta=0.01 θ=0.01 |
策略评估 (Policy Evaluation) |
1. repeat 对每一轮策略评估: k = 1 , 2 , . . . k=1,2,... k=1,2,... 2. δ ← 0 \delta \gets 0 δ←0 3. for 每个状态 s s s do: 4. v ← V ( s ) \mathcal v \gets V(s) v←V(s) 5. V ( s ) ← ∑ a ∈ A π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V ( s ′ ) ] V(s) \gets \sum_{a \in \mathcal A}\pi(a \mid s) \sum_{s',r}p(s',r \mid s,a) [r + \gamma V(s')] V(s)←∑a∈Aπ(a∣s)∑s′,rp(s′,r∣s,a)[r+γV(s′)] 6. δ ← m a x ( δ , ∣ v − V ( s ) ∣ ) \delta \gets max(\delta, \mid \mathcal v - V(s) \mid) δ←max(δ,∣v−V(s)∣) 7. end for 8. until δ < θ \delta < \theta δ<θ |
输出结果 | V ( s ) V(s) V(s) |
通过上述的算法过程,我们发现:
在计算新的 V π ( s ) V_\pi(s) Vπ(s)过程中,使用贝尔曼期望方程 → \to → 加权平均方法进行迭代;
计算加权平均方法是从整个策略本身对状态价值函数计算的结果。但在迭代过程中,中间过程中的价值函数并不是我们关心的对象,而只有最终迭代收敛后的 V ∗ ( s ) , π ∗ ( a ∣ s ) V_*(s),\pi_*(a \mid s) V∗(s),π∗(a∣s)才是我们关注的最终结果。
因此,如何优化策略迭代中循环嵌套循环的情况?提出一种解决方案:对策略评估进行截断:
从常规思路考虑,假设某一次迭代的策略改进结果为 π \pi π,进入下一次的策略评估时,仍然需要上述算法通过迭代的方式求解精确的最优价值函数 V ∗ ( s ) V_*(s) V∗(s),这种方式实际上只要进行迭代,它必然会向最优价值函数方向更新,并且迭代次数越高,可优化的信息可能就越少(最优价值函数在更新过程中增长的越慢)
总而言之,通过大规模的迭代只是得到一个比较精确的中间过程的价值函数是很不划算的;
截断策略评估使用的方式
在策略评估的迭代过程中仅进行一步后直接进行策略改进;
根据贝尔曼方程满足的不动点定理 → \to → 即便只是更新了一步,但它仍然产生了一个优于更新前的价值函数。
它具体是如何更新这一步的呢?
贝尔曼最优方程 → \to → 干脆选择一个最优动作对应的状态-动作价值函数进行更新;
V k + 1 ( s ) = max a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V k ( s ′ ) ] V_{k+1}(s) = \mathop{\max}\limits_{a} \sum_{s',r}p(s',r \mid s,a)[r + \gamma V_k(s')] Vk+1(s)=amaxs′,r∑p(s′,r∣s,a)[r+γVk(s′)]
继续观察:
从迭代过程理解,在给定 V k ( s ′ ) V_k(s') Vk(s′)的条件下,直接对所有动作计算对应的 q k + 1 ( s , a ) q_{k+1}(s,a) qk+1(s,a),并返回一个关于 q k + 1 ( s , a ) q_{k+1}(s,a) qk+1(s,a)的向量:
q k + 1 ( s , a ) = ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V k ( s ′ ) ] q k + 1 ( s , a ) = ( q k + 1 ( s , a 1 ) q k + 1 ( s , a 2 ) q k + 1 ( s , a 3 ) . . . q k + 1 ( s , a n ) ) ( a 1 , a 2 , a 3 , . . . , a n ∈ A ( s ) ) q_{k+1}(s,a) = \sum_{s',r}p(s',r \mid s,a)[r + \gamma V_k(s')] \\ q_{k+1}(s,a) = \begin{pmatrix} q_{k+1}(s,a_1) \\ q_{k+1}(s,a_2) \\ q_{k+1}(s,a_3)\\ ...\\ q_{k+1}(s,a_n) \end{pmatrix}(a_1,a_2,a_3,...,a_n \in \mathcal A(s)) qk+1(s,a)=s′,r∑p(s′,r∣s,a)[r+γVk(s′)]qk+1(s,a)=⎝⎜⎜⎜⎜⎛qk+1(s,a1)qk+1(s,a2)qk+1(s,a3)...qk+1(s,an)⎠⎟⎟⎟⎟⎞(a1,a2,a3,...,an∈A(s))
在策略改进过程中,使用贪心策略从 q k + 1 ( s , a ) q_{k+1}(s,a) qk+1(s,a)中选择一个最大动作-状态价值函数对应的动作作为新的策略:
a n e w = arg max a ∈ A q k + 1 ( s , a ) a_{new} = \mathop{\arg\max}\limits_{a \in \mathcal A} q_{k+1}(s,a) anew=a∈Aargmaxqk+1(s,a)
基于新策略 a n e w a_{new} anew的价值函数表示如下:
V k + 1 ( s ) = q k + 1 ( s , a n e w ) = max a q k + 1 ( s , a ) = max a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V k ( s ′ ) ] \begin{aligned} V_{k+1}(s) & = q_{k+1}(s,a_{new})\\ & = \mathop{\max}\limits_{a} q_{k+1}(s,a) \\ & = \mathop{\max}\limits_{a} \sum_{s',r}p(s',r \mid s,a)[r + \gamma V_k(s')] \end{aligned} Vk+1(s)=qk+1(s,anew)=amaxqk+1(s,a)=amaxs′,r∑p(s′,r∣s,a)[r+γVk(s′)]
我们发现,相比于贝尔曼期望方程的策略评估迭代方式,截断策略评估方式已经非常模糊策略 π \pi π的形式了,并不是说不计算策略 π \pi π了,而是使用 m a x max max的方式将策略 π \pi π映射成了只包含[0,1]两种元素的向量形式,我们称使用这种策略评估的策略迭代方式为价值迭代。
价值迭代本质上是极端情况下的策略迭代 → \to → 这种极端指的是迭代过程中的策略很极端;
由于迭代方式求解策略评估中使用贝尔曼期望方程进行价值函数的更新 → \to → 必然根据策略 π \pi π内部各动作的权重分布计算更新后的价值函数,并且对后续的策略改进过程中对策略 π \pi π的计算有严格要求。
策略迭代的迭代流程如下表示:
V i n i t ( s ) → π 1 → V 1 ( s ) → π 2 → V 2 ( s ) → . . . V_{init}(s) \to \pi_1 \to V_1(s) \to \pi_2 \to V_2(s) \to ... Vinit(s)→π1→V1(s)→π2→V2(s)→...
价值迭代中的策略评估模糊了策略 π \pi π的概念,其最终目的就是求出最优价值函数 V ∗ ( s ) V_*(s) V∗(s),
价值迭代的迭代流程如下表示:
V i n i t ( s ) → V 1 ( s ) → V 2 ( s ) → . . . V_{init}(s) \to V_1(s) \to V_2(s) \to ... Vinit(s)→V1(s)→V2(s)→...
将最优价值函数求出之后,可以基于 V ∗ ( s ) V_*(s) V∗(s)求出对应的最优策略 π ∗ \pi_* π∗。
π ∗ = arg max a ∈ A q π ( s , a ) = arg max a ∈ A ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V ∗ ( s ) ] \begin{aligned} \pi_* & = \mathop{\arg\max}\limits_{a \in \mathcal A} q_\pi(s,a)\\ & = \mathop{\arg\max}\limits_{a \in \mathcal A} \sum_{s',r}p(s',r \mid s,a)[r + \gamma V_*(s)] \\ \end{aligned} π∗=a∈Aargmaxqπ(s,a)=a∈Aargmaxs′,r∑p(s′,r∣s,a)[r+γV∗(s)]
重新观察策略迭代和价值迭代中策略评估过程中价值函数计算迭代公式:
V k + 1 ( s ) = max a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V k ( s ′ ) ] V k + 1 ( s ) = ∑ a ∈ A π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V k ( s ′ ) ] \begin{aligned} V_{k+1}(s) & = \mathop{\max}\limits_{a} \sum_{s',r}p(s',r \mid s,a)[r + \gamma V_k(s')] \\ V_{k+1}(s) & = \sum_{a \in \mathcal A}\pi(a \mid s) \sum_{s',r}p(s',r \mid s,a)[r + \gamma V_k(s')] \end{aligned} Vk+1(s)Vk+1(s)=amaxs′,r∑p(s′,r∣s,a)[r+γVk(s′)]=a∈A∑π(a∣s)s′,r∑p(s′,r∣s,a)[r+γVk(s′)]
由于 S \mathcal S S是以向量形式表示的状态空间(State Space),我们发现,无论是哪种迭代方式,我们都需要遍历整个状态空间,将所有状态对应结果全部求出之后才能继续进行迭代;
S = ( s 1 s 2 s 3 . . . s n ) V k + 1 ( S ) = ( V k + 1 ( s 1 ) V k + 1 ( s 2 ) V k + 1 ( s 3 ) . . . V k + 1 ( s n ) ) \mathcal S = \begin{pmatrix} s_1 \\ s_2 \\ s_3\\ ...\\ s_n \end{pmatrix} V_{k+1}(\mathcal S) = \begin{pmatrix} V_{k+1}(s_1) \\ V_{k+1}(s_2) \\ V_{k+1}(s_3)\\ ...\\ V_{k+1}(s_n) \end{pmatrix} S=⎝⎜⎜⎜⎜⎛s1s2s3...sn⎠⎟⎟⎟⎟⎞Vk+1(S)=⎝⎜⎜⎜⎜⎛Vk+1(s1)Vk+1(s2)Vk+1(s3)...Vk+1(sn)⎠⎟⎟⎟⎟⎞
如果状态空间很大(状态空间复杂),在求解 V k + 1 ( s ) V_{k+1}(s) Vk+1(s)过程中不仅花费大量计算代价,并且需要分配存储空间存储该信息。
就地更新方法核心是在策略评估中 → \to → 采取随机选择某一状态计算并更新对应位置的价值函数,以此替代遍历整个状态空间的方法。每次策略评估只更新某一状态的状态价值函数,状态价值函数向量内的其他位置的状态价值函数不变。我们称这种方法为异步策略迭代。
使用价值迭代和异步策略方式可以更高效地求解最优策略。
广义策略迭代并不表示某个具体算法,而是表示一种迭代理念。策略迭代方法(包含策略迭代和价值迭代)都是通过策略评估和策略改进两个流程交互进行。具体做法是(以基于状态价值函数的迭代过程进行示例):
在策略评估过程中,我们通过贝尔曼期望方程迭代求解 V π ( s ) V_\pi(s) Vπ(s)(策略迭代)或通过贝尔曼最优方程迭代求解 V π ( s ) V_\pi(s) Vπ(s)(价值迭代),不可否认的是需要将所有状态 s ∈ S s \in \mathcal S s∈S全部求解完毕后再执行策略改进步骤;
S = ( s 1 s 2 s 3 . . . s n ) → V π ( S ) = ( V π ( s 1 ) V π ( s 2 ) V π ( s 3 ) . . . V π ( s n ) ) \mathcal S = \begin{pmatrix} s_1 \\ s_2 \\ s_3\\ ...\\ s_n \end{pmatrix} \to V_\pi(\mathcal S) = \begin{pmatrix} V_\pi(s_1) \\ V_\pi(s_2) \\ V_\pi(s_3)\\ ...\\ V_\pi(s_n) \end{pmatrix} S=⎝⎜⎜⎜⎜⎛s1s2s3...sn⎠⎟⎟⎟⎟⎞→Vπ(S)=⎝⎜⎜⎜⎜⎛Vπ(s1)Vπ(s2)Vπ(s3)...Vπ(sn)⎠⎟⎟⎟⎟⎞
我们可以看出,策略评估和策略改进之间界限分明,我们称这种方法为经典策略迭代(Classical Policy Iteration)。
而广义策略迭代相比与经典策略迭代,它不关心策略评估和策略改进的细节,而只是强调策略评估和策略改进之间的交互关系。
广义策略迭代的核心思想:策略评估只要还在更新价值函数,即便策略评估没有结束,我们仍然可以进行策略改进。只要两个迭代过程都在不断地更新,就能收敛到最优价值函数和最优策略。异步策略方法很明显就是一种GPI思想。
广义策略迭代思想优势在于:经典策略迭代中的策略评估和策略改进之间存在明确的顺序关系,因此每一次迭代产生的价值函数 V π ( s ) V_\pi(s) Vπ(s)和策略 π \pi π都是相互匹配的;而广义策略迭代中由于价值函数 V π ( s ) V_\pi(s) Vπ(s)和策略 π \pi π还未完全更新完毕就直接执行下一步操作,意味着 V π ( s ) V_\pi(s) Vπ(s)和 π \pi π之间不匹配;两者在长期的博弈后,两个流程结果都会趋于同一目标——最优价值函数 V ∗ ( s ) V_*(s) V∗(s)和最优策略 π ∗ \pi_* π∗。
至此,动态规划求解强化学习任务理论部分全部介绍完毕,下一节将简单介绍使用蒙特卡洛方法求解强化学习任务。
相关参考:
【强化学习】动态规划【白板推导系列】