强化学习概述
强化学习基本原理
强化学习称为增强学习或再励学习(Reinforcement learning),是AlphaGo、AlphaGo Zero等人工智能软件的核心技术。近年来,随着高性能计算、大数据和深度学习技术的突飞猛进,强化学习算法及其应用也是得到了更为广泛的关注和更加快速的发展。尤其是强化学习与深度学习相结合而发展起来的深度强化学习技术已经取得若干突破性进展。AlphaGo与人类顶级棋手之间的对弈,使得深度强化学习技术在学术界和工业界得到了更为广泛的关注。强化学习不仅在计算机博弈中取得巨大成功,而且在机器人控制、汽车智能驾驶、人机对话、过程优化决策与控制等领域,也被认为是实现高级人工智能最有潜力的方法。
强化学习主要包含四个元素:智能体(Agent)、环境状态(environment)、奖励(reward)、动作(action)。举个例子,作为一个决策者(agent)你有两个动作(action)学习、打游戏,你去打游戏学习成绩就会下降,学习成绩就是你的(state)你的父母看到你学习成绩会对你相应的奖励和惩罚(reward),所以经过一定次数的迭代你就会知道什么样的成绩下选择什么样的动作会能够得到最高的奖励的,这就是强化学习的主要思想。
强化学习如何解决问题
首先我们先来看看监督学习是如何解决问题的。从解决问题的角度来看,监督学习解决的是智能感知的问题。其最典型的例子是数字手写体识别,当给出一个手写数字时,监督学习需要判别出该数字是多少。也就是说,监督学习需要感知当前的输入到底长什么样,当智能体感知到输入长什么样时,智能体就可以对它进行分类了。智能体感知其实就是在学习“输入”长的像什么,以及与该长相一一对应的是什么(标签)。因此监督学习解决问题的方法就是输入大量带有标签的数据,让智能体从中学到输入的抽象特征并分类。强化学习则不同,强化学习要解决的问题是序贯决策问题,它不关心输入长什么样,只关心当前输入下应该采用什么动作才能实现最终的目标。再次强调,当前采用什么动作与最终的目标有关。也就是说当前采用什么动作,可以使得整个任务序列达到最优。如何使整个任务序列达到最优呢?这就需要智能体不断地与环境交互,不断尝试,因为智能体刚开始也不知道在当前状态下哪个动作有利于实现目标。强化学习解决问题的框架可用下图表示:
智能体通过动作与环境交互时,环境会返还给智能体一个当前的回报,智能体根据当前的回报评估所采取的动作:有利于实现目标的动作被保留,不利用实现目标的动作被衰减。强化学习和监督学习一样,都需要大量的数据进行训练,但是强化学习所需要的数据类型和监督学习不同,监督学习需要的是多样化的标签数据,强化学习需要的是带有回报的交互数据。由于输入的数据不同,就使得强化学习算法有它自己的获取数据、利用数据的独特方法。
强化学习算法分类
已有的强化学习算法种类繁多,一般可按下列几个标准来分类。
(1)根据强化学习算法是否依赖模型可以分为基于模型的强化学习算法和无模型的强化学习算法。这两类算法的共同点是通过与环境交互获得数据,不同点是利用数据的方式不同。基于模型的强化学习算法利用与环境交互得到的数据学习系统或者环境模型,再基于模型进行序贯决策。无模型的强化学习算法则是直接利用与环境交互获得的数据改善自身的行为。两类方法各有优缺点,一般来讲基于模型的强化学习算法效率要比无模型的强化学习算法效率要高,因为智能体在探索环境时可以利用模型信息。但是,有些根本无法建立模型的任务只能利用无模型的强化学习算法。由于无模型的强化学习算法不需要建模,所以和基于模型的强化学习算法相比,更具有通用性。
(2)根据策略的更新和学习方法,强化学习算法可分为基于值函数的强化学习算法、基于直接策略搜索的强化学习算法以及AC的方法。所谓基于值函数的强化学习方法是指学习值函数,最终的策略时根据值函数贪婪得到的。也就是说,任意状态下,值函数最大的动作为当前的最优策略。基于直接策略搜索的强化学习算法,一般是将策略参数化,学习实现目标的最优参数。基于AC的方法则是联合使用值函数和直接策略搜索。
(3)根据环境返回的回报函数是否已知,强化学习算法可以分为正向强化学习和逆向强化学习。在强化学习中,回报函数时人为指定的,回报函数指定的强化学习算法成为正向强化学习。在很多时候,回报无法指定,如无人机的特效表演,这时可以通过机器学习的方法由函数自己学出来回报。
为了提升强化学习的效率和实用性,学者们又提出了很多强化学习算法,如分层强化学习、元强化学习、多智能体强化学习、关系强化学习和迁移强化学习等。
强化学习算法
基于值函数的强化学习算法
基于值函数的强化学习方法通过评估值函数,并根据值的大小来选择相应的动作,主要包括动态规划 (Dynamic Programming) 、蒙特卡洛(Monte Carlo) 、时间 差分(Temporal Difference) 、值函数逼近(Value Function Approximation) 四类。在强化学习模型已知的情况下,选择动态规划法,在策略迭代和值迭代的过程中利 用值函数来评估和改进策略。现实中大部分问题的模型是未知的。在模型未知的情况下,我们可以通过蒙特卡洛法利用部分随机样本的期望来估计整体模型的期望,在计算值函数时,蒙特卡洛法利用经验平均来代替随机变量的期望。蒙特卡洛法虽然解决了模型未知的问题,但更新方式是回合制,学习效率很低。Sutton 等人提出了采用时间差分法(TD) 来改善这个问题。时间差分法采用自举(Bootstrapping) 方法,在回合学习过程中利用后继状态的值函数来估计当前值函数,使得智能体能够实现单步更新或多步更新,从而极大地提高了学习效率,目前大部分的强化学习研究都基于时间差分方法,如 Q 学习、Sarsa 等相关算法。动态规划、蒙特卡洛、时间差分三种方法应用的同一前提是状态空间和动作空间都必须离散,且状态空间和动作空间不能过大。当状态空间维数很大,或者为连续空间时,使用值函数方法会带来维数爆炸的问题。针对维数很大或连续空间的问题,可以使用函数逼近的方式来表示值函数,然后再利用策略迭代或值迭代方法来构建强化学习算法。
基于直接策略搜索的强化学习算法
直接策略搜索方法是将策略进行参数化,优化参数使得策略的累计回报期望最大。与值函数参数化方法相比,策略参数化更简单、具有更好的收敛性且能较好地解决连续动作选取问题,主要包括经典策略梯度、置信域策略优化(Trust Region Police Optimization,TRPO)、确定性策略搜索三类。
经典策略梯度通过计算策略期望总奖赏关于策略 参数的梯度来更新策略参数,通过多次迭代后最终收 敛得到最优策略。在进行策略参数化时,一般通过使用神经网络来实现,在不断试验的过程中,高回报路径的概率会逐渐增大,低回报路径的概率则会逐渐减小。策略梯度的参数更新方程式为
其中,α为更新步长,J为奖赏函数。
经典策略梯度最大的问题是选取合适的更新步长非常困难,而步长选取是否合适又直接影响学习的效果,不合适的步长都导致策略越学越差,最终崩溃。为了解决更新步长的选取问题,John Schulman 等人提出了TRPO方法。TRPO将新的策略所对应的奖励函数分解为旧策略所对应的奖励函数和其他项两个部分,只要新策略中的其他项满足大于等于零,便可以保证新策略所对应的奖励函数单调不减,策略就不会变差。
经典策略梯度和TRPO采用的均是随机策略,相同的状态选取的动作可能不一样,这使得算法模型要达到收敛需要相对较多的试验数据。为了提高算法效率,Silver等人提出了确定性策略方法。确定性策略利用异策略学习方式,执行策略采用随机策略来保证探索性,为了使状态对应的动作唯一,评估策略采取确定性策略,也称 AC( Actor-Critic) 方法。这种方式所需要的采样数据较少,且能够实现单步更新,算法性能有较大提升。
强化学习主要研究方向
深度强化学习
传统强化学习在模型较为简单的场景取得了较好的效果,但现实中的问题往往都比较复杂,状态空间和动作空间维数很大,此时传统的表格型强化学习不再适用。近年来,随着深度学习的兴起,深度学习与强化学习的结合研究也受到了很多关注。谷歌 DeepMind团队创新性地将具有强大感知能力及表征能力的深度学习与具有决策能力的强化学习相结合,形成了人工智能领域新的研究热点,深 度强化学习( Deep Rein-forcement Learning,DRL)。
DRL中最具代表性的算法是由谷歌 DeepMind 团队中 Mnih 等人提出的深度 Q 网络( Deep Q Network,DQN)。在 DQN 算法中,使用深度神经网络来代替Q 表,能够适用状态空间和动作空间非常复杂的场景,将当前状态值作为神经网络的输入,输出端输出所要采取的动作。并采用 Q 学习的方式对神经网络的参数进行更新,利用经验回放机制减小了数据之间的相关性,缩短了训练时间。
DQN 算法在进行优化时,每次都会选取下一个状态最大 Q 值所对应的动作,这会带来过估计的问题,Van Hasselt 等人在双 Q 学习算法的研究基础上提出了深度双 Q 网络( Deep Double Q-Network,DDQN) 算法。在 DDQN 中有两套不同的参数网络,分别是当前值网络和目标值网络,当前值网络用来选取动作,目标值网络用来对动作做出评估,这样使动作选择和策略评估得以分离,有效降低了 Q 值过估计的风险。
在 DQN 取得成功后,DeepMind 团队中 Timothy 等人又将深度神经网络与确定性策略相结合提出深度确定 性 策 略 梯 度 ( Deep Deterministic Policy Gradient, DDPG) 算法。DDPG 使用深度神经网络来表示策略,并使用策略梯度的方式来更新策略。DDPG 同时具备 AC 算法和深度学习的优点,在实际运用中,这种学习方式往往能够带来更加有效的学习过程。
元强化学习
元学习( Meta Learning) 的目标是学会学习,从一系列学习任务中训练一个模型,这个模型在面对新的学习任务时只需要少量的样本便可以实现快速学习。元学习的学习思想是将同一系列任务的内在特征分成两类,一类是通用特征,另一类是灵敏度较高的特征。在试验过程中,首先通过求最小方差的方式得到通用特征,面对新任务时只需要少量样本就可以学习到具+体任务中其他灵敏度较高的特征。
深度学习对大数据的过度依赖也在一定程度上制约了深度强化学习的发展,为了实现小样本学习,元强化学习研究开始受到关注。元强化学习( Meta Rein- forcement Learning)框架最早由 Schmidhuber 等人提出。JX 等人将深度学习与元强化学习相结合提出深度元强化学习( Deep Meta Reinforcement Learning) 概念,使用神经网络实现了对强化学习任务的快速学习。
大部分关于强化学习的研究都基于环境不变的假设,但现实世界中的环境常常是不断变化的,强化学习的策略也需要不断学习调整以适应不断变化的环境。 Chelsea 等人提出一种模型未知的元学习 ( Model- Agnostic Meta-Learning,MAML) 算法,这种算法不针对某种特定的模型,采用梯度下降方式进行更新,在面对新任务时,模型微调之后便可以获得较好的泛化性能。Maruan 等人将 MAML 算法和循环神经网络相结合研究,实现了强化学习模型在动态环境中的策略自适应。
元强化学习也被认为是最有可能实现通用人工智能的方式,DeepMind 团队在用深度学习复现大脑的导航功能后,又利用元强化学习框架探索研究了大脑中的多巴胺在学习过程中所发挥的作用,帮助解释了神经科学和心理学的一系列发现,也说明了元强化学习和人类智能存在的紧密联系。
逆向强化学习
强化学习是求累计奖赏期望最大时的策略,求解过程中的奖赏函数是人为给定的,但在很多复杂的任务中,奖赏函数往往难以直接给定,而奖赏函数的好坏又对学习结果有着非常重要的影响。吴恩达等人提出逆向强化学习来解决该问题,专家在完成某项任务时,其决策往往是最优或接近最优,当奖赏函数难以给定时,可以通过从专家示例中来学习奖赏函数。
经典的逆向强化学习算法包括基于学徒学习、最大边际 规 划、结 构 化 分 类 和 概 率 模 型 形 式 化 的 方 法。Abbeel 等人提出基于学徒学习的方法,使用函数逼近的方法从专家示例中学习奖赏函数,使得在该奖赏函数下所得的最优策略在专家示例策略附近,主要用来解决退化解和奖赏函数歧义性问题。最大边际规划法的目标是找到使专家示例策略具有比其他策略更大累计奖赏的状态到奖赏的映射,在这个映射下,最优策略能够逼近专家示例策略。Klein 等人提出结构化分类方法,用分类的思想考虑最优的策略,并将估计的专家期望特征作为奖赏函数,这种做法避免了多次迭代计算过程。最大边际规划法和结构化分类方法往往会产生歧义,很多不同的奖赏函数会导致相同的专家策略。Ziebart 等人提出基于最大熵和交叉熵两类概率模型来解决该问题。
经典的逆向强化学习算法不能很好地扩展到状态空间维数很大的系统,与深度学习的结合能够发挥更大的作用。将模型中的状态和动作使用深度神经网络替代,算法可以在大型复杂的系统中取得良好的效果。如基于最大边际法的深度逆向强化学习、基于 DQN 的深度学徒学习和基于最大熵模型的深度逆向强化学习。
强化学习的应用
典型深度强化学习AIphaGo
AlphaGo 在战胜李世石后开启了深度学习的热潮,而其能够战胜人类的关键技术就是深度强化学习。19 ×19 的围棋状态空间复杂度近似 10 的 172 次方,传统的搜索方法只能在局部进行搜索,无法有效提取整个空间的有效特征,容易进入局部最优状态,且当时计算能力较弱,因此无法有效解决围棋这类状态空间庞大的问题。
深度学习采用分层特征提取的方式将搜索的状态空间由棋局缩小到局部态势,最终到单个棋子,大大缩小了搜索空间。同时深层网络能够表示较为复杂的状态空间,这使得深度学习在避免盲目搜索的同时可以扩大搜索范围。采用强化学习中 DDPG 方法建立一个策略网络和一个价值网络,策略网络根据当前的棋局状态来选择下一步棋的位置,价值网络对当前的棋局进行评估,若评估结果为胜的概率大则增大该棋步选择的概率,否则降低选择概率。这种方式大大提高了学习效率和搜索速度,同时辅助以高速的计算能力,最终实现了 AlphaGo 的成功。
服务链网元部署
服务链是一种借助软件定义网络自动创建一个连接网络服务的虚拟服务链,定义了特定顺序的网络功能集合,其网元负责执行处理特定的功能,通常包括虚拟的交换机、虚拟的路由器等,网元的放置位置会影响服务提供和物力资源的使用效率。
实现网元位置的最佳决策,关键在于优化服务链的平均链路延时和服务器的负载。采用强化学习方式 进行学习,通过不断与服务环境的接触和外部环境所
反馈的奖励信号来调整网元的部署位置。该模型的状态集为网元的实时位置,动作集为网元位置的选择,奖励函数根据节点资源的门限值来设定。然后使用 Q 学习算法对状态集和动作集进行表示,并在不断学习迭代的过程中,增大那些使链路延时和负载变小的网元位置 Q 值,最终收敛于最优值。
自主驾驶
随着人工智能的深入研究,自主驾驶与我们的生活越来越接近。自主驾驶的实现可以分为两部分: 第一部分是通过深度学习感知车辆所处的环境并进行信息收集和分析,使智能体能够获取当前的路况信息。第二部分是通过强化学习选取策略,车辆方向盘的转向等操作都是在连续动作空间内选择,因此采用 DDPG 的方法建立策略网络。起初智能体对车辆可能遇到的一些情况,如行人、车辆或偏离轨道等,采取一些随机动作,然后使用价值网络增加避让行人、车辆等安全动作的值,进而增大该动作的选择概率,降低冲撞行人、偏离轨道、超速等动作的选择概率。在不断训练的过程中智能体逐渐学会避让行人、车辆,并选择合适的速度在预定轨道内进行驾驶。
强化学习发展方向
强化学习尤其是深度强化学习正在快速发展,从当前可以初步判断强化学习的发展趋势如下:
第一,强化学习算法与深度学习的结合会更加紧密。
机器学习算法常被分为监督学习、非监督学习和强化学习,以前三类方法分得很清楚,而如今三类方法联合起来使用效果会更好。所以,强化学习算法其中一个趋势便是三类机器学习方法在逐渐走向统一的道路。谁结合得好,谁就会有更好的突破。该方向的代表作如基于深度强化学习的对话生成等。
第二,强化学习算法与专业知识结合得更加紧密。
如果将一般的强化学习算法,如Qlearning算法直接套到专业领域中,很可能不工作。这时一定不能灰心,因为这是正常现象。这时需要把专业领域中的知识加入到强化学习算法中,如何加?这没有统一的方法,而是根据每个专业的内容而变化。通常来说我们可以重塑回报函数,或修改网络结构。该方法的代表作是NIPS2016的最佳论文值迭代网络(Value Iteration Networks)等。
第三,强化学习算法理论分析会更强,算法会更稳定和高效。
强化学习算法大火之后,必定会吸引一大批理论功底很强的牛人。这些牛人追求完美主义、又有很强的数学技巧,所以在强化学习这个理论还几乎是空白的领域,他们会大展身手。该方向代表作如基于深度能量的策略方法,值函数与策略方法的等价性等。、
第四,强化学习算法与脑科学、认知神经科学、记忆的联系会更加紧密。
脑科学和认知神经科学一直是机器学习灵感的源泉,这个源泉往往会给机器学习算法带来革命性的成功。人们对于大脑的认识还很片面,随着脑科学家和认知神经科学家逐步揭开大脑的神秘面纱,机器学习领域必定会再次受益。这个流派应该是以DeepMind和伦敦大学学院为首,因为这些团体里面不仅有很多人工智能学家还有很多认知神经科学家。该方向的代表作如DeepMind关于记忆的一列论文。