上一节讲到了强化学习的应用场景及基本的定义。在这一节中,我们来探究如何解决这个问题。首先回顾一下问题:我们有一个状态集合S和一个动作集合A,那么如何在每一个状态st下选择合适的at,在过程结束时获得最大的total R?
解法一 : 动态规划
动态规划是解决贪心问题的一个比较常用的方法,通常来说,动态规划算法分为以下几步:
1.划分阶段:安装问题的时间或者空间的特征,把问题分为若干个阶段;
2.确定状态和状态变量:将问题发展到各个阶段时所处于的情况用不同的状态进行表述;
3.确定决策并标定出状态转移方程:根据决策来确定agent所处的状态之间的关系(转移方程);
4.寻找边界条件:寻找递推结束的条件
不难看出,适合用动态规划进行求解的问题都是具有最优子结构的,最优子结构能够保证在求解问题的过程中实现递推的过程。另外,由于要进行转移方程的标定,问题的各个状态之间满足无后效性。而我们的问题正好满足这两个条件。因此,运用动态规划的思想来解决这个问题是一个比较直观的想法。关于动态规划的具体过程这里不表,有兴趣的同学可以参考动态规划算法详解。
解法二 : 蒙特卡洛算法
蒙特卡洛算法使用随机数来解决问题。有一个well-known的例子:如何计算一个不规则图形的面积?如果使用蒙特卡洛算法,我们会先把图形放到一个一直面积的方框里,然后随机地在方框中进行点采样,采样的次数必须足够多(否则体现不出采样方法的准确性),采样完成之后根据图形内外的点的比例来计算面积,采样点越多,结果就越精确。
那么,如何利用蒙特卡洛方法来解决这个问题呢?因为蒙特卡洛方法是一个足够多次的随机过程,对应于我们在选择action时,如果我们能够随机足够多次,那么我们就可以对正确的action有一个较为准确的拟合结果。这也从另一个角度说明了蒙特卡洛算法如totally environment-free的,即它只通过经验来获得最后的选择方案,与环境无关。在具体的场景中,首先进行策略估计(这里用随机表示),然后根据每一个action中取得的平均reward进行策略改进,因此,这种方法也是model-free的。
解法三 : 强化学习算法
强化学习是近几年来学界和工业界都比较关注的一个研究领域。它也是一种机器学习的方法。根据传统机器学习的分类,机器学习从数据标注上可以分为监督学习和非监督学习,那么强化学习属于哪一种呢?答案是都不属于。首先,强化学习没有监督学习所拥有的data和label,它的主要思想是通过agent对于env的探索获得足够的经验来更新策略;它更不是无监督学习,因为它在最后获得的结果是可评判的(reward)。强化学习算法相比起传统机器学习算法更贴近于人在学习的过程:我们在学习中需要不断对书中的知识进行探索,以期能够在考试中获得更高的分数。
目前比较成熟的强化学习算法主要分为几类:
1.通过价值选择行为(model-free):Q-learning(经典中的经典),Sarsa(由激进转为保守),Deep Q network(DL和RL的结合尝试);
2.通过概率选择行为(model-free):Policy-gradient(能够平滑的处理连续问题),Deterministic Policy-gradient(能够获得确定性的行为),Deep Deterministic Policy-gradient(DL和DPG的结合尝试);
3.通过对环境的感知和想象进行学习(model-based):model-based RL(能够更为准确地对环境的变化进行感知)。
在具体介绍算法之前,我们要弄清楚下面的几个问题:
1.如何解决环境探索过程中state和action的时间关联性?
时间关联性是在构造State和Action集合中一定会遇到的一个问题,时间关联性的存在使得我们的模型不能够具有很好的泛化性。举个例子,我们需要训练一辆无人小车能够自动行驶,如果不消除时间关联性,小车的下一步行为很有可能会强烈地受到上一步的影响,从而跌入一个局部最优不能自拔,具体的表现就是小车在A点时选择了开往B点,在B点时选择开往C点,但是在C点却发现A点是最优解,于是就陷入到一个A-B-C-A-B-C…的死循环中,这个问题产生的根源是因为小车在C点时受到了A-B段的影响,因此不能在C点时作出与之前时间无关的正确决策。如果我们能够将这种时间关联性打散,对于提升效果来说将会大有裨益。
关于这个问题,前人已经为我们铺好了路。这就是强化学习中一个非常重要的思想——经验回放(Experience Replay)。Replay的思想鼓励我们建立一个关于(st,at,rt,st+1)四元组的一个buffer,我们在训练时不是连续地对四元组进行采样,而是采用一种有放回的随机采样的手段,人为地切断每一个四元组的相关性。这样做能够使得训练过程更鲁棒。
2.如何保证策略能够尽量地挖掘出环境的信息?
想象这样一种情况:还是上面小车的例子,假设我们的小车在训练的过程中添加一个约束:它的活动范围只有整个世界的一半,那么尽管它内能够达到永远不会碰撞的效果,我们也不会认为它的结果是好的。但是我们在训练的过程中却往往会引入这样的一个问题,原因在于我们的模型训练得过好,以至于小车认为在这半个世界里是“安全”的,它也就不愿意去“探索“另一边的世界。这在强化学习中被称为”2E”问题(Exploit-Explornation Problem)。如果我们的模型趋于探索(训练得不够好,对应于欠拟合),那么模型对于环境的适应性显然很弱;相反的,如果我们的模型训练得过好(对应于过拟合),那么模型可能会在当前环境下陷入局部最优。这很像传统机器学习中的bias-variance trade-off的问题。在传统机器学习中,最常见的一种方式是通过简化模型来解决这个问题。但是在强化学习中,有些算法是model-free的,不存在模型,也无法简化。
如何解决这个问题呢?通常的做法是采用一种叫ε-greedy的方法。这种方法的基本思想是通过一个系数ε来平衡2E之间的关系,即在每一次对action的选择过程中,以ε的概率选择从策略中选择action,以1-ε的概率随机地选择action,这样既能保证agent对策略的利用,有保证了agent对环境的探索能力。
对应的,对于确定性的方法来说,不能总是选择随机的方法,因此强化学习是基于一种叫“异策略”的方案进行学习过程的。即训练的策略和产生行为的策略并不是同一个策略。要记住,我们通过训练完成的策略是确定性的,而最后得出的action却有一定的随机性,它们之间的关系可以通过一个参数ε进行调节。