【⼈⼯智能】通俗易懂谈强化学习
前⾔:强化学习这个概念是2017年乌镇围棋峰会上Alpha Go战胜了当时世界排名第⼀的柯洁⽽被普通⼤众知道,后⾯随着强化学习在各⼤游戏⽐如王者荣耀中被应⽤,⽽被越来越多的⼈熟知。王者荣耀AI团队,甚⾄在顶级期刊AAAI上发表过强化学习在王者荣耀中应⽤的论⽂。那么强化学习到底是什么,如何应⽤的了?下⾯和⼤家分享我对于强化学习的整个过程,以及强化学习⽬前在⼯业界是如何应⽤的⼀些看法,欢迎沟通交流,没有任何计算机基础的也可以看的懂。
1 简介强化学习
1.1 什么是强化学习
强化学习是⼀种机器学习的学习⽅式(四种主要的机器学习⽅式解释见上图)。
强化学习:基于环境的反馈⽽⾏动,通过不断与环境的交互、试错,最终完成特定⽬的或者使得整体⾏动收益最⼤化。强化学习不需要训练数据的label,但是它需要每⼀步⾏动环境给予的反馈,是奖励还是惩罚,反馈可以量化,基于反馈不断调整训练对象的⾏为。
谷歌翻译在线上图没有提到深度学习,是因为从学习⽅式层⾯上来说,深度学习属于上述四种⽅式的⼦集。⽽强化学习是独⽴存在的,所以上图单独列出强化学习,⽽没有列出深度学习。
强化学习和其他三种学习⽅式主要不同点在于:强化学习训练时,需要环境给予反馈,以及对应具体的反馈值。它不是⼀个分类的任务,不是⾦融反欺诈场景中如何分辨欺诈客户和正常客户。强化学习主要是指导训练对象每⼀步如何决策,采⽤什么样的⾏动可以完成特定的⽬的或者使收益最⼤化。
1. ⼀切学习都是通过条件作⽤,在刺激和反应之间建⽴直接联结的过程。
2. 强化在刺激⼀反应之间的建⽴过程中起着重要的作⽤。在刺激⼀反应联结中,个体学到的是习惯,⽽习惯是反复练习与强化的结果。
yafu3. 习惯⼀旦形成,只要原来的或类似的刺激情境出现,习得的习惯性反应就会⾃动出现。
那基于上述理论,强化学习就是训练对象如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产⽣能获得最⼤利益的习惯性⾏为。
1.2 强化学习的主要特点
(1)试错学习:强化学习需要训练对象不停地和环境进⾏交互,通过试错的⽅式去总结出每⼀步的最佳⾏为决策,整个过程没有任何的指导,只有冰冷的反馈。所有的学习基于环境反馈,训练对象去调整⾃⼰的⾏为决策。
(2)延迟反馈:强化学习训练过程中,训练对象的“试错”⾏为获得环境的反馈,有时候可能需要等到整个训练结束以后才会得到⼀个反馈,⽐如Game Over或者是Win。当然这种情况,我们在训练时候⼀般都是进⾏拆解的,尽量将反馈分解到每⼀步。
(3)时间是强化学习的⼀个重要因素:强化学习的⼀系列环境状态的变化和环境反馈等都是和时间强挂钩,整个强化学习的训练过程是⼀个随着时间变化,⽽状态&反馈也在不停变化的,所以时间是强化学习的⼀个重要因素。
(4)当前的⾏为影响后续接收到的数据:为什么单独把该特点提出来,也是为了和监督学习&半监督学习进⾏区分。在监督学习&半监督学习中,每条训练数据都是独⽴的,相互之间没有任何关联。但是强化学习中并不是这样,当前状态以及采取的⾏动,将会影响下⼀步接收到的状态。数据与数据之间存在⼀定的关联性。
2 详解强化学习
下⾯我们对强化学习进⾏详细的介绍:
2.1 基本组成部分
(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.2 强化学习训练过程
四六级准考证号码查询下⾯我们需要介绍⼀下强化学习的训练过程。整个训练过程都基于⼀个前提,我们认为整个过程都是符合马尔可夫决策过程的。
马尔可夫决策过程(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如何⾏动了。
2.3 强化学习算法归类
我们选择什么样的算法来指导Agent⾏动了?本⾝强化学习算法有很多种,关于强化学习算法如何分类,有很多种分类⽅式,这⾥我选择三种⽐较常见的分类⽅式。
2.3.1 Value Bad
数据线 英文说明:基于每个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-Bad场景中,最终学习完每个State对应的最佳Action基本固定。但有些场景即使最终学习完每个State对应的最佳Action也是随机的,⽐如剪⼑⽯头布游戏,最佳策略就是各1/3的概率出剪⼑/⽯头/布。
starbury
2.3.2 Policy Bad
Policy Bad策略就是对Value Bad的⼀个补充,
**如何选择Action:**基于得出的策略函数,输⼊State得到Action。
代表性算法:Policy Gradients
适⽤场景:Action空间是连续的&每个State对应的最佳Action并不⼀定是固定的,基本上Policy Bad适⽤场景是对Value Bad适⽤场景的补充。对于Action空间是连续的,我们通常会先假设动作空间符合⾼斯分布,然后再进⾏下⼀步的计算。
2.3.3 Actor-Critic
AC分类就是将Value-Bad和Policy-Bad结合在⼀起,⾥⾯的算法结合了2.3.1和2.3.2。
上述就是三⼤类常见的强化学习算法,⽽在Pacman这个游戏中,我们就可以适⽤Value-Bad算法来训练。因为每个State下最终对应的最优Action是⽐较固定的,同时Reward函数也容易设定。
2.3.4 其他分类kans
上述三种分类是常见的分类⽅法,有时候我们还会通过其他⾓度进⾏分类,以下分类⽅法和上述的分类存在⼀定的重叠:
思维导图培训
根据是否学习出环境Model分类:Model-bad指的是,agent已经学习出整个环境是如何运⾏的,当agent已知任何状态下执⾏任何动作获得的回报和到达的下⼀个状态都可以通过模型得出时,此时总的问题就变成了⼀个动态规划的问题,直接利⽤贪⼼算法即可了。这种采取对环境进⾏建模的强化学习⽅法就是Model-bad⽅法。⽽Model-free指的是,有时候并不需要对环境进⾏建模也能找到最优的策略。虽然我们⽆法知道确切的环境回报,但我们可以对它进⾏估计。Q-learning中的Q(s,a)就是对在状态s下,执⾏动作a后获得的未来收益总和进⾏的估计,经过很多轮训练后,Q(s,a)的估计值会越来越准,这时候同样利⽤贪⼼算法来决定agent在某个具体状态下采取什么⾏动。
如何判断该强化学习算法是Model-bad or Model-free, 我们是否在agent在状态s下执⾏它的动作a之
前,就已经可以准确对下⼀步的状态和回报做出预测,如果可以,那么就是Model-bad,如果不能,即为Model-free。rime
2.4 EE(Explore & Exploit)
2.3⾥⾯介绍了各种强化学习算法:Value-Bad、Policy-Bad、Actor-Critic。但实际我们在进⾏强化学习训练过程中,会遇到⼀
个“EE”问题。这⾥的Double E不是“Electronic Engineering”,⽽是“Explore & Exploit”,“探索&利⽤”。⽐如在Value-Bad 中,如下图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 内容。
2.5 强化学习实际开展中的难点
我们实际在应⽤强化学习去训练时,经常会遇到各类问题。虽然强化学习很强⼤,但是有时候很多问题很棘⼿⽆从下⼿。
**Reward的设置:**如何去设置Reward函数,如何将环境的反馈量化是⼀个⾮常棘⼿的问题。⽐如在AlphaGo⾥⾯,如何去衡量每⼀步棋下的“好”与“坏”,并且最终量化,这是⼀个⾮常棘⼿的问题。有些场景下的Reward函数是很难设置的。
采样训练耗时过长,实际⼯业届应⽤难:强化学习需要对每⼀个State下的每⼀个Action都要尽量探索到,然后进⾏学习。实际应⽤时,部分场景这是⼀个⼗分庞⼤的数字,对于训练时长,算⼒开销是⼗分庞⼤的。很多时候使⽤其他的算法也会获得同样的效果,⽽训练时长,算⼒开销节约很多。强化学习的上限很⾼,但如果训练不到位,很多时候下限特别低。
**容易陷⼊局部最优:**部分场景中Agent采取的⾏动可能是当前局部最优,⽽不是全局最优。⽹上经常有⼈截图爆出打游戏碰到了王者荣耀AI,明明此时推塔或者推⽔晶是最合理的⾏为,但是AI却去打⼩兵,因为AI采取的是⼀个局部最优的⾏为。再合理的Reward函数设置都可能陷⼊局部最优中。
waving flag 歌词3 强化学习的实际应⽤
虽然强化学习⽬前还有各种各样的棘⼿问题,但⽬前⼯业界也开始尝试应⽤强化学习到实际场景中了,除了AlphaGo还有哪些应⽤了:
3.1 ⾃动驾驶
⽬前国内百度在⾃动驾驶领域中就使⽤了⼀定的强化学习算法,但是因为强化学习需要和环境交互试错,现实世界中这个成本太⾼,所以真实训练时都需要加⼊安全员进⾏⼲预,及时纠正Agent采取的错误⾏为。
3.2 游戏
游戏可以说是⽬前强化学习应⽤最⼴阔的,⽬前市场上的⼀些MOBA游戏基本都有了强化学习版的AI在⾥⾯,最出名的就是王者荣耀AI。游戏环境下可以随便交互,随便试错,没有任何真实成本。同时Reward也相对⽐较容易设置,存在明显的奖励机制。
3.3 推荐系统
⽬前⼀些互联⽹⼤⼚也在推荐系统中尝试加⼊强化学习来进⾏推荐,⽐如百度&美团。使⽤强化学习去提⾼推荐结果的多样性,和传统的协同过滤&CTR预估模型等进⾏互补。
总之强化学习是⽬前机器学习领域的⼀个⼗分热门的研究⽅向,应⽤前景⾮常⼴阔。下⼀篇会介绍如何使⽤Q-Learning算法来训练Pacman吃⾖⼦的Python实战讲解,欢迎⼤家继续关注。(点赞是对原创最⼤的⽀持哦!)