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很简单的就是输入
o
o
o,输出
a
a
a,但你会看到怎么样的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(s′∣s,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 , y x,y x,y的pair,其 F ( x , y ^ ) F(x,\hat{y}) F(x,y^)是大过所有x,y组成的pair。测试的时候再给定所有的 x x x ,看哪一组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的平均,即 1 N ∑ n = 1 N R ( τ ) \frac{1}{N}\sum_{n=1}^{N}R(\tau) N1∑n=1NR(τ)。
3.每一个trajectory的Reward为每一个time step的reward总合,因此 R ( τ n ) R(\tau^{n}) R(τn)可以写为 ∑ t = 1 T r t \sum_{t=1}^{T}r_t ∑t=1Trt- 每一个trajectory的长度可能不一样。
- IRL中, r t r_t rt我们并不知道,这是由模型参数所决定,被找出来的。
4.为了让IRL与Structured Perceptron有关联,我们定义 r t = w ⋅ f ( s t , a t ) r_t=w\cdot f(s_t,a_t) rt=w⋅f(st,at)。
- r t r_t rt参数vector-在与feature vector的内积。
- 参数vector-在是我们要解的。
- feature vector f ( s t , a t ) f(s_t,a_t) f(st,at)是从state与action中抽出vector。
- 部份paper并未将一种 a t a_t at放在feature vector内,认为只有state与reward有关,与action无关,这由个人定义即可。
5.将 r t r_t rt带入,得到 w ⋅ ∑ n = 1 N ∑ t = 1 T f ( s t , a t ) w\cdot \sum_{n=1}^{N}\sum_{t=1}^{T} f(s_t,a_t) w⋅∑n=1N∑t=1Tf(st,at)。
- 参数 w w w-在在所有的时间点都是一致的,因此放在最外面。
- 对所有的trajectory的每一个时间点都抽出一个feature vector,接着平均它们得到一个feature vector再跟参数 w w w-在做内积就可以得到我们预期的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- w w w。
- r t = w ⋅ f ( s t , a t ) r_t=w \cdot f(s_t,a_t) rt=w⋅f(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
(
τ
)
=
1
T
∑
t
=
1
T
d
(
s
t
,
a
t
)
D(\tau)=\frac{1}{T}\sum_{t=1}^{T} d(s_t,a_t)
D(τ)=T1∑t=1Td(st,at)
- 每一个d也都是一个funtion,input即为一个state与action,而非整个trajectory,仅为trajectory的一个时间点。
- 它判断在时间点 t t t所看到的 s t s_t st所做的 a t a_t at所得到的值有多像或多不像Expert的行为.
2.有一个Local Discriminator局部判别函数-d
- 它只判断整个trajectory的某一个时间点
- 把整个trajectory的state、action加总起来,就可以得到 D ( τ ) D(\tau) D(τ)
3.判断
d
(
s
t
,
a
t
)
d(s_t,a_t)
d(st,at)是否为expert所做,是的话就拉高它的机率,如果是actor的话就降低它的机率。