本文主要阐述:强化学习基本概念、值函数和状态动作值函数的关系、基本求解问题以及DP求解方法。
1.基本概念
几个重要的概念:
1)第一个是环境的状态S,t时刻环境的状态$S_t$是它的环境状态集中某一个状态。
2)第二个是个体的动作A,t时刻个体采取的动作$A_t$是它的动作集中某一个动作。
3)第三个是环境的奖励R,t时刻个体在状态$S_t$采取的动作$A_t$对应的奖励$R_{t+1}$会在t+1时刻得到。
4)第四个是个体的策略(policy)π,它代表个体采取动作的依据,即个体会依据策略π来选择动作。最常见的策略表达方式是一个条件概率分布π(a|s), 即在状态s时采取动作a的概率。即$π(a|s)=P(A_t=a|S_t=s)$.此时概率大的动作被个体选择的概率较高。
5)第五个是个体在策略π和状态s时,采取行动后的价值(value),一般用$v_π(s)$表示。这个价值一般是一个期望函数。虽然当前动作会给一个延时奖励$R_{t+1}$,但是光看这个延时奖励是不行的,因为当前的延时奖励高,不代表到了t+1,t+2,...时刻的后续奖励也高。比如下象棋,我们可以某个动作可以吃掉对方的车,这个延时奖励是很高,但是接着后面我们输棋了。此时吃车的动作奖励值高但是价值并不高。因此,价值要综合考虑当前的延时奖励和后续的延时奖励。价值函数$v_π(s)$一般可以表示为:
$v_π(s)=E_π(R_{t+1}+γR_{t+2}+γ^2R_{t+3}+……|S_t=s)$。
不同的算法会有对应的一些价值函数变种,但思路相同。同时有,
$v_π(s)=E_π(R_{t+1}+γv_π(S_{t+1})|S_t=s)$,
这个递推式子我们一般将它叫做贝尔曼方程。
6)$γ$是第六个模型要素,即奖励衰减因子,在[0,1]之间。如果为0,则是贪婪法,即价值只由当前延时奖励决定,如果是1,则所有的后续状态奖励和当前奖励一视同仁。大多数时候,我们会取一个0到1之间的数字,即当前延时奖励的权重比后续奖励的权重大。
7)第七个是环境的状态转化模型,可以理解为一个概率状态机,它可以表示为一个概率模型,即在状态s下采取动作a,转到下一个状态s′的概率,表示为$𝑃^𝑎_{𝑠𝑠′}$。
更详细的,如果按照真实的环境转化过程看,转化到下一个状态s′的概率既与上一个状态s有关,还与上上个状态,以及上上上个状态有关。这一会导致我们的环境转化模型非常复杂,复杂到难以建模。因此我们需要对强化学习的环境/状态转化模型进行简化。简化的方法就是假设状态转化的马尔科夫性,也就是假设转化到下一个状态s′的概率仅与上一个状态s有关,与之前的状态无关。
状态转移概率用公式表示为:$𝑃𝑎𝑠𝑠′=E(𝑆_{𝑡+1}=𝑠′|𝑆_𝑡=𝑠,𝐴_𝑡=𝑎)$
这种只考虑上一个状态的决策过程称为马尔科夫决策过程(MDP)。
8)第八个是探索率ϵ,这个比率主要用在强化学习训练迭代过程中,由于我们一般会选择使当前轮迭代价值最大的动作,但是这会导致一些较好的但我们没有执行过的动作被错过。因此我们在训练选择最优动作时,会有一定的概ϵ不选择使当前轮迭代价值最大的动作,而选择其他的动作。
9)第九个是状态-动作价值函数$𝑞_π(𝑠,𝑎)$。同样的方法,我们可以得到动作价值函数$𝑞_π(𝑠,𝑎)$的贝尔曼方程:
$𝑞_π(𝑠,𝑎)$
$ = E_π(G_t|S_t=s,A_t=a) $
$= E_π(R_{t+1}+γR_{t+2}+γ^2R_{t+3}+……|S_t=s,A_t=a)$
$= E_π(R_{t+1}+γq_π(S_{t+1},A_{t+1})|S_t=s,A_t=a)$
10)第十个是return,$G_t$。t时刻之后未来执行一组action后能够获得的reward,即t+1,t+2…所有时刻的reward之和。
$ G_t=R_{t+1}+γR_{t+2}+ +γ^2R_{t+3}+……$
2.值函数和状态动作值函数的关系
值函数和状态动作值函数存在一定的转化关系:
$v_π(s)=∑_{a∈A}π(a|s)*q_π(s,a)$
也就是说,状态价值函数是所有动作价值函数基于策略π的期望。通俗说就是某状态下所有状态动作价值乘以该动作出现的概率,最后求和,就得到了对应的状态价值。
反过来,利用上贝尔曼方程,我们也很容易从状态价值函数$v_π(s)$表示动作价值函数$q_π(s,a)$,即:$q_π(𝑠,𝑎)=𝑅^a_s+γ∑_{s'∈S} P^a_{ss'} * v_π(s')$
这两个转化过程也可以从下图中直观的看出:
结合上面两个式子,可以得到:
$v_{\pi}(s) = \sum\limits_{a \in A} \pi(a|s)(R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{\pi}(s'))$
$q_{\pi}(s,a) = R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^a\sum\limits_{a' \in A} \pi(a'|s')q_{\pi}(s',a')$
3.基本问题
强化学习的两个基本问题。
第一个问题是预测,即给定强化学习的6个要素:状态集$S$, 动作集$A$, 模型状态转化概率矩阵$P$, 即时奖励$R$,衰减因子$\gamma$, 给定策略$\pi$, 求解该策略的状态价值函数$v(\pi)$;
第二个问题是控制,也就是求解最优的价值函数和策略。给定强化学习的5个要素:状态集$S$, 动作集$A$, 模型状态转化概率矩阵$P$, 即时奖励$R$,衰减因子$\gamma$, 求解该策略的状态价值函数$v(\pi)\*$和最优策略$\pi\*$。
4.使用动态规划求解
动态规划并不是求解强化学习问题的最优方法,原因有两个:
1)经典的DP算法对MDP有完美假设,这在实际环境中通常是不存在的;
2)DP计算过程耗时严重。
尽管如此,DP是理解强化学习的基础,后续的强化学习算法都可以看作是:在没有高耗时、完美假设的前提下,对DP效果的逼近。
以下内容摘自《Reinforcement Learning:An Introduction》Chapter 4:
The term dynamic programming (DP) refers to a collection of algorithms that can be used to compute optimal policies given a perfect model of the environment as a Markov decision process (MDP). Classical DP algorithms are of limited utility in reinforcement learning both because of their assumption of a perfect model and because of their great computational expense, but they are still important theoretically. DP provides an essential foundation for the understanding of the methods presented in the rest of this book. In fact, all of these methods can be viewed as attempts to achieve much the same effect as DP, only with less computation and without assuming a perfect model of the environment.
4.1.策略评估求解预测问题
首先,我们来看如何使用动态规划来求解强化学习的预测问题,即求解给定策略的状态价值函数的问题。这个问题的求解过程我们通常叫做策略评估(Policy Evaluation)。
策略评估的基本思路是从任意一个状态价值函数开始,依据给定的策略,结合贝尔曼期望方程、状态转移概率和奖励同步迭代更新状态价值函数,直至其收敛,得到该策略下最终的状态价值函数。
假设我们在第k轮迭代已经计算出了所有的状态的状态价值,那么在第k+1轮我们可以利用第k轮计算出的状态价值计算出第k+1轮的状态价值。这是通过贝尔曼方程来完成的。即:
$v_{k+1}(s) = \sum\limits_{a \in A} \pi(a|s)(R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{k}(s'))$
由于策略$\pi$是已知的,所以不需要再使用下标标注。我们每一轮可以对计算得到的新的状态价值函数再次进行迭代,直至状态价值的值改变很小(收敛),那么我们就得出了预测问题的解,即给定策略的状态价值函数$v(\pi)$。
4.2.控制问题
上面我们讲了使用策略评估求解预测问题,现在我们再来看如何使用动态规划求解强化学习的第二个问题控制问题(即,求解最优的价值函数和策略)。
4.2.1.策略迭代求解控制问题
一种可行的方法就是根据我们之前基于任意一个给定策略评估得到的状态价值来及时调整我们的动作策略,这个方法我们叫做策略迭代(Policy Iteration)。
在策略迭代过程中,我们循环进行两部分工作,第一步(策略评估)是使用当前策略$\pi∗$评估计算当前策略的最终状态价值$v∗$,第二步(策略提升)是根据状态价值$v∗$根据一定的方法(比如贪婪法,或者其他方法)更新策略$\pi∗$,接着回到第一步,一直迭代下去,最终得到收敛的策略$\pi∗$和状态价值$v∗$。
对应贝尔曼方程迭代式:$v_{k+1}(s) = \sum\limits_{a \in A} \pi(a|s)(R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{k}(s'))$
个人理解:策略π与价值v相辅相成迭代更新,这种迭代方法类似于k中心点聚类算法中心点与簇划分的迭代思路。
4.2.2.价值迭代求解控制问题
和上一节相比,我们没有等到状态价值收敛才调整策略,而是随着状态价值的迭代及时调整策略, 这样可以大大减少迭代次数。那么此时我们的策略迭代优化为价值迭代。即,每轮迭代先做策略评估,计算出价值$v_k(s)$,然后基于一定的方法(比如贪婪法)更新当前策略π。最后得到最优价值函数$v∗$和最优策略$\pi∗$。
此时我们的状态价值的更新方法也和策略迭代不同。现在的贝尔曼方程迭代式子如下:
$v_{k+1}(s) = \max_{a \in A}(R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{k}(s'))$
可见由于策略调整,我们现在价值每次更新倾向于贪婪法选择的最优策略对应的后续状态价值,这样收敛更快。
个人理解,策略迭代和价值迭代的差别在于:在策略迭代中,策略更新与状态更新交替进行,价值评估收敛后才进入策略提升,策略提升后策略发生变化,价值评估重新执行,策略评估会进行多轮,耗时较长。优点是策略评估的方式可以贪婪的,也可以是其他方法。
在价值迭代中,直接采用贪婪法,跳过策略迭代步骤,每一次价值评估都采用最新的最优策略,实现了价值和策略的同步更新迭代,所以收敛更快(因为默认了策略采用贪婪法,找到最优价值后自然就会有最优策略)。
4.3.异步动态规划
参考《Reinforcement Learning:An Introduction》4.5小节:
所谓异步动态规划算法,每一次迭代并不对所有状态的价值进行更新,而是依据一定的原则有选择性的更新部分状态的价值,这类算法有自己的一些独特优势,当然也有一些额外的代价。
常见的异步动态规划算法有三种:
第一种是原位动态规划 (in-place dynamic programming), 此时我们不会另外保存一份上一轮计算出的状态价值。而是即时计算即时更新。这样可以减少保存的状态价值的数量,节约内存。代价是收敛速度可能稍慢。
第二种是优先级动态规划 (prioritised sweeping):该算法对每一个状态进行优先级分级,优先级越高的状态其状态价值优先得到更新。通常使用贝尔曼误差来评估状态的优先级,贝尔曼误差即新状态价值与前次计算得到的状态价值差的绝对值。这样可以加快收敛速度,代价是需要维护一个优先级队列。
第三种是实时动态规划 (real-time dynamic programming):实时动态规划直接使用个体与环境交互产生的实际经历来更新状态价值,对于那些个体实际经历过的状态进行价值更新。这样个体经常访问过的状态将得到较高频次的价值更新,而与个体关系不密切、个体较少访问到的状态其价值得到更新的机会就较少。收敛速度可能稍慢。
4.4.动态规划求解的缺陷
动态规划是我们遇到的第一个系统求解强化学习预测和控制问题的方法。它的算法思路比较简单,主要就是利用贝尔曼方程来迭代更新状态价值,用贪婪法之类的方法迭代更新最优策略。
动态规划算法使用全宽度(full-width)的回溯机制来进行状态价值的更新,也就是说,无论是同步还是异步动态规划,在每一次回溯更新某一个状态的价值时,都要回溯到该状态的所有可能的后续状态,并利用贝尔曼方程更新该状态的价值。这种全宽度的价值更新方式对于状态数较少的强化学习问题还是比较有效的,但是当问题规模很大的时候,动态规划算法将会因贝尔曼维度灾难而无法使用。因此我们还需要寻找其他的针对复杂问题的强化学习问题求解方法。
参考资料
1.刘建平Pinard 博客
2.莫烦 博客
3.《Reinforcement Learning:An Introduction》
4.强化学习中价值迭代和策略迭代各有什么优缺点?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。