【新智元导读】机器学习技术总结回顾第二期:上一期,作者回顾了生成对抗网络 ICYMI 及 3 篇经典论文,本期关注的内容是强化学习。这本文中,作者从数学原理入手,深入分析强化学习。最后以深度强化学习著称的 DeepMind 两篇经典 Nature 论文为例,详解技术要领。推荐直接到作者博客看原文哦。
我们平均每周会推出新内容,对深度学习特定领域的研究论文进行汇总和说明。在上一期,我们回生成对抗网络 ICYMI 及 3 篇经典论文,本期关注的内容是强化学习。
进入正题之前,先了解一下什么是强化学习。机器学习有三个主要分类:
监督学习可能是大家最为熟悉的,其原理依据创建函数的方法或一组训练数据得出的模式,这些数据包含输入内容和相关标签。卷积神经网络就是一个很好的例子,输入的是图片,输出的是这些图片的分类。
无监督学习通过聚类分析的方法,找出数据内部的某种关系结构。典型的例子就要数最众所周知的ML聚类算法 K-means 算法。
强化学习主要研究在特定情境或环境下的操作方式,使得奖励信号最大化。强化学习与监督式学习之间有一个有趣的区别:强化学习的返回信号只能判断程序的操作(或输入)是好还是不好,而无法判断出哪一个程序操作是最好的。这与卷积神经网络不同,卷积神经网络程序里,每个图片的相应标签输入与输出都有设定好的指令。强化学习的另外一个独特之处在于,一个程序操作会影响其接收到的数据。比如,某个程序操作向左移动,而不是向右移动,意味着不同的操作中程序会接受到不同的输入信息。
正如上述所提到的,强化学习研究的是如何找出决策或操作的最优方案,以获得最大的奖励。奖励(Reward)是指一个回馈信号,显示操作在策略时间内是否执行得很好。程序每执行一个操作的行为(A)是指奖励(当前程序操作好或不好)和状态(S)的函数。状态是指程序所在的环境。对从环境状态到操作进行绘图叫做策略(P),策略基本上决定了特定时间内或特定情境下的操作方法。这样,我们就有了一个值函数(V),用来检测每个操作位置好在哪里。这跟奖励不一样,奖励是指直接感觉好的地方,而值函数是指它怎样好。最后还有一个模式(M),代表这个环境下的程序。程序模式指的就是程序在某个环境下的表现。
下面,我们先看一个例子。
马尔科夫过程(MDP)
我们首先需要想一下强化学习有哪些问题。假设有一个小型机器人,放在一个屋子里。如果不给这个机器人编写程序,使它移动、走动或执行其他操作,它就会一直待在那里,没有任何动作。这里机器人就是一个程序。
奖励函数由我们设定程序去完成什么任务来决定。比如说,让机器人移到屋子的角落,就可以获得奖励。机器人成功移到角落处,则加 25 分,每移动一步则减 1 分,程序设定目标是要让机器人以最快的速度移动到角落。程序操作可以向东、南、西、北四个方向移动。程序的策略很简单,程序操作总是向着目标位置移动,其值函数也会增加。很简单吧?获得高值函数的地方就是指这地方是好的(从长期奖励的角度讲)。
这样,整个强化环境就可以用马尔可夫决策过程(MDP)来表述了。如果有人从没听说过这个术语,简单的说,MDP 就是程序建立决策模型的框架。它包含一个有限的状态集(以及这么状态下的值函数)、一个有限行为集,策略以及奖励函数。值函数有两个主要的术语。
1. 状态值函数(State-value function):指在 S 状态和π策略下获得的预期返回值,这个返回值的计算方法是:将每一次移动的奖励相加求得出的值(γ 指常数折现系数,意思是第10 次移动获得的奖励要比第1 次移动获得的奖励小一些)。
2. 行为值函数:在S状态和π策略下进行一个操作的预期奖励值(等式同上,除非有另外的情况At = a)。
解开 MDP 式子
下面就来解这个MDP式子,可以解出任何状态下程序奖励的最大值,也就是最佳行为(策略)。利用动态程序设计,确切地说是策略迭代法,可以解出一个最优策略。(其实还有另外一个方法——数值迭代法,这里就不多赘述了)。思路是使用一些原始策略 π1,求出状态值函数的值。利用 Bellman 期望方程(Bellman expectation equation)来解。
方程的意思是,在 π 策略下,可以解出的中间奖励 Rt+1 预期奖励总和以及接续状态 St+1的值函数。注意看的话可以发现,这跟上一段的值函数定义是一样的。使用这个方程式是策略计算的一部分。为了得到更好的策略,我们采用一个策略提高步骤,根据值函数进行操作。换句话说,程序会执行返回最大值的操作。
为了获得最优策略,我们重复以上两个步骤,反反复复,直到得到最优策略π*时系统停止操作。
没有给定 MDP 怎么办?
策略迭代法虽然很强大,但是只有给定了 MDP 才可以操作。MDP 会给出环境是如何操作的,但这在现实情况下是做不到的。没有给定MDP时,可以采用无模型法,直接进行程序和环境的体验或交互,得出值函数和策略。没有给定MDP信息时,直接进行策略计算和策略提高的重复操作。
这种方法下,我们不用过度优化状态值函数的方法来提高策略,而是通过过度优化行为值函数来实现。下面是将状态值函数分解成中间奖励总值和接续状态值函数的方法。
下面 jieshao 重复过程策略计算和策略提高的过程,除非行为状态值Q代替了状态值函数V,具体的过程细节这里不细讲。要理解 MDP 的 free evaluation 和提高方法,就得要把 Monte Carlo 学习算法、时序查分算法、SARSA 学习算法的相关博文全部看一遍。
值函数逼近
学到这一步,下面我们将用相对简单的方法来说。根据上面的 Q 等式,给定状态 S 和行为A,可以计算出一个数,接近于预期奖励。可以想象一下,程序每向右移动 1 毫米,都可以得出一个新的状态 S,进而计算出一个 Q 值。
但是,在现实的强化问题中,有数百万种状态,所以值函数的概括功能就显得尤为重要,这样就不需要计算每一个状态下的值函数。解决方案是用Q值函数逼近大方法概括出未知的状态。利用Qhat函数计算出Q值在特定状态S和特定行为A下大概的近似值。
在这个函数中代入S、A和权向量W(采用梯度下降算法),计算出x(代表S和A的特征向量)和W之间的点积。要提高函数精确度,就要计算出真实Q值与输出的近似函数之间的差。
计算出差值后,采用梯度下降算法求出最小值,进而得出最优的W矢量值。这种函数逼近概念在下面的论文中会有重点讲述。
强化学习中的探索与开发
最后一点非常有意思,值得讨论,即强化学习中的探索(exploration)与开发(exploitation)。
开发是指程序执行已知的过程,并作出奖励最大化的操作。程序总是会根据它已有的知识体系去执行最优的操作,这里强调它拥有一个已有的知识体系。但是如果程序并不熟悉所有的状态空间,那么可能就无法做出最优的操作,这种探索状态空间的操作就叫探索。
拿一个现实的例子来书,比如今晚要选择在哪个餐厅吃饭。你(代表程序)知道自己爱吃墨西哥菜,根据强化学习理念,去墨西哥式餐厅将会获得最大的奖励,你会开心满足。然而,你还可以选择去吃意大利菜,但你从没吃过,有可能比墨西哥菜好吃,也有可能很难吃。那么,去开发程序已有的知识体系还是怀着探索更优奖励而选择尝试新东西,两者的权衡是强化学习(实际上,还有日常生活)最主要的挑战之一。
强化学习资源
经典论文详解
AlphaGo之父:DeepMind深度强化学习创造人类级别智能体
《自然》论文详解:AlphaGo 背后的深度神经网络和树搜索
编译来源:https://adeshpande3.github.io/adeshpande3.github.io/Deep-Learning-Research-Review-Week-2-Reinforcement-Learning?