1.简介
模仿学习有人又称为学徒制学习,示范学习,但又有人觉得只有逆向强化学习才能称为学徒制学习。示范学习就是人类示范给机器,让机器去模仿学习。
不同于加强学习,在模仿学习中,机器可以与环境互动,但并不会得到Reward,因此模仿学习并非受到Reward影响,主要还是受到专家展示启发。
使用模仿学习的主要几点原因:
- Reward不好定义
- 如果手工制作的奖励可能会造成无法控制的行为,考试要100分是目标,那机器可能学到的是作弊就能100分。
模仿学习三种方法:
- 行为克隆Behavior Cloning
- 逆向强化学习Inverse Reinforcement Learning
- 生成对抗网络Generative Adversarial network
2.行为克隆Behavior Cloning
直观来看,就是要机器复制专家(Expert)的行为,以自驾车为例,我们要搜集很多人类驾驶的行为,可以从行车记录器取得资料。训练资料集的标记自然就是observation所对应的当下行为,上图为例,人类在看到那种observation的情况下会向前,机器就是学着向前就可以,因此模型Actor( nn)的输入就是observation,输出就是采取的行为action。这,就是supervised learning。
但是也会出现下面的问题1。
Behavior Cloning会遇到一个问题,就是Expert的samples有限,这会造成遇到非训练资料中状况的时候机器的表现不佳。
举例来说,Expert示范转弯是右转,但是当初始位置是在过弯一半的地方时,如果碰到一辆车,机器就会不知道该怎么做。
一种做法就是给更多资料,给Expert一些平常不会遇到的observation(states),问他该如何处理,这种作法称为数据集汇总(Dataset Aggregation)。
Dataset Aggregation具体范例说明:
假设现在有一个actor-,并且用它与环境(environment)互动,如上图所标示,目前在这个环境中预计走绿色的路线,而车上有一位expert会同时标记这种情况下他会怎么做。
但是要注意到的是,expert是告诉机器,下一次遇到这种状况的时候要怎么走,因此,利用新标记的资料再训练得到actor-。
这种作法在自驾车上也许不佳,但其它状况下或许可行。
问题2
Actor在不考虑overfitting情况下完全复制Expert是可以的,但是比较担心的是Actor的capacity是有限的,有限的情况下对Actor应该学Expert的哪一部份所造成的后面结果是影响很大的。
如果有看影片的话,影片中谢尔顿在学中文,他不只说,还学了手势,但如果他只学到手势,而忘了怎么说,那就差异很大了。
这一点在Behavior Cloning中并没有考虑到,解决这问题的一个方法就是给予不同的错误不同的权重,但这部份如果用Supervisor Learning来train Behavior Cloning的话比较难以定义。
问题3
在Behavior Cloning中,你的训练与测试资料的分布有可能是不一致的,举例来说,在Behavior Cloning内,Supervisor learning很简单的就是输入,输出,但你会看到怎么样的Observation是取决于Actor本身的参数,而actor在学习expert不完全情况下,就会造成两个Observation的distribution不同。
或许两个distribution相近,但Observation差异很大,又或许两个distribution差异甚大,但Observation又相似,这很难判定,也因此另一种方式就出现了,即IRL,Inverse Reinforcement Learning。
3.逆向强化学习Inverse Reinforcement Learning
3.1初步理解
Inverse Reinforcement Learning(IRL)又称『Inverse Optimal Control』或『Inverse Optimal Planning』,但都是相同的。
名称上直观来看,就是将Reinforcement Learning(RL)反过来。注意: s表示状态,a,表示动作,r表示回馈,表示序列
-
RL原始作法:
有一个Agent会与Environment互动,通过互动会得到Reward-,是环境给的,不是我们所定义的。而也是由Environment所提供,在某一个state决定那一个action之后会得到的下一个state。再利用Policy-最佳化得到的Reward。 -
IRL的话则反过来:
我们有一个Policy-(课程中提到的Policy即Actor ),也许是一个很会玩游戏的人,但实际上我们并不知道Policy的参数是长什么样子,我们唯一知道的是state与action的对应关系,即。
从可以看的出来人类专家在看到什么样的state会有什么样的action,我们希望这用些资料来反推Reward,这个行为就是Inverse Reinforcement Learning。 Environment Dynamics依然是一个input,它会知道Expert在什么state会有怎么样的action,但不同的是它并不知道采取的action会有多少的Reward。
要注意,它是反推,而不是模仿,根据IRL找出一个Reward-之后,再利用它来找出Policy-。一个简单的Reward function就可能可以导致actor有非常复杂的行为,因此,Model Reward function或许会比Model actor还要容易。
IRL就是先推出Reward function,再根据这个Reward function来推出Policy。
3.2算法步骤
原始RL的作法:
我们没有Reward function,手上有的就是和拿玩游戏的trajectories (历程),大致流程说明如下:
1.手上拥有或者是
2.给定一个,里面有玩N次游戏的记录
3.假设手上的是可以得到最大化Reward的Policy
4.寻找一个Reward function满足上面的假设即>.
3.21IRL与结构学习的关系
-
IRL在某种意涵来说跟Structured Learning相似,以IRL来说,我们要找一个Reward function,其条件为>.找到Reward function之后再找出Policy让Reward最大。
-
在Structured Learning中,我们要找一个evaluation function-,input为的pair,其是大过所有x,y组成的pair。测试的时候再给定所有的 ,看哪一组y可以让F最大化。
** 结构感知机**
下面将解如何求>?
Structured Perceptron中我们假设是linear函数为,如果在IRL中也可以用相同的定义,那就可以用解Structured Perceptron的方式来解IRL。
解法如下:
1.我们有一个,记录历程(state与action的对应关系)。
2.我为N个trajectories的平均,即。
3.每一个trajectory的Reward为每一个time step的reward总合,因此可以写为- 每一个trajectory的长度可能不一样。
- IRL中,我们并不知道,这是由模型参数所决定,被找出来的。
4.为了让IRL与Structured Perceptron有关联,我们定义。
- 参数vector-在与feature vector的内积。
- 参数vector-在是我们要解的。
- feature vector 是从state与action中抽出vector。
- 部份paper并未将一种放在feature vector内,认为只有state与reward有关,与action无关,这由个人定义即可。
5.将带入,得到。
- 参数-在在所有的时间点都是一致的,因此放在最外面。
- 对所有的trajectory的每一个时间点都抽出一个feature vector,接着平均它们得到一个feature vector再跟参数-在做内积就可以得到我们预期的Reward-。
6.feature vector取决于actor,不同的actor得到的feature vector就不一样,因此对所有的trajectory的每一个时间点抽出一个feature vector做平均就可以视为对你现在的actor抽一个feature,为,因此整个数学式可以调整为。
7.接下来就是解argmax的问题,IRL中就是找一个让Reward最大,解法就是利用RL,这意味着每一次迭代你都要做一次RL,因此运算量是非常大的。
3.3IRL框架
实际做法如下:
1.初始化一个随机Reward function
2.依据Reward function找出一个actor-。
- 因为是随机生成,因此很笨
- 以RL求解,因此计算量甚大
3.以actor-。与Environment互动ñ次,得到trajectory–
4.专家–,也与Environment互动N次,得到trajectory-
- 如果是自驾车,就是记录人类驾驶在不同情况下有的不同反应
- 如果是机械手臂的话,那就是记录人抓着手臂去做某一件事情
5.更新Reward-function,我们希望Expert所期望的Reward是大过现在的actor所期望的Reward,即>.
- ,
- 根据,把所有trajectory内的state与action成对的取出并计算平均,就可以得到,再乘上Weight-。
- 更新的方式与Structure Perceptron一样,原始的在加上正确的feature-ϕ (p^)并减掉错误的
这边并非只能带入Structured Perceptron的概念,如果想要也可以利用Structured SVM。
4.GAN for Imitation Learning
GAN也可以结合Imitation Learning,本质上GAN就是要找一个Generator,这个Generator产生的分布与实际资料的分布愈接近愈好。
现在假设我们有一个Expert Polyci-,它与环境互动的时候会产生一堆trajectory-,它也是一个分布。
现在要做的是,训练一个actor-,来与环境互动,也会得到trajectory-,我们希望actor所output-的分布与的分布愈接近愈好。可以形成分布的原因在于environment是有随机性的,举例来说,游戏中相同的画面你相同的动作,下一步敌人的反应是可能不一样的。又或者actor本身也可能拥有随机性。
实作说明如下:
1.有一个Expert-
- 以GAN的角度来看,就当它是实际资料,好比我们用GAN生成影像的时候所拥有的REAL DATA。
- 真实数据:
2.有一个Actor-
- 随机初始,与环境互动得到一堆
- 以GAN的角度来看,就是一开始很鸟的Generator,不同的是并非生成很多影像资料,而是用生成器生成
3.有一个Discriminator-D: 以trajectory判断是Expert或是Machine所出的资料(判别器)
4.以GAN的方式训练更新Discriminator: WGANs也可以
5.更新Actor的参数:即更新Generator的参数来骗过Discriminator
trajectory-是sequence,里面记录着每一个state对应的action,然后利用RNN来读取之后output得分即可。但实际上可能因为的数目较少,因此如果直接将每一个都视为一个资料的话会容易造成overfitting,常见作法如下:
1.将拆解为很多d的合,即
- 每一个d也都是一个funtion,input即为一个state与action,而非整个trajectory,仅为trajectory的一个时间点。
- 它判断在时间点所看到的所做的所得到的值有多像或多不像Expert的行为.
2.有一个Local Discriminator局部判别函数-d
- 它只判断整个trajectory的某一个时间点
- 把整个trajectory的state、action加总起来,就可以得到
3.判断是否为expert所做,是的话就拉高它的机率,如果是actor的话就降低它的机率。