文章目录
前言
本节内容只是强化学习的一些入门(皮毛,Scratching the surface)先是从例子讲起,然后还是以红白机上的小蜜蜂为例,讲解了当下AL比较流行的Policy-based,并进行了的机器学习三板斧分析。
公式输入请参考:在线Latex公式
Overview概述
David Silver(大卫·希尔弗曼,阿法狗的作者,貌似b站有他专门讲强化学习的视频)给出的说法:
Deep Reinforcement Learning: AI=RL+DL
小栗子
红字State是Agent观察到的environment的结果,一般都是partial的。Action会和环境有一些互动,造成一些影响。
可以看到Agent(机器)学习的目标是学习采取什么样的Action使得Reward最大化。
play Go
这里agent观察的是棋盘,采取的Action是落子(这里落的三之三,围棋不会,听老师说的瞎写),environment是对手
这里的Reward就是输赢,当然大多数时候还未分胜负。这里也是RL比较困难的地方,大多数的时候action是没有reward,这个时候也无法去判断这个action是否正确,如何在少数reward的情况下如何去发觉正确的action。
Supervised v.s. Reinforcement
Alpha Go is supervised learning + reinforcement learning.
先supervised learning学得不错之后才reinforcement learning(这个阶段是train两个模型对下).
聊天机器人:
这里在训练过程让人参与也不太现实,也是根据play Go的训练方式,让两个模型自己对话。
但是对话不像围棋,围棋的输赢是可以用程序来判断的,但是上面机器的对话如何判断好坏?这个还未解决,目前文献Deep Reinforcement Learning for Dialogue Generation 给出的解决方法是用基于规则的判断。如下:
老师也给出自己思路:(整个思路有点像迁移学习中的Domain-adversarial training)用一个模型X去学习人类之间的正常对话,用强化学习模型Y去学习对话,并且使得对话的结果(向量化)要可以骗过模型X。
这个还能用于人机交互:
另外一个栗子:玩游戏(Warning of Game)
Widely studies:
Gym: https://gym.openai.com/
Universe: https://openai.com/blog/universe/
这个玩游戏不是内建程序读取数据然后玩游戏,做判断,而是直接根据屏幕的输出来玩,貌似还有很多三维游戏,不知道现在有没有类似的网游外挂。
下面是一个具体的例子,这个游戏玩过红白机的都知道,小蜜蜂。。。老师还贴心的给出了玩法介绍。
接下来看机器怎么通过观察屏幕来这个游戏,一开始看到屏幕是,实际上是一个matrix,还是三维的,因为是rgb的,然后agent有三个选择(左、右、开火),这里是往右移动,没有得到reward (左上角的分数),采取了action之后,影响了环境(当然环境的变化和action不一定有关系,这里敌方也会随机左右移动,或者进攻),得到,agent决定开火,干掉敌方,得到5的reward ,然后这个循环不断进行下去。
进行到某一循环,绿色飞机可能被击中,game over,这个过程称为一个episode。机器就是不断的去玩这个游戏,目标是在一个episode里面最大化reward(干掉最多的外星人)。
难点小结
Reward delay
In space invader, only “fire” obtains reward. Although the moving before “fire” is important
只有开火会有reward,学出来的模型就只会开火,不移动是会game over的,但移动是不会得到reward。
In Go playing, it may be better to sacrifice immediate reward to gain more long-term reward
围棋里面也有类似情况:牺牲小子赢大局
Agent’s actions affect the subsequent data it receives
E.g. Exploration
探索environment在RL里面也是非常重要的事情,就是学游戏怎么玩。
本节要点
RL分有两大流派,value-based是之前的的,policy-based是当前的,两个方法的思路见蓝字,老师给出当前RL的最强模型,A3C(Asynchronous Advantage Actor-Critic ):
Volodymyr Mnih, Adrià Puigdomènech Badia, Mehdi Mirza, Alex Graves, Timothy P. Lillicrap, Tim Harley, David Silver, Koray Kavukcuoglu, “Asynchronous Methods for Deep Reinforcement Learning”, ICML, 2016
还提到了强化学习的Bible。
Policy-based Approach: Learning an Actor
Actor实际上就是function,用来表示,它的输入是机器看到的observation,输出是机器要采取的Action,我们要通过reward来找出最佳的:
PS:在有些文献上Actor又叫Policy。回到机器学习的三板斧:
下面就是套用这个三板斧的步骤展开来讲。
步骤一:Neural Network as Actor
传统的做法是把action保存到table中,然后看到某个environment就采取某个action,但是这样的做法这里并不适用,因为这里输入是pixel,NN的好处就是它会举一反三,场景没有看过也能搞定,也就是比较generalization
步骤二:Goodness of Actor
这里看下之前的做法:
在RL中,和上面是比较类似的:
其中是actor函数,是参数,然后用这个函数去玩这个游戏,玩完之后得到的Total reward(这个episode的reward的总和)为:
这个就是要最小化的目标对象,而不是其中某一个action获得的reward。
但是就算是同一个actor,也是不一样的,这里有两个原因(Randomness in the actor and the game):
- actor遇到相同场景采取的动作是Stochastic的
- 游戏本身也有很多随机性
也就是说是一个随机数。我们就用的期望值(玩游戏很多次的均值),我们希望越大越好。 evaluates the goodness of an actor
期望值如何计算?
我们用(念:涛)来代表一个episode所包含的东西,它是一个sequence:
Total reward:
如果用一个actor去玩这个游戏,那么每一个都有一个出现的几率(If you use an actor to play the game, each ???? has a probability to be sampled ),也就是说代表从游戏开始到结束的过程,这个过程有很多很多种,当你选择了某个actor,那么有些(游戏的过程)容易出现,例如很笨的容易game over。这些游戏过程出现几率我们可以用表示,则有:
就是对出现的几率与对应的reward的乘积进行求和。但是要穷举所有的是不可能的,只能用玩N次游戏,得到(相当于N笔training data,或者说相当于sampling from times),则公式(1)变为:
上式中 与是约等于的关系。
步骤三:Pick the best function
使用的方法是GA,先来看问题的描述:
就是要找到参数使得最大化。
其中:
下面具体计算
要求,也就是对的偏导,由于公式:
中只有是与有关,因此:
可以是不可微的,也可以是blackbox,继续变化:
由于:,公式(2)变为:
和上面一样的,、与是约等于的关系,因此有:
下面计算
是游戏的初始画面,是给定机器在环境下做出动作的几率,是游戏根据得到的reward 和环境的概率,以此类推,得到:
其中只有划红线的这项和actor 有关,取log,把相乘变相加:
然后对θ求偏导,把与θ无关的项忽略(左右两项)
带入之前的式子:
如果遇到环境,就会采取动作,如果这些个动作的reward是正的,则要调整参数θ要使得采取这个动作的几率最大化,反之亦然。
这里橙色块的意思前面有解释,要考虑整体的reward,不能考虑单个动作的reward。
再来看为什么要用log。log这项可以看成下图:
意思就是一个action出现几率高,虽然它的reward要小,调整它的几率还是可以最大化cost 函数。除以相当于归一化,使得模型能够处理这些几率高的action。
这里有一个小问题,永远是正的,例如玩游戏的时候都是得分,不会有负分。
理想状态下,每个action都会sampling到,然后被gradient更新(都是正分,所以GA后是变大,不知道为什么b这里看起来变小了)
但是实际上我们做的是sampling,有可能有action没有被sampling到,那么这个action的几率就会减少:
所以我们希望有正有负,然后就是加一个bias(自己设计)
Value-base Approach: learning an critics
要下课了,这次讲不完: