8.Imitation Learning模仿学习(李宏毅)

本文深入探讨模仿学习和强化学习的原理与应用,包括行为克隆、逆向强化学习及生成对抗网络等方法,解析其在自动驾驶、机器人操作等领域的实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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-π1\pi_1π1,并且用它与环境(environment)互动,如上图所标示,目前π1\pi_1π1在这个环境中预计走绿色的路线,而车上有一位expert会同时标记这种情况下他会怎么做。
但是要注意到的是,expert是告诉机器,下一次遇到这种状况的时候要怎么走,因此,利用新标记的资料再训练得到actor-π2\pi_2π2
这种作法在自驾车上也许不佳,但其它状况下或许可行。
问题2
Actor在不考虑overfitting情况下完全复制Expert是可以的,但是比较担心的是Actor的capacity是有限的,有限的情况下对Actor应该学Expert的哪一部份所造成的后面结果是影响很大的。
如果有看影片的话,影片中谢尔顿在学中文,他不只说,还学了手势,但如果他只学到手势,而忘了怎么说,那就差异很大了。
这一点在Behavior Cloning中并没有考虑到,解决这问题的一个方法就是给予不同的错误不同的权重,但这部份如果用Supervisor Learning来train Behavior Cloning的话比较难以定义。
问题3
在Behavior Cloning中,你的训练与测试资料的分布有可能是不一致的,举例来说,在Behavior Cloning内,Supervisor learning很简单的就是输入ooo,输出aaa,但你会看到怎么样的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,π\piπ表示动作,r表示回馈,τ\tauτ表示序列

  • RL原始作法:
    有一个Agent会与Environment互动,通过互动会得到Reward-R(τ)R(\tau)R(τ),τ\tauτ是环境给的,不是我们所定义的。而P(s′∣s,a)P(s^{'}|s,a)P(ss,a)也是由Environment所提供,在某一个state决定那一个action之后会得到的下一个state。再利用Policy-π^\hat{\pi}π^最佳化得到的Reward。

  • IRL的话则反过来:
    我们有一个Policy-π^\hat{\pi}π^(课程中提到的Policy即Actor ),也许是一个很会玩游戏的人,但实际上我们并不知道Policy的参数是长什么样子,我们唯一知道的是state与action的对应关系,即τ^\hat{\tau}τ^

τ^\hat{\tau}τ^可以看的出来人类专家在看到什么样的state会有什么样的action,我们希望这用些资料来反推Reward,这个行为就是Inverse Reinforcement Learning。 Environment Dynamics依然是一个input,它会知道Expert在什么state会有怎么样的action,但不同的是它并不知道采取的action会有多少的Reward。

要注意,它是反推,而不是模仿,根据IRL找出一个Reward-R(τ)R(\tau)R(τ)之后,再利用它来找出Policy-π∗\pi^{*}π。一个简单的Reward function就可能可以导致actor有非常复杂的行为,因此,Model Reward function或许会比Model actor还要容易。

IRL就是先推出Reward function,再根据这个Reward function来推出Policy。

3.2算法步骤

在这里插入图片描述
原始RL的作法:
在这里插入图片描述
在这里插入图片描述
我们没有Reward function,手上有的就是τ^\hat{\tau}τ^和拿τ^\hat{\tau}τ^玩游戏的trajectories (历程),大致流程说明如下:

1.手上拥有R(τ)R(\tau)R(τ)或者是r(s,a)r (s,a)r(s,a)
2.给定一个τ^\hat{\tau}τ^,里面有玩N次游戏的记录
3.假设手上的τ^\hat{\tau}τ^是可以得到最大化Reward的Policy
4.寻找一个Reward function满足上面的假设即Rˉπ^\bar{R}_{\hat{\pi}}Rˉπ^>Rˉπ\bar{R}_{\pi}Rˉπ.

3.21IRL与结构学习的关系

在这里插入图片描述

  • IRL在某种意涵来说跟Structured Learning相似,以IRL来说,我们要找一个Reward function,其条件为Rˉπ^\bar{R}_{\hat{\pi}}Rˉπ^>Rˉπ\bar{R}_{\pi}Rˉπ.找到Reward function之后再找出Policy让Reward最大。

  • 在Structured Learning中,我们要找一个evaluation function-F(x,y)F(x,y)F(x,y),input为x,yx,yx,y的pair,其F(x,y^)F(x,\hat{y})F(x,y^)是大过所有x,y组成的pair。测试的时候再给定所有的xxx ,看哪一组y可以让F最大化。
    ** 结构感知机**
    在这里插入图片描述
    下面将解如何求Rˉπ^\bar{R}_{\hat{\pi}}Rˉπ^>Rˉπ\bar{R}_{\pi}Rˉπ
    在这里插入图片描述
    Structured Perceptron中我们假设F(x,y)F(x,y)F(x,y)是linear函数为w⋅ϕ(x,y)w\cdot\phi(x,y)wϕ(x,y),如果在IRL中也可以用相同的定义Rˉπ=w⋅ϕ(π)\bar{R}_{\pi}=w\cdot\phi(\pi)Rˉπ=wϕ(π),那就可以用解Structured Perceptron的方式来解IRL。
    解法如下:
    1.我们有一个τ\tauτ,记录历程(state与action的对应关系)。
    2.Rˉπ\bar{R}_{\pi}Rˉπ我为N个trajectories的平均,即1N∑n=1NR(τ)\frac{1}{N}\sum_{n=1}^{N}R(\tau)N1n=1NR(τ)
    3.每一个trajectory的Reward为每一个time step的reward总合,因此R(τn)R(\tau^{n})R(τn)可以写为∑t=1Trt\sum_{t=1}^{T}r_tt=1Trt

    • 每一个trajectory的长度可能不一样。
    • IRL中,rtr_trt我们并不知道,这是由模型参数所决定,被找出来的。

    4.为了让IRL与Structured Perceptron有关联,我们定义rt=w⋅f(st,at)r_t=w\cdot f(s_t,a_t)rt=wf(st,at)

    • rtr_trt参数vector-在与feature vector的内积。
    • 参数vector-在是我们要解的。
    • feature vector f(st,at)f(s_t,a_t)f(st,at)是从state与action中抽出vector
    • 部份paper并未将一种ata_tat放在feature vector内,认为只有state与reward有关,与action无关,这由个人定义即可。

5.将rtr_trt带入,得到w⋅∑n=1N∑t=1Tf(st,at)w\cdot \sum_{n=1}^{N}\sum_{t=1}^{T} f(s_t,a_t)wn=1Nt=1Tf(st,at)

  • 参数www-在在所有的时间点都是一致的,因此放在最外面。
  • 对所有的trajectory的每一个时间点都抽出一个feature vector,接着平均它们得到一个feature vector再跟参数www-在做内积就可以得到我们预期的Reward-Rˉπ\bar{R}_{\pi}Rˉπ

6.feature vector取决于actor,不同的actor得到的feature vector就不一样,因此对所有的trajectory的每一个时间点抽出一个feature vector做平均就可以视为对你现在的actor抽一个feature,为ϕ(π)\phi(\pi)ϕ(π),因此整个数学式可以调整为w⋅ϕ(π)w\cdot\phi(\pi)wϕ(π)
7.接下来就是解argmax的问题​​,IRL中就是找一个π\piπ让Reward最大,解法就是利用RL,这意味着每一次迭代你都要做一次RL,因此运算量是非常大的。

3.3IRL框架

在这里插入图片描述
实际做法如下:
1.初始化一个随机Reward function
2.依据Reward function找出一个actor-π\piπ

  • 因为是随机生成,因此很笨
  • 以RL求解,因此计算量甚大

3.以actor-π\piπ。与Environment互动ñ次,得到trajectory–τ1,⋅,⋅,⋅,τN\tau_1,\cdot,\cdot,\cdot,\tau_Nτ1,,,,τN

4.专家–π^\hat{\pi}π^,也与Environment互动N次,得到trajectory-τ^1,⋅,⋅,⋅,τ^N\hat{\tau}_1,\cdot,\cdot,\cdot,\hat{\tau}_Nτ^1,,,,τ^N

  • 如果是自驾车,就是记录人类驾驶在不同情况下有的不同反应
  • 如果是机械手臂的话,那就是记录人抓着手臂去做某一件事情

5.更新Reward-function,我们希望Expert所期望的Reward是大过现在的actor所期望的Reward,即Rˉπ^\bar{R}_{\hat{\pi}}Rˉπ^>Rˉπ\bar{R}_{\pi}Rˉπ.

  • Rˉπ=w⋅ϕ(π)\bar{R}_{\pi}=w\cdot\phi(\pi)Rˉπ=wϕ(π)Rˉπ^=w⋅ϕ(π^)\bar{R}_{\hat{\pi}}=w\cdot\phi(\hat{\pi})Rˉπ^=wϕ(π^)
  • 根据π\piπ,把所有trajectory内的state与action成对的取出并计算平均,就可以得到ϕ(π)\phi(\pi)ϕ(π),再乘上Weight-www
  • rt=w⋅f(st,at)r_t=w \cdot f(s_t,a_t)rt=wf(st,at)
  • 更新的方式与Structure Perceptron一样,原始的在加上正确的feature-ϕ (p^)并减掉错误的ϕ(π)\phi(\pi)ϕ(π)

这边并非只能带入Structured Perceptron的概念,如果想要也可以利用Structured SVM。

4.GAN for Imitation Learning

在这里插入图片描述
GAN也可以结合Imitation Learning,本质上GAN就是要找一个Generator,这个Generator产生的分布与实际资料的分布愈接近愈好。
现在假设我们有一个Expert Polyci-π^\hat\piπ^,它与环境互动的时候会产生一堆trajectory-τ^\hat{\tau}τ^,它也是一个分布。
现在要做的是,训练一个actor-π\piπ,来与环境互动,也会得到trajectory-τ\tauτ,我们希望actor所output-τ\tauτ的分布与τ^\hat{\tau}τ^的分布愈接近愈好。τ\tauτ可以形成分布的原因在于environment是有随机性的,举例来说,游戏中相同的画面你相同的动作,下一步敌人的反应是可能不一样的。又或者actor本身也可能拥有随机性。
在这里插入图片描述
实作说明如下:
1.有一个Expert-π^\hat\piπ^

  • 以GAN的角度来看,就当它是实际资料,好比我们用GAN生成影像的时候所拥有的REAL DATA。
  • 真实数据:τ^\hat\tauτ^

2.有一个Actor-π\piπ

  • 随机初始,与环境互动得到一堆τ\tauτ
  • 以GAN的角度来看,就是一开始很鸟的Generator,不同的是并非生成很多影像资料,而是用生成器生成τ\tauτ

3.有一个Discriminator-D: 以trajectory判断是Expert或是Machine所出的资料(判别器)
4.以GAN的方式训练更新Discriminator: WGANs也可以
5.更新Actor的参数:即更新Generator的参数来骗过Discriminator
在这里插入图片描述
trajectory-τ\tauτ是sequence,里面记录着每一个state对应的action,然后利用RNN来读取之后output得分即可。但实际上可能因为τ\tauτ的数目较少,因此如果直接将每一个τ\tauτ都视为一个资料的话会容易造成overfitting,常见作法如下:
1.将D(τ)D(\tau)D(τ)拆解为很多d的合,即D(τ)=1T∑t=1Td(st,at)D(\tau)=\frac{1}{T}\sum_{t=1}^{T} d(s_t,a_t)D(τ)=T1t=1Td(st,at)

  • 每一个d也都是一个funtion,input即为一个state与action,而非整个trajectory,仅为trajectory的一个时间点。
  • 它判断在时间点ttt所看到的sts_tst所做的ata_tat所得到的值有多像或多不像Expert的行为.

2.有一个Local Discriminator局部判别函数-d

  • 它只判断整个trajectory的某一个时间点
  • 把整个trajectory的state、action加总起来,就可以得到D(τ)D(\tau)D(τ)

3.判断d(st,at)d(s_t,a_t)d(st,at)是否为expert所做,是的话就拉高它的机率,如果是actor的话就降低它的机率。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值