1.概念:
本节内容只是强化学习的一些入门(皮毛,Scratching the surface)先是从例子讲起,然后还是以红白机上的小蜜蜂为例,讲解了当下AL比较流行的Policy-based,并进行了的机器学习三板斧分析。
2.Overview
David Silver(大卫·希尔弗曼,阿法狗的作者,貌似b站有他专门讲强化学习的视频)给出的说法:
Deep Reinforcement Learning: AI=RL+DL
3.例子
红字State是Agent观察到的environment的结果,一般都是partial的。Action会和环境有一些互动,造成一些影响。然后会得到一些Reward(有好的,也有坏的。)
可以看到Agent(机器)学习的目标是学习采取什么样的Action使得Reward最大化。
4.play Go
这里agent观察的是棋盘,采取的Action是落子的位置(这里落的三之三,围棋不会,听老师说的瞎写),environment是对手
这里的Reward就是输赢,当然大多数时候还未分胜负。这里也是RL比较困难的地方,大多数的时候action是没有reward(reward是sparse的),这个时候也无法去判断这个action是否正确,如何在少数reward的情况下如何去发觉正确的action。
Agent learns to take actions to maximize expected reward.
5.Supervised v.s. Reinforcement
supervised learning训练出来的agent只能说会下围棋,但是下得不够好。意思就是只学会了围棋的基本规则。
Alpha Go is supervised learning + reinforcement learning.
先supervised learning学得不错之后才reinforcement learning(这个阶段是train两个模型对下).
6.Learning a chat-bot
·Sequence-to-sequence learning
- chatbot
这里在训练过程让人参与也不太现实,也是根据play Go的训练方式,让两个模型自己对话。然后将对话的结果与真人对话的结果进行比对,越接近越好,这个东西称为:Behavior Cloning。
Behavior Cloning的过程中,机器并不知道老师教的东西那些是重点,那些是不重要的,老师还放了一个谢耳朵和hover学中文的视频(自己百度),耳朵在学发音的过程中把手势也学了,机器也一样,它不会知道在学习语言的过程中语音是重点,手势是可以不用学的。
所以后面就有一节是讲Inverse Reinforce Learning
但是对话不像围棋,围棋的输赢是可以用程序来判断的,但是上面机器的对话如何判断好坏?这个还未解决,目前文献Deep Reinforcement Learning for Dialogue Generation 给出的解决方法是用基于规则的判断。如下:
老师也给出自己思路:(整个思路有点像迁移学习中的Domain-adversarial training)用一个模型X去学习人类之间的正常对话,用强化学习模型Y去学习对话,并且使得对话的结果(向量化)要可以骗过模型X。
这个还能用于人机交互:
7.More applications
8.另外一个栗子:玩游戏(Warning of Game)
Widely studies:
这个玩游戏不是内建程序读取数据然后玩游戏,做判断,而是直接根据屏幕的输出来玩,貌似还有很多三维游戏,不知道现在有没有类似的网游外挂。
下面是一个具体的例子,这个游戏玩过红白机的都知道,小蜜蜂。。。老师还贴心的给出了玩法介绍。
接下来看机器怎么通过观察屏幕来这个游戏,一开始看到屏幕是s1,实际上是一个vector,也可以说是三维的tensor,因为是rgb的,然后agent有三个选择(左、右、开火),这里是往右移动,没有得到reward r1(左上角的分数),采取了action之后,影响了环境(当然环境的变化和action不一定有关系,这里敌方也会随机左右移动,或者进攻),得到s2,agent决定开火,干掉敌方,得到5的reward r2
,然后这个循环不断进行下去。
进行到某一循环,绿色飞机可能被击中,game over,这个过程称为一个episode。机器就是不断的去玩这个游戏,目标是在一个episode里面最大化reward(干掉最多的外星人)。
9.难点小结
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。
老师还提了一下Alpha Go:policy-based + value-based +model-based,用了多种模型混合,model-based的方法这里没有讲,这个方法主要用在棋类游戏,预测未来的棋局之类的,棋局走下一步的结果种类是有限。
10.Policy-based Approach: Learning an Actor
Actor实际上就是function,用π来表示,它的输入是机器看到的observation,输出是机器要采取的Action,我们要通过reward来找出最佳的π
PS:在有些文献上Actor又叫Policy。回到机器学习的三板斧:
下面就是套用这个三板斧的步骤展开来讲。
如果我们采用NN来作为function,那就是deep RL。
步骤一:Neural Network as Actor
上图中的输入是一个图片,就是一个vector,既然是图片NN里面应该包含有convolution来处理图片。
这里的输出带有Stochastic(随机)的几率。(当然,也可以任性的定义取最大几率的动作来执行)
传统的做法是把action保存到looup table中,然后看到某个environment就采取某个action,但是这样的做法这里并不适用,因为这里输入是pixel,NN的好处就是它会举一反三,场景没有看过也能搞定,也就是比较generalization
步骤二:Goodness of Actor(决定function的好坏)
这里看下之前的做法:
找到一个参数,目标是最小化损失函数。
在RL中,和上面是比较类似的:
其中πθ(s)是actor函数,θ是参数,然后用这个函数去玩这个游戏,玩完之后得到的Total reward(这个episode的reward的总和)为:
如果用一个actor去玩这个游戏,那么每一个τ都有一个出现的几率(If you use an actor to play the game, each τ has a probability to be sampled ),也就是说τ代表从游戏开始到结束的过程,这个过程有很多很多种,当你选择了某个actor,那么有些τ(游戏的过程)容易出现,例如很笨的actor会导致τ容易game over。这些游戏过程出现几率我们可以用P(τ∣θ)表示,则有:
就是对τ出现的几率与τ对应的reward的乘积进行求和。但是要穷举所有的τ是不可能的(游戏的情况复杂,过程自然就会有无穷多种),只能用πθ 玩N次游戏,得到{τ1,τ2,…,τN}(相当于N笔training data,或者说相当于sampling τ from P(τ∣θ) N times),则公式(1)变为:
这个公式 是约等于的关系。这里应该是用到期望的概念,当采样的次数N足够大的时候,那么样本的均值就会约等于均值。
步骤三:Pick the best function
使用的方法是GA(Gradient Ascent,这里是要求最大值),先来看问题的描述:
就是要找到参数θ∗ 使得R¯¯¯θ 最大化。
其中:
具体计算
其中只有划红线的这项和actor πθ 有关,取log,把相乘变相加:
然后对θ求偏导,把与θ无关的项忽略(左右两项)
带入之前的式子:
如果某一次玩游戏的过程τn 中,遇到环境snt ,就会采取动作ant
,如果这些个动作的reward是正的,则要调整参数θ要使得采取这个动作的几率最大化,反之亦然。
这里橙色块的意思前面有解释,要考虑整体的reward(R(τn)),不能考虑单个动作的reward(rnt)。
再来看为什么要用log。log这项可以看成下图蓝色部分:
意思就是一个action出现几率高,虽然它的reward要小,调大它的几率还是可以最大化cost 函数。除以
相当于归一化,使得模型能够处理这些几率高的action(不然会偏向调整那些reward搞的action)。
这里有一个小问题,R(τn)永远是正的,例如玩游戏的时候都是得分,不会有负分。
理想状态下,每个action都会sampling到,然后被gradient更新(都是正分,所以GA后是变大,不知道为什么b这里看起来变小了)
所以我们希望R(τn )有正有负,然后就是加一个bias(自己设计)
The critic
critic并不能决定采用什么action,它只能评估actor (π\piπ)的好坏(听起来好像GAN里面的discriminator)
A critic does not determine the action.
Given an actor, it evaluates the how good the actor is.
State Value-base Approach: learning an critics
critics 有很多种方法,先来看一种:
state value-base function:Vπ(s),其作用是:
给定一个actor (π),在观察到一个state(s)之后,计算出期望获得的总的Reward是多少(注意,这里是总的Reward)。
critic是和actor有关的,观察到相同的state,如果actor不一样,那么结果也不同。
如何估计函数V
Q learning
用Q function找出比较好的actor,过程如下:
假如我们现在已经训练好了一个Q function。
Motivation
某些任务中Reward函数不好定义,例如,赛车中,碰到人,碰到墙各扣多少分?都不好定义。另外手工定义的Reward会导致未知错误。
之前的RL大体是根据Environment和Reward Function通过RL来找出最好的Actor
IRL反过来,用expert和Environment通过IRL来找出Reward Function,具体做法大概如下:
原则:expert总是最好的。
步骤:
初始化一个actor
循环
—用actor与Environment互动n次,得到n个记录
定义一个Reward Function,规则是expert的Reward要比初始actor要好。
初始actor根据上面的Reward Function进行学习,目标是Reward Function结果越大越好
若干次后初始actor按当前规则就很接近expert了,这个时候又去改规则,通过这个规则得到结果是expert的Reward要比初始actor要好。。。。
结束循环
IRL和GAN的对比,很像