IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 强化学习入门3—动态规划 -> 正文阅读

[数据结构与算法]强化学习入门3—动态规划

前言

本文为强化学习入门系列的第三篇,主要介绍如何通过动态规划来求解贝尔曼最优方程。

我们知道最优策略 π \pi π 对应的就是最优价值函数,而其求解分为策略迭代、价值迭代两种方法。本节将详细介绍这两种方法。

本节所讨论的MDP都是已知的MDP。已知的意思就是环境的动态特性是已知的,也就是 p ( s ′ , a ∣ s , a ) p(s',a | s,a) p(s,as,a) 这个概率密度函数是确定的。

动态规划

策略迭代

策略迭代可以分为策略评估和策略改进两步骤。策略评估就是给定一个策略 π \pi π 求解状态价值函数 v π ( s ) v_{\pi}(s) vπ?(s) ,而策略改进就是寻求一个更优的策略 π ′ \pi' π,使得 v π ′ ( s ) > v π ( s ) v_{\pi'}(s)>v_{\pi}(s) vπ?(s)>vπ?(s)

策略评估 Policy Evaluation

解析解推导

策略评估就是给定一个策略 π \pi π 求解贝尔曼方程 v π ( s ) v_{\pi}(s) vπ?(s) 。我们知道贝尔曼方程有如下形式:
v π ( s ) = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v π ( s ′ ) ] ???? , ? s ∈ S v_{\pi}(s)=\sum_a \pi(a|s)\sum_{s',r}p(s',r|s,a)[r+\gamma v_{\pi}(s')]\;\;,\forall s\in S vπ?(s)=a?π(as)s,r?p(s,rs,a)[r+γvπ?(s)],?sS
我们把 v π ( s ) , v π ′ ( s ) v_{\pi}(s),v_{\pi'}(s) vπ?(s),vπ?(s) 看成未知的,那其实可看出 v π ( s ) , v π ′ ( s ) v_{\pi}(s),v_{\pi'}(s) vπ?(s),vπ?(s) 之间是线性关系。因为状态 s s s 是有多个,所以 v π ( s ) v_{\pi}(s) vπ?(s) 可写成向量形式:
v π ( s ) = [ v π ( s 1 ) v π ( s 2 ) . . . v π ( s S ) ] ∣ S ∣ × 1 v_{\pi}(s)= \begin{bmatrix} v_{\pi}(s_1)\\v_{\pi}(s_2)\\...\\v_{\pi}(s_S) \end{bmatrix}_{|S|\times1} vπ?(s)=?????vπ?(s1?)vπ?(s2?)...vπ?(sS?)??????S×1?
那问题实际上就是求解一个有 ∣ S ∣ |S| S 个未知量的线性方程组。我们用矩阵来表示 v π ( s ) , v π ′ ( s ) v_{\pi}(s),v_{\pi'}(s) vπ?(s),vπ?(s) 之间的关系,显然矩阵应该是 S × S S\times S S×S 维的。那接下来我们进一步化简方程组,方程组可拆开成如下两部分:
v π ( s ) = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) ? r + ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) ? γ v π ( s ′ ) ???? , ? s ∈ S v_{\pi}(s)=\sum_a \pi(a|s)\sum_{s',r}p(s',r|s,a)\cdot r+\sum_a \pi(a|s)\sum_{s',r}p(s',r|s,a)\cdot \gamma v_{\pi}(s')\;\;,\forall s\in S vπ?(s)=a?π(as)s,r?p(s,rs,a)?r+a?π(as)s,r?p(s,rs,a)?γvπ?(s),?sS
观察式子左边项,其实 s ′ s' s可以被积分掉,也就变成 $\sum_{r}p(r|s,a)r $ ,这就是一个期望的形式,把它定义成一个奖励函数 r ( s , a ) r(s,a) r(s,a),表示给定策略 π \pi π 下,状态 s s s 下采取动作 a a a 时的期望奖励。那左边项就变成 ∑ a π ( a ∣ s ) ? r ( s , a ) \sum_a \pi(a|s)\cdot r(s,a) a?π(as)?r(s,a)。我们知道 π \pi π 是关于a的一个概率分布,那对a积分,则可以把a消掉,左边项最终可以写成 r π ( s ) r_{\pi}(s) rπ?(s) r π ( s ) r_{\pi}(s) rπ?(s) 是一个 ∣ S ∣ × 1 |S|\times 1 S×1 的矩阵。

再来观察式子右边项, γ \gamma γ 是一个常数,把r积分掉,则变成 γ ∑ a ∑ s ′ π ( a ∣ s ) p ( s ′ ∣ s , a ) v π ( s ′ ) \gamma \sum_a \sum_{s'}\pi(a|s)p(s'|s,a)v_{\pi}(s') γa?s?π(as)p(ss,a)vπ?(s),令 P π ( s , s ′ ) = ∑ a ∑ s ′ π ( a ∣ s ) p ( s ′ ∣ s , a ) P_{\pi}(s,s')=\sum_a \sum_{s'}\pi(a|s)p(s'|s,a) Pπ?(s,s)=a?s?π(as)p(ss,a),表示状态 s , s ′ s,s' s,s 之间的转移概率矩阵,维度为 ∣ S ∣ × ∣ S ∣ |S|\times |S| S×S。那么右边项最终可写成 γ P π ( s , s ′ ) v π ( s ′ ) \gamma P_{\pi}(s,s')v_{\pi}(s') γPπ?(s,s)vπ?(s)

最后,式子化简为:
v π ( s ) = r π ( s ) + γ P π ( s , s ′ ) v π ( s ′ ) v π ( s i ) = r π ( s i ) + γ ∑ j = 1 ∣ S ∣ P π ( s i , s j ) v π ( s j ) v_{\pi}(s)=r_{\pi}(s)+\gamma P_{\pi}(s,s')v_{\pi}(s') \\ v_{\pi}(s_i)=r_{\pi}(s_i)+\gamma \sum_{j=1}^{|S|} P_{\pi}(s_i,s_j)v_{\pi}(s_j) vπ?(s)=rπ?(s)+γPπ?(s,s)vπ?(s)vπ?(si?)=rπ?(si?)+γj=1S?Pπ?(si?,sj?)vπ?(sj?)
再进一步简写为:
v π = ( I ? γ P π ) ? 1 r π v_{\pi}=(I-\gamma P_{\pi})^{-1}r_{\pi} vπ?=(I?γPπ?)?1rπ?
这个就是解析解。显然是一个 ∣ S ∣ × 1 |S|\times 1 S×1 维的矩阵。由于涉及到矩阵运算,时间复杂度为 O ( ∣ S ∣ 3 ) O(|S|^3) O(S3)

数值解推导

解析解涉及矩阵运算,计算量较大,我们可以通过迭代求数值解。我们构造一个数列 { v k ( s ) } , k ∈ [ 1 , ∞ ] \{v_k(s)\},k\in[1,\infty] {vk?(s)},k[1,]。其中 v k v_k vk? 时包含 ∣ S ∣ |S| S 个状态价值函数的函数向量。 v k 、 v k + 1 v_k、v_{k+1} vk?vk+1? 根据贝尔曼方程我们可以写出其迭代关系:
v k + 1 ( s ) = E π [ R t + 1 + γ G t + 1 ?? ∣ ?? S t = s ] = E π [ R t + 1 + γ v k ( s ′ ) ?? ∣ ?? S t = s ] = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v k ( s ′ ) ] \begin{aligned} v_{k+1}(s) =& E_{\pi}[R_{t+1}+\gamma G_{t+1}\;|\;S_t=s] \\ =&E_{\pi}[R_{t+1}+\gamma v_{k}(s')\;|\;S_t=s] \\ =&\sum_a \pi(a|s)\sum_{s',r}p(s',r|s,a)[r+\gamma v_{k}(s')] \\ \end{aligned} vk+1?(s)===?Eπ?[Rt+1?+γGt+1?St?=s]Eπ?[Rt+1?+γvk?(s)St?=s]a?π(as)s,r?p(s,rs,a)[r+γvk?(s)]?
其实 v 1 , v 2 , . . . , v k v_1,v_2,...,v_{k} v1?,v2?,...,vk? 是通过迭代求得的价值函数的近似解,我们的目标就是使其收敛到 v π v_{\pi} vπ?。这个 v 1 v_1 v1?是先通过随机动作来确定的,也就是一个随机的初始函数向量。
在这里插入图片描述

策略改进

当我们能估计 π ′ \pi' π 时,我们想知道与当前策略 π \pi π 哪个好,就需要比较 v π , v π ′ v_{\pi},v_{\pi'} vπ?,vπ?。这就引出了策略改进定理。

策略改进定理 policy improvement theorem

【定义】给定 π , π ′ \pi,\pi' π,π,如果对于任意状态s,有 q π ( s , π ′ ( s ) ) ≥ v π ( s ) q_{\pi}(s,\pi'(s))\geq v_{\pi}(s) qπ?(s,π(s))vπ?(s),则 ? s ∈ S , v π ′ ( s ) ≥ v π ( s ) \forall s\in S,v_{\pi'}(s)\geq v_{\pi}(s) ?sS,vπ?(s)vπ?(s)

这个定理把原先需要求两个状态价值函数变成只需求一个 v π ( s ) v_{\pi}(s) vπ?(s) 就好。

那如何证明?

我们先回顾动作价值函数:
q π ( s , a ) = E [ R t + 1 + γ ? v π ( S t + 1 ) ?? ∣ ?? S t = s , A t = a ] = ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v π ( s ′ ) ] q_{\pi}(s,a)=E[R_{t+1}+\gamma \cdot v_{\pi}(S_{t+1})\;|\;S_t=s,A_t=a] =\sum_{s',r}p(s',r|s,a)[r+\gamma v_{\pi}(s')] qπ?(s,a)=E[Rt+1?+γ?vπ?(St+1?)St?=s,At?=a]=s,r?p(s,rs,a)[r+γvπ?(s)]
值得注意的是, R t + 1 R_{t+1} Rt+1? π \pi π 其实是无关的,因为在(s,a)时,平均奖励 R t + 1 R_{t+1} Rt+1? 已经获得了,而 π \pi π 影响的是下一时刻的状态 s t + 1 s_{t+1} st+1? 对于动作的选择, R t + 2 R_{t+2} Rt+2? π \pi π 才有关。

我们把 π ′ ( s ) \pi'(s) π(s) 代入动作 a a a,表示 t t t 时刻的动作是由 π ′ \pi' π 确定的,下一时刻的动作还是由 π \pi π 确定,所以 R t + 1 R_{t+1} Rt+1? π ′ \pi' π 有关,之后的奖励和 π \pi π 有关,推导过程如下:
v π ( s ) ≤ q π ( s , π ′ ( s ) ) = E [ R t + 1 + γ ? v π ( S t + 1 ) ?? ∣ ?? S t = s , A t = π ′ ( s ) ] = E π ′ [ R t + 1 + γ ? v π ( S t + 1 ) ?? ∣ ?? S t = s ] ≤ E π ′ [ R t + 1 + γ ? q π ( S t + 1 , π ′ ( S t + 1 ) ) ?? ∣ ?? S t = s ] ≤ E π ′ [ R t + 1 + γ R t + 2 + γ 2 ? q π ( S t + 2 , π ′ ( S t + 2 ) ) ?? ∣ ?? S t = s ] ≤ E π ′ [ R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . . + . . . ?? ∣ ?? S t + 1 = s ] = v π ′ ( s ) \begin{aligned} v_{\pi}(s)\leq & q_{\pi}(s,\pi'(s)) \\ =& E[R_{t+1}+\gamma \cdot v_{\pi}(S_{t+1})\;|\;S_t=s,A_t=\pi'(s)] \\ =& E_{\pi'}[R_{t+1}+\gamma \cdot v_{\pi}(S_{t+1})\;|\;S_t=s] \\ \leq& E_{\pi'}[R_{t+1}+\gamma \cdot q_{\pi}(S_{t+1},\pi'(S_{t+1}))\;|\;S_t=s] \\ \leq& E_{\pi'}[R_{t+1}+\gamma R_{t+2} +\gamma^2\cdot q_{\pi}(S_{t+2},\pi'(S_{t+2}))\;|\;S_t=s] \\ \leq& E_{\pi'}[R_{t+1}+\gamma R_{t+2} +\gamma^2 R_{t+3}+...+...\;|\;S_{t+1}=s] \\ =& v_{\pi'}(s) \end{aligned} vπ?(s)===?qπ?(s,π(s))E[Rt+1?+γ?vπ?(St+1?)St?=s,At?=π(s)]Eπ?[Rt+1?+γ?vπ?(St+1?)St?=s]Eπ?[Rt+1?+γ?qπ?(St+1?,π(St+1?))St?=s]Eπ?[Rt+1?+γRt+2?+γ2?qπ?(St+2?,π(St+2?))St?=s]Eπ?[Rt+1?+γRt+2?+γ2Rt+3?+...+...St+1?=s]vπ?(s)?
有了这一定理,我们怎么寻找最优的策略?一种比较直观的方法就是贪心方法。

对每个状态s,都选取其动作价值函数最大的的策略 π ′ \pi' π,即
? s ∈ S , π ′ ( s ) = arg ? max ? a q π ( s , a ) = = arg ? max ? a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v π ( s ′ ) ] \forall s\in S,\pi'(s)=\arg\max_a q_{\pi}(s,a)==\arg\max_a \sum_{s',r}p(s',r|s,a)[r+\gamma v_{\pi}(s')] ?sS,π(s)=argamax?qπ?(s,a)==argamax?s,r?p(s,rs,a)[r+γvπ?(s)]
根据策略改进定理,如果 q π ( s , π ′ ( s ) ) ≥ v π ( s ) q_{\pi}(s,\pi'(s))\geq v_{\pi}(s) qπ?(s,π(s))vπ?(s),则更新策略。直到某一时刻下 v π ′ ( s ) = v π ( s ) v_{\pi'}(s)= v_{\pi}(s) vπ?(s)=vπ?(s) 时,则算法已收敛,这时也满足贝尔曼最优方程,此时的策略就是我们的最优策略。

简单的流程图如下:
在这里插入图片描述

价值迭代

在策略迭代中,我们每轮迭代的步骤是:先根据 π \pi π 评估 v π ( s ) v_{\pi}(s) vπ?(s),再采用贪心方法改进策略。但是在策略评估时,为了使价值函数收敛到 v π v_{\pi} vπ? 我们需要对所有状态都迭代若干次直到价值函数收敛,这就造成迭代中套娃迭代,计算非常麻烦。

那能不能减少迭代呢?有一个方法就是,在评估时只进行一次迭代,也就是对所有状态只扫描一次,接着进行策略改进。

v k + 1 ( s ) = max ? a E π [ R t + 1 + γ G t + 1 ?? ∣ ?? S t = s ] = max ? a E π [ R t + 1 + γ v k ( s ′ ) ?? ∣ ?? S t = s ] = max ? a ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v k ( s ′ ) ] \begin{aligned} v_{k+1}(s) =& \max_a E_{\pi}[R_{t+1}+\gamma G_{t+1}\;|\;S_t=s] \\ =&\max_a E_{\pi}[R_{t+1}+\gamma v_{k}(s')\;|\;S_t=s] \\ =&\max_a \sum_a \pi(a|s)\sum_{s',r}p(s',r|s,a)[r+\gamma v_{k}(s')] \\ \end{aligned} vk+1?(s)===?amax?Eπ?[Rt+1?+γGt+1?St?=s]amax?Eπ?[Rt+1?+γvk?(s)St?=s]amax?a?π(as)s,r?p(s,rs,a)[r+γvk?(s)]?

那这个其实就是贝尔曼最优方程。这样子就不需要反复迭代来求解 v π ( s ) v_{\pi}(s) vπ?(s)了。

从过程来理解价值迭代与策略迭代的不同

  • 价值迭代的过程是: v 1 → v 2 → v 3 → . . . → v ? v_1\rightarrow v_2\rightarrow v_3\rightarrow ...\rightarrow v_* v1?v2?v3?...v??

  • 策略迭代的过程是: π 1 → v π 1 → π 2 → v π 2 → π 3 → v π 3 → . . . → π ? → v ? \pi_1\rightarrow v_{\pi_1}\rightarrow\pi_2\rightarrow v_{\pi_2}\rightarrow \pi_3\rightarrow v_{\pi_3}\rightarrow ...\rightarrow \pi_*\rightarrow v_{*} π1?vπ1??π2?vπ2??π3?vπ3??...π??v??

显然,策略迭代需要先求精确的状态价值函数 ,然后不停更新策略。一次更新是对整个状态空间进行遍历。而价值迭代是在一次遍历后立即停止策略评估,这样对每个状态只进行一次更新,计算的是近似的价值函数。

价值迭代虽然计算简化,但仍需遍历一次状态空间,这种方法其实也称为同步动态规划(Synchronous DP)

事实上,还有一种更为简化的方法叫做就地策略迭代。属于异步动态规划Asynchronous DP方法。即我们并不需要保持所有状态更新的同步,在某次更新中,不对状态集合 S 中的每一个状态都更新,而只随机选取其中的某一个状态的价值函数进行更新,其他状态保持不变 。这样减小计算,可以更快的达到收敛。

小结

本节介绍了如何用动态规划求解最优策略。动态规划是属于在model-based的情况下的算法,因为我们已经假定了环境的动态特性是已知的。动态规划分为策略迭代和价值迭代。策略迭代又分为两个步骤,一个是策略评估,一个是策略改进。策略评估用于计算给定策略的价值函数,属于精确计算。策略改进利用策略改进定理比较两个策略的价值函数,从而对策略进行更新。策略评估需要迭代计算,而策略迭代本身也是个迭代的过程,涉及到迭代中的迭代,造成计算非常复杂,于是就有了价值迭代。价值迭代可看出是特殊的策略迭代,其主要思想是在计算价值函数时只迭代一步,近似计算价值函数。价值迭代也称为同步动态规划。尽管计算简化,但价值迭代中对状态空间的每个状态都要更新一次,仍需遍历一次状态空间。为此,就有人提出异步的迭代思路——就地策略迭代。即我们并不需要保持所有状态更新的同步,在某次更新中,不对状态集合 S 中的每一个状态都更新,而只随机选取其中的某一个状态的价值函数进行更新,其他状态保持不变 。

参考

[1] sutton.Barto.《强化学习(第二版)》

[2] 动态规划——强化学习第四章 - 知乎 (zhihu.com)

[2] 【机器学习】白板推导系列(三十五) ~ 强化学习之动态规划_bilibili

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 10:05:03  更:2021-08-06 10:06:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:22:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码