强化学习这个观点是2017年乌镇围棋峰会上Alpha Go降服了当时天下排名第一的柯洁而被普通大众知道,后面随着强化学习在各大游戏比如王者光彩中被运用,而被越来越多的人熟知。王者光彩AI团队,乃至在顶级期刊AAAI上揭橥过强化学习在王者光彩中运用的论文。
那么强化学习到底是什么,如何运用的了?下面和大家分享我对付强化学习的全体过程,以及强化学习目前在工业界是如何运用的一些意见,欢迎沟通互换,没有任何打算机根本的也可以看的懂。
01 简介强化学习
强化学习是机器学习的一个分支,关于机器学习我不再重复先容,感兴趣的读者可以看我之前写的机器学习文章:策略产品经理必读系列—第一讲机器学习

1. 什么是强化学习 强化学习是一种机器学习的学习办法(四种紧张的机器学习办法阐明见上图)。 上图没有提到深度学习,是由于从学习办法层面上来说,深度学习属于上述四种办法的子集。而强化学习是独立存在的,以是上图单独列出强化学习,而没有列出深度学习。 强化学习和其他三种学习办法紧张不同点在于:强化学习演习时,须要环境给予反馈,以及对应详细的反馈值。它不是一个分类的任务,不是金融反敲诈场景中如何分辨敲诈客户和正常客户。强化学习紧张是辅导演习工具每一步如何决策,采取什么样的行动可以完成特定的目的或者使收益最大化。 比如AlphaGo下围棋,AlphaGo便是强化学习的演习工具,AlphaGo走的每一步不存在对错之分,但是存在“好坏”之分。当前这个棋面下,下的“好”,这是一步好棋。下的“坏”,这是一步臭棋。 强化学习的演习根本在于AlphaGo的每一步辇儿为环境都能给予明确的反馈,是“好”是“坏”?“好”“坏”详细是多少,可以量化。强化学习在AlphaGo这个场景中终极演习目的便是让棋子盘踞棋面上更多的区域,赢得末了的胜利。 打一个不是很恰当的比喻,有点像马戏团训猴一样。 驯兽师敲锣,演习猴站立敬礼,猴是我们的演习工具。如果猴完成了站立敬礼的动作,就会得到一定的食品褒奖,如果没有完成或者完成的不对,就没有食品褒奖乃至是鞭子抽打。韶光久了,每当驯兽师敲锣,猴子自然而然地就知道要站立敬礼,由于这个动作是当前环境下得到收益最大的动作,其他动作就不会有食品,乃至还要被鞭子抽打。 强化学习的灵感来源于生理学里的行为主义理论: 那基于上述理论,强化学习便是演习工具如何在环境给予的褒奖或惩罚的刺激下,逐步形成对刺激的预期,产生能得到最大利益的习气性行为。 2. 强化学习的紧张特点 1)试错学习 强化学习须要演习工具一直地和环境进行交互,通过试错的办法去总结出每一步的最佳行为决策,全体过程没有任何的辅导,只有冰冷的反馈。所有的学习基于环境反馈,演习工具去调度自己的行为决策。 2)延迟反馈 强化学习演习过程中,演习工具的“试错”行为得到环境的反馈,有时候可能须要等到全体演习结束往后才会得到一个反馈,比如Game Over或者是Win。当然这种情形,我们在演习时候一样平常都是进行拆解的,只管即便将反馈分解到每一步。 3)韶光是强化学习的一个主要成分 强化学习的一系列环境状态的变革和环境反馈等都是和韶光强挂钩,全体强化学习的演习过程是一个随着韶光变革,而状态&反馈也在一直变革的,以是韶光是强化学习的一个主要成分。 4)当前的行为影响后续吸收到的数据 为什么单独把该特点提出来,也是为了和监督学习&半监督学习进行区分。在监督学习&半监督学习中,每条演习数据都是独立的,相互之间没有任何关联。但是强化学习中并不是这样,当前状态以及采纳的行动,将会影响下一步吸收到的状态。数据与数据之间存在一定的关联性。 02 详解强化学习 下面我们对强化学习进行详细的先容: 1. 基本组成部分 本文利用一个小游戏叫做Pacman(吃豆人)的游戏先容强化学习(Reinforcement Learning)的基本组成部分。游戏目标很大略,便是Agent要把屏幕里面所有的豆子全部吃完,同时又不能被幽灵碰到,被幽灵碰到则游戏结束,幽灵也是在一直移动的。 Agent每走一步、每吃一个豆子或者被幽灵碰到,屏幕左上方这分数都会发生变革,图例中当前分数是435分。这款小游戏,也是加州大学伯克利分校在上强化学习这门课程时利用的cousrwork(http://ai.berkeley.edu/project_overview.html),后续文章也会利用这个小游戏进行强化学习实战讲解。 1)Agent(智能体) 强化学习演习的主体便是Agent,有时候翻译为“代理”,这里统称为“智能体”。Pacman中便是这个伸开大嘴的黄色扇形移动体。 2)Environment(*** 全体游戏的大背景便是环境;Pacman中Agent、Ghost、豆子以及里面各个隔离板块组成了全体环境。 3)State(状态) 当前 Environment和Agent所处的状态,由于Ghost一贯在移动,豆子数目也在一直变革,Agent的位置也在一直变革,以是全体State处于变革中;这里特殊强调一点,State包含了Agent和Environment的状态。 4)Action(行动) 基于当前的State,Agent可以采纳哪些action,比如向左or右,向上or下;Action是和State强挂钩的,比如上图中很多位置都是有隔板的,很明显Agent在此State下是不能往左或者往右的,只能高下。 5)Reward(褒奖) Agent在当前State下,采纳了某个特定的action后,会得到环境的一定反馈便是Reward。这里面用Reward进行统称,虽然Reward翻译成中文是“褒奖”的意思,但实在强化学习中Reward只是代脸色况给予的“反馈”,可能是褒奖也可能是惩罚。比如Pacman游戏中,Agent遇见了Ghost那环境给予的便是惩罚。 以上是强化学习的五个基本组成部分。 2. 强化学习演习过程 下面我们须要先容一下强化学习的演习过程。全体演习过程都基于一个条件,我们认为全体过程都是符合马尔可夫决策过程的。 1)马尔可夫决策过程(Markov Decision Process) Markov是一个俄国的数学家,为了纪念他在马尔可夫链所做的研究,以是以他命名了“Markov Decision Process”,以下用MDP代替。 MDP核心思想便是下一步的State只和当前的状态State以及当前状态将要采纳的Action有关,只回溯一步。比如上图State3只和State2以及Action2有关,和State1以及Action1无关。我们已知当前的State和将要采纳的Action,就可以推出下一步的State是什么,而不须要连续回溯上上步的State以及Action是什么,再结合当前的(State,Action)才能得出下一步State。 实际运用中基本场景都是马尔可夫决策过程,比如AlphaGo下围棋,当前棋面是什么,当前棋子准备落在哪里,我们就可以清晰地知道下一步的棋面是什么了。 为什么我们要先定义好全体演习过程符合MDP了,由于只有符合MDP,我们才方便根据当前的State,以及要采纳的Action,推理出下一步的State。方便在演习过程中清晰地推理出每一步的State变更,如果在演习过程中我们连每一步的State变革都推理不出,那么也无从演习。 接下来我们利用强化学习来辅导Agent如何行动了。 3. 强化学习算法归类 我们选择什么样的算法来辅导Agent行动了?本身强化学习算法有很多种,关于强化学习算法如何分类,有很多种分类办法,这里我选择三种比较常见的分类办法。 1)Value Based 解释:基于每个State下可以采纳的所有Action,这些Action对应的Value, 来选择当前State如何行动。强调一点这里面的Value并不是从当前State进入下一个Stae,环境给的Reward,Reward是Value组成的一部分。 但我们实际演习时既要关注当前的收益,也要关注长远的收益,以是这里面的Value是通过一个打算公式得出来的,而不仅仅是状态变更环境立即反馈的Reward。由于Value的打算较为繁芜,常日利用贝尔曼方程,在此不再细述。 如何选择Action:大略来说,选择当前State下对应Value最大的Action。选择能够带来最大Value加成的Action。比如下图StateA状态下,可以采纳的Action有3个,但是Action2带来的Value最大,以是终极Agent进入StateA状态时,就会选择Action2。 强调一点这里面的Value值,在强化学习演习开始时都是不知道的,我们一样平常都是设置为0。然后让Agent不断去考试测验各种Action,不断与环境交互,不断得到Reward,然后根据我们打算Value的公式,一直地去更新Value,终极在演习N多轮往后,Value值会趋于一个稳定的数字,才能得出详细的State下,采纳特定Action,对应的Value是多少。 代表性算法:Q-Learning、SARSA(State-Action-Reward-State-Action) 适用场景:Action空间是离散的,比如Pacman里面的动作空间基本是“高下旁边”,但有些Agent的动作空间是一个连续的过程,比如机器臂的掌握,全体运动是连续的。如果强行要将连续的Action拆解为离散的也是可以的,但是得到的维度太大,每每是指数级的,不适宜演习。 同时在Value-Based场景中,终极学习完每个State对应的最佳Action基本固定。但有些场景纵然终极学习完每个State对应的最佳Action也是随机的,比如剪刀石头布游戏,最佳策略便是各1/3的概率出剪刀/石头/布。 2)Policy Based Policy Based策略便是对Value Based的一个补充 解释:基于每个State可以采纳的Action策略,针对Action策略进行建模,学习出详细State下可以采纳的Action对应的概率,然后根据概率来选择Action。如何利用Reward去打算每个Action对应的概率里面涉及到大量的求导打算,对详细过程感兴趣的可以参考这篇文章:https://zhuanlan.zhihu.com/p/54825295 如何选择Action:基于得出的策略函数,输入State得到Action。 代表性算法:Policy Gradients 适用场景:Action空间是连续的&每个State对应的最佳Action并不一定是固定的,基本上Policy Based适用场景是对Value Based适用场景的补充。对付Action空间是连续的,我们常日会先假设动作空间符合高斯分布,然后再进行下一步的打算。 3)Actor-Critic AC分类便是将Value-Based和Policy-Based结合在一起,里面的算法结合了2.3.1和2.3.2。 上述便是三大类常见的强化学习算法,而在Pacman这个游戏中,我们就可以适用Value-Based算法来演习。由于每个State下终极对应的最优Action是比较固定的,同时Reward函数也随意马虎设定。 4)其他分类 上述三种分类是常见的分类方法,有时候我们还会通过其他角度进行分类,以下分类方法和上述的分类存在一定的重叠: 根据是否学习出环境Model分类:Model-based指的是,agent已经学习出全体环境是如何运行的,当agent已知任何状态下实行任何动作得到的回报和到达的下一个状态都可以通过模型得出时,此时总的问题就变成了一个动态方案的问题,直策应用贪心算法即可了。这种采纳对环境进行建模的强化学习方法便是Model-based方法。 而Model-free指的是,有时候并不须要对环境进行建模也能找到最优的策略。虽然我们无法知道确切的环境回报,但我们可以对它进行估计。Q-learning中的Q(s,a)便是对在状态s下,实行动作a后得到的未来收益总和进行的估计,经由很多轮演习后,Q(s,a)的估计值会越来越准,这时候同样利用贪心算法来决定agent在某个详细状态下采纳什么行动。 如何判断该强化学习算法是Model-based or Model-free, 我们是否在agent在状态s下实行它的动作a之前,就已经可以准确对下一步的状态和回报做出预测,如果可以,那么便是Model-based,如果不能,即为Model-free。 4. EE(Explore & Exploit) 3里面先容了各种强化学习算法:Value-Based、Policy-Based、Actor-Critic。但实际我们在进行强化学习演习过程中,会碰着一个“EE”问题。这里的Double E不是“Electronic Engineering”,而是“Explore & Exploit”,“探索&利用”。 比如在Value-Based中,如下图StateA的状态下,最开始Action1&2&3对应的Value都是0,由于演习前我们根本不知道,初始值均为0。如果第一次随机选择了Action1,这时候StateA转化为了StateB,得到了Value=2,系统记录在StateA下选择Action1对应的Value=2。 如果下一次Agent又一次回到了StateA,此时如果我们选择可以返回最大Value的action,那么一定还是选择Action1。由于此时StateA下Action2&3对应的Value仍旧为0。Agent根本没有考试测验过Action2&3会带来若何的Value。 以是在强化学习演习的时候,一开始会让Agent更倾向于探索Explore,并不是哪一个Action带来的Value最大就实行该Action,选择Action时具有一定的随机性,目的是为了覆盖更多的Action,考试测验每一种可能性。 等演习很多轮往后各种State下的各种Action基本考试测验完往后,我们这时候会大幅降落探索的比例,只管即便让Agent更倾向于利用Exploit,哪一个Action返回的Value最大,就选择哪一个Action。 Explore&Exploit是一个在机器学习领域常常碰着的问题,并不仅仅只是强化学习中会碰着,在推举系统中也会碰着,比如用户对某个商品 or 内容感兴趣,系统是否该当一贯为用户推送,是不是也要适当搭配随机一些其他商品 or 内容。 5. 强化学习实际开展中的难点 我们实际在运用强化学习去演习时,常常会碰着各种问题。虽然强化学习很强大,但是有时候很多问题很棘手无从下手。 1)Reward的设置 如何去设置Reward函数,如何将环境的反馈量化是一个非常棘手的问题。比如在AlphaGo里面,如何去衡量每一步棋下的“好”与“坏”,并且终极量化,这是一个非常棘手的问题。有些场景下的Reward函数是很难设置的。 2)采样演习耗时过长,实际工业届运用难 强化学习须要对每一个State下的每一个Action都要只管即便探索到,然后进行学习。实际运用时,部分场景这是一个十分弘大的数字,对付演习时长,算力开销是十分弘大的。很多时候利用其他的算法也会得到同样的效果,而演习时长,算力开销节约很多。强化学习的上限很高,但如果演习不到位,很多时候下限特殊低。 3)随意马虎陷入局部最优 部分场景中Agent采纳的行动可能是当前局部最优,而不是全局最优。网上常常有人截图爆出打游戏碰到了王者光彩AI,明明此时推塔或者推水晶是最合理的行为,但是AI却去打小兵,由于AI采纳的是一个局部最优的行为。再合理的Reward函数设置都可能陷入局部最优中。 03 强化学习的实际运用 虽然强化学习目前还有各种各样的棘手问题,但目前工业界也开始考试测验运用强化学习到实际场景中了,除了AlphaGo还有哪些运用了: 1. 自动驾驶 目前海内百度在自动驾驶领域中就利用了一定的强化学习算法,但是由于强化学习须要和环境交互试错,现实天下中这个本钱太高,以是真实演习时都须要加入安全员进行干预,及时纠正Agent采纳的缺点行为。 2. 游戏 游戏可以说是目前强化学习运用最广阔的,目前市场上的一些MOBA游戏基本都有了强化学习版的AI在里面,最出名的便是王者光彩AI。游戏环境下可以随便交互,随便试错,没有任何真实本钱。同时Reward也相比拟较随意马虎设置,存在明显的褒奖机制。 目前一些互联网大厂也在推举系统中考试测验加入强化学习来进行推举,比如百度&美团。利用强化学习去提高推举结果的多样性,和传统的协同过滤&CTR预估模型等进行互补。 总之强化学习是目前机器学习领域的一个十分热门的研究方向,运用前景非常广阔。下一篇会先容如何利用Q-Learning算法来演习Pacman吃豆子的Python实战讲解,欢迎大家连续关注。 本文由 @King James 原创发布于大家都是产品经理。未经容许,禁止转载。 题图来自 Unsplash,基于 CC0 协议