前言:本人文学素养较差,且阅读来源为外文翻译书籍,所以本篇博客诸多解释和引用的内容在阅读上可能会造成不适和理解障碍,敬请谅解!博客中涉及到多处数学表达式,我是在本地使用word编辑的,内容是直接从本地粘过来的,所以这些数学公式在博客的网页上能否很好的显示我也不太清楚,就这样吧。。。~如果数学公式不能很好的显示的话,请从网盘自行提取链接: https://pan.baidu.com/s/1C2IBJi4lHE8aA6zWPVpGDw 提取码: n2kd
阅读来源:《机器学习》 Tom M.Mitchell 著 机械工业出版社
增强学习2
昨天说到了agent的学习策略,也就是采用评估函数〖 π〗^* (s)=〖argmax〗_a [〖r(s,a)+γ V〗^π (δ(s,a))]。但是这个评估函数涉及到了回报函数r和状态转移函数δ,在这两个函数至少一个未知的情况下agent都无法根据这个评估函数进行实际的学习。
为了昨天那一大堆成果,我们引入一个新的评估函数Q(s,a),它的定义是其值是从状态s开始并使用a作为第一个动作时的最大折算累积回报。根据昨天的内容,易知Q(s,a)=r(s,a)+〖γV〗^* (δ(s,a))。因为Q(s,a)正是〖 π〗^* (s)=〖argmax〗_a [〖r(s,a)+ γV〗^π (δ(s,a))]中为选择状态s上的最优动作a应最大化的量,故有〖 π〗^* (s)=〖argmax〗_a (Q(s,a)),这个就是最优动作a,说白了就是层级的等量替换,替换的结果就是我们特别关心的两个函数回报函数r和状态转移函数δ被替换掉了,也就是说,运用〖 π〗^* (s)=〖argmax〗_a (Q(s,a)),即使agent缺乏r和δ两个函数的知识,它仍然可以选择出最优动作a。这个公式清楚表明,agent只需考虑当前的状态s下每个可用的动作a,并选择其中使Q(s,a)最大化的动作。
学习Q函数对应于学习最优策略,但是Q怎样才能被学习到呢?这是个特别令初学者好奇的问题。
书上提到,学习的关键在于找到一个可靠的方法,只在时间轴上展开的立即回报序列的基础上估计训练值。(毫无疑问这句话我是直接从书上抄下来的,我实在是没法用更加好理解的中文来翻译它,我甚至没弄懂这句话的意思,不过这没有关系,后面的状态转移方程更加关键。。。)由于Q(s,a)=r(s,a)+〖γV〗^* (δ(s,a)),根据〖 V〗^* (s)的定义可知,〖 V〗^* (s)=〖max〗_a (Q(s,a)),这里我们再次进行代换,有Q(s,a)=r(s,a)+γ〖max〗_(a^' ) (Q(δ(s,a),a^' )),很显然这是一个递归定义,就是一个数列的递推公式的形式,为迭代逼近Q算法提供了基础。为了描述该算法,我们采用符号Q ̇来指代学习器对实际Q函数的估计或者可以叫假设。在此算法中,学习器通过一个大表来存储这个假设Q ̇,里面包含了状态-动作序偶<s,a>所对应的Q ̇(s,a),即学习器对实际存在的但目前未知的Q(s,a)值的假设值。此表可被初始化填充为随机值,你可以认为赋了全0。agent重复地观察其当前的状态s,选择某动作a,执行此动作,然后观察结果回报r以及新状态s^'。然后agent遵循每个这样的转换更新Q ̇(s,a)的表项,按照规则Q ̇(s,a)=r+γ〖max〗_(a^' ) (Q ̇(s^',a^' ))。这里可以对比动态规划中,每一个所谓状态值dp[i1..L..in],也有一个表dp来存储这些值,除了有限边界值是需要设定的,其他的都是0(多数情况下),求解这个动态规划问题的实质就是填表,根据状态转移方程由已知求未知,然后把求解出来的未知值填进表中,继续求剩下的未知值,直到表填完为止。
上述Q学习算法在配图中被更加精准地描述,使用此算法,agent估计的Q ̇在极限时收敛到实际Q函数,只要系统可被建模为一个确定性马尔可夫决策过程(MDP,个人认为如果理解不了可以暂时忽视),回报函数r有界,并且动作的选择可使每个状态-动作<s,a>序偶对被无限频繁的访问。
下面使用书上的图例,对Q学习算法的操作过程进行简单说明。
每次agent从一旧状态前进到一新状态,Q学习会从新状态到旧状态向后传播其Q ̇估计。同时,agent收到的此转换的立即回报被用于扩大这些传播的Q ̇值。
我们回到昨天那张配图的格子案例中,其立即回报函数显示在图中,其中的回报值除了进入目标状态的以外都为0。因为此情况中包含一个吸收目标状态。在此例中,当应用Q算法时,Q ̇值是如何演变的?因为初始的Q ̇值都是0,agent不会改变任意Q ̇表项,直到它恰好到达目标状态并且收到非零的回报。这会导致只有通向目标的转换的Q ̇值被精化。给定足够数量的训练情节(可以理解为让agent多训练不同的情况),信息会从有非零回报的转换向后传播到整个状态-动作空间,最终得到一个Q ̇表。过程很像Floyd最短路径算法,算法越临近执行结束,任意两可联通点间的路径长度向变小的方向趋近,直到两两互通点的最短路径长度确定下来为止。
根据上面的例子我们可以体会到,Q学习算法的两个特点,第一个特点是Q ̇在训练中永远不会下降(如果Floyd算法中每个dp(i,j)永远不会上升一样),即(∀ s,a,n) Q ̇_(n+1) (s,a)≥Q ̇_n (s,a),第二个特点就是整个训练过程中每个Q ̇_n值将保持在0和真实Q值区间内:(∀ s,a,n)Q(s,a)≥Q ̇_n (s,a)≥0,是不是能看到点单调增加且有上界的数列有极限的意思?
这里有很多人可能会疑惑,按照这种训练方式,是否真的会收敛到一个真实的Q函数呢?回答是肯定的。但需要如下条件,第一系统为一个确定性的MDP,第二所有的立即回报值都是有界的,第三agent选择动作的方式为它无限频繁地访问所有可能的状态-动作<s,a>序偶对。在以上三个很强的假设条件下,收敛的关键证明在于具有最大误差的表项Q ̇_n (s,a)必须在训练的更新时将误差按因子γ减小,并且这个误差的极限为0,要证明这个的原因是因为它的新值一部分依赖于有误差的Q ̇估计,一部分又依赖于无误差的立即回报r。
下面的证明不算很难,经历过考研数学复习或拥有高等数学竞赛经验的同学对下面的内容会非常的熟悉,其实就是一个使用迭代放缩证明数列极限的题目。我直接贴图:
这样一来有关Q学习的基本内容就介绍完了,书上这部分内容其实还剩下两个小节,个人感觉对于入门意义不大,明天会把书上有关增强学习的内容收尾,就酱。
====================================================================================================
毕设也算是做的差不多了,剩下点细枝末节,还有就是算法的实时性,我真的感觉我需要去租一台GPU服务器了。。。。