Reinforcement Learning php
对于控制决策问题的解决思路:设计一个回报函数(reward function),若是learning agent(如上面的四足机器人、象棋AI程序)在决定一步后,得到了较好的结果,那么咱们给agent一些回报(好比回报函数结果为正),获得较差的结果,那么回报函数为负。好比,四足机器人,若是他向前走了一步(接近目标),那么回报函数为正,后退为负。若是咱们可以对每一步进行评价,获得相应的回报函数,那么就好办了,咱们只须要找到一条回报值最大的路径(每步的回报之和最大),就认为是最佳的路径。html
加强学习在不少领域已经得到成功应用,好比自动直升机,机器人控制,手机网络路由,市场决策,工业控制,高效网页索引等。本节的加强学习从马尔科夫决策过程(MDP,Markov decision processes)开始。算法
Markov decision processes apache
马尔科夫决策过程由一个五元组构成网络
MDP的动态过程以下:某个agent的初始状态为,而后从A中挑选一个动做执行,执行后,agent按几率随机转移到了下一个状态,。而后再执行一个动做,就转移到了,接下来再执行…,咱们能够用下面的图表示整个过程app
咱们定义通过上面转移路径后,获得的回报函数之和以下机器学习
若是R只和S有关,那么上式能够写做异步
咱们的目标是选择一组最佳的action,使得所有的回报加权和指望最大。分布式
从上式能够发现,在t时刻的回报值被打了的折扣,是一个逐步衰减的过程,越靠后的状态对回报和影响越小。最大化指望值也就是要将大的尽可能放到前面,小的尽可能放到后面。函数
已经处于某个状态s时,咱们会以必定策略来选择下一个动做a执行,而后转换到另外一个状态s'。咱们将这个动做的选择过程称为策略(policy),每个policy其实就是一个状态到动做的映射函数。给定也就给定了,也就是说,知道了就知道了每一个状态下一步应该执行的动做。
咱们为了区分不一样的好坏,并定义在当前状态下,执行某个策略后,出现的结果的好坏,须要定义值函数(value function)也叫折算累积回报(discounted cumulative reward)
能够看到,在当前状态s下,选择好policy后,值函数是回报加权和指望。这个其实很容易理解,给定也就给定了一条将来的行动方案,这个行动方案会通过一个个的状态,而到达每一个状态都会有必定回报值,距离当前状态越近的其余状态对方案的影响越大,权重越高。这和下象棋差很少,在当前棋局下,不一样的走子方案是,咱们评价每一个方案依靠对将来局势(,,…)的判断。通常状况下,咱们会在头脑中多考虑几步,可是咱们会更看重下一步的局势。
从递推的角度上考虑,当期状态s的值函数V,其实能够看做是当前状态的回报R(s)和下一状态的值函数V'之和,也就是将上式变为:
然而,咱们须要注意的是虽然给定后,在给定状态s下,a是惟一的,但可能不是多到一的映射。好比你选择a为向前投掷一个骰子,那么下一个状态可能有6种。再由Bellman等式,从上式获得
s'表示下一个状态。
前面的R(s)称为当即回报(immediate reward),就是R(当前状态)。第二项也能够写做,是下一状态值函数的指望值,下一状态s'符合分布。
能够想象,当状态个数有限时,咱们能够经过上式来求出每个s的V(终结状态没有第二项V(s'))。若是列出线性方程组的话,也就是|S|个方程,|S|个未知数,直接求解便可。
固然,咱们求V的目的就是想找到一个当前状态s下,最优的行动策略,定义最优的V*以下:
就是从可选的策略中挑选一个最优的策略(discounted rewards最大)。
上式的Bellman等式形式以下:
第一项与无关,因此不变。第二项是一个就决定了每一个状态s的下一步动做a,执行a后,s'按几率分布的回报几率和的指望。
若是上式还很差理解的话,能够参考下图:
定义了最优的V*,咱们再定义最优的策略以下:
选择最优的,也就肯定了每一个状态s的下一步最优动做a。
根据以上式子,咱们能够知道
解释一下就是当前状态的最优的值函数V*,是由采用最优执行策略的状况下得出的,采用最优执行方案的回报显然要比采用其余的执行策略要好。
这里须要注意的是,若是咱们可以求得每一个s下最优的a,那么从全局来看,的映射便可生成,而生成的这个映射是最优映射,称为。针对全局的s,肯定了每个s的下一个行动a,不会由于初始状态s选取的不一样而不一样。
Value iteration and policy iteration
本节讨论两种求解有限状态MDP具体策略的有效算法。这里,咱们只针对MDP是有限状态、有限动做的状况,。
值迭代法
|
值迭代策略利用了上节中bellman equation(2)
内循环的实现有两种策略:
1)同步迭代法
拿初始化后的第一次迭代来讲吧,初始状态全部的V(s)都为0。而后对全部的s都计算新的V(s)=R(s)+0=R(s)。在计算每个状态时,获得新的V(s)后,先存下来,不当即更新。待全部的s的新值V(s)都计算完毕后,再统一更新。
这样,第一次迭代后,V(s)=R(s)。
2)异步迭代法
与同步迭代对应的就是异步迭代了,对每个状态s,获得新的V(s)后,不存储,直接更新。这样,第一次迭代后,大部分V(s)>R(s)。
无论使用这两种的哪种,最终V(s)会收敛到V*(s)。知道了V*后,咱们再使用公式(3)来求出相应的最优策略,固然能够在求V*的过程当中求出。
策略迭代法
值迭代法使V值收敛到V*,而策略迭代法关注,使收敛到。
|
(a)步中的V能够经过以前的Bellman等式求得
这一步会求出全部状态s的。
(b)步实际上就是根据(a)步的结果挑选出当前状态s下,最优的a,而后对作更新。
对于值迭代和策略迭代很难说哪一种方法好,哪一种很差。对于规模比较小的MDP来讲,策略通常可以更快地收敛。可是对于规模很大(状态不少)的MDP来讲,值迭代比较容易(不用求线性方程组)。
Learning a model for an MDP
在以前讨论的MDP中,咱们是已知状态转移几率和回报函数R(s)的。但在不少实际问题中,这些参数不能显式获得,咱们须要从数据中估计出这些参数(一般S、A和是已知的)。
假设咱们已知不少条状态转移路径以下:
其中,是i时刻,第j条转移路径对应的状态,是状态时要执行的动做。每一个转移路径中状态数是有限的,在实际操做过程当中,每一个转移链要么进入终结状态,要么达到规定的步数就会终结。
若是咱们得到了不少上面相似的转移链(至关于有了样本),那么咱们就可使用最大似然估计来估计状态转移几率。
分子是从s状态执行动做a后到达s'的次数,分母是在状态s时,执行a的次数。二者相除就是在s状态下执行a后,会转移到s'的几率。
为了不分母为0的状况,咱们须要作平滑。若是分母为0,则令,也就是说当样本中没有出现过在s状态下执行a的样例时,咱们认为转移几率均分。
上面这种估计方法是从历史数据中估计,这个公式一样适用于在线更新。好比咱们新获得了一些转移路径,那么对上面的公式进行分子分母的修正(加上新获得的count)便可。修正事后,转移几率有所改变,按照改变后的几率,可能出现更多的新的转移路径,这样会愈来愈准。
一样,若是回报函数未知,那么咱们认为R(s)为在s状态下已经观测到的回报均值。
当转移几率和回报函数估计出以后,咱们可使用值迭代或者策略迭代来解决MDP问题。好比,咱们将参数估计和值迭代结合起来(在不知道状态转移几率状况下)的流程以下:
} |
在(b)步中咱们要作值更新,也是一个循环迭代的过程,在上节中,咱们经过将V初始化为0,而后进行迭代来求解V。嵌套到上面的过程后,若是每次初始化V为0,而后迭代更新,就会很慢。一个加快速度的方法是每次将V初始化为上一次大循环中获得的V。也就是说V的初值衔接了上次的结果。
参考文献
[1] Machine Learning Open Class by Andrew Ng in Stanford http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=MachineLearning
[2] Yu Zheng, Licia Capra, Ouri Wolfson, Hai Yang. Urban Computing: concepts, methodologies, and applications. ACM Transaction on Intelligent Systems and Technology. 5(3), 2014
[3] Jerry Lead http://www.cnblogs.com/jerrylead/
[3]《大数据-互联网大规模数据挖掘与分布式处理》 Anand Rajaraman,Jeffrey David Ullman著,王斌译
[4] UFLDL Tutorial http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial
[5] Spark MLlib之朴素贝叶斯分类算法 http://selfup.cn/683.html
[6] MLlib - Dimensionality Reduction http://spark.apache.org/docs/latest/mllib-dimensionality-reduction.html
[7] 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用 http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html
[8] 浅谈 mllib 中线性回归的算法实现 http://www.cnblogs.com/hseagle/p/3664933.html
[9] 最大似然估计 http://zh.wikipedia.org/zh-cn/%E6%9C%80%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1
[10] Deep Learning Tutorial http://deeplearning.net/tutorial/
雪松
Microsoft MVP