强化学习task5
第十章 Sparse Reward
稀疏奖励:以机械臂举例,抓到螺丝才得到奖励1,但可能长时间甚至永远都是0。
通过三个方向解决sparse reward问题:
Reward Shaping(奖励塑造)
Reward shaping 指环境有一个固定的 reward,它是真正的 reward,但是为了让 agent 学出来的结果是我们要的样子,刻意地设计了 reward 来引导我们的 agent。
具体实施方式:
Curiosity
curiosity driven reward
ICM(intrinsic curiosity module)取决于
s
1
,
a
1
,
s
2
s_1,a_1,s_2
s1,a1,s2,
total reward中包含
r
i
、
r
i
j
r_i、r^{j}_i
ri、rij,通过这种方式代表curiosity。
ICM计算原始设计如图所示,根据
a
t
,
s
t
a_t,s_t
at,st的输入,使用network计算得到一个
s
^
t
+
1
\hat{s}_{t+1}
s^t+1,如果其跟
s
t
+
1
s_{t+1}
st+1的真实情况越different,reward越大。通过这种方式增加对未知环境的探索能力。
其中,network是提前训练的,通过给定
a
t
,
s
t
,
s
t
+
1
a_t,s_t,s_{t+1}
at,st,st+1在整体网络训练时要将其fix。
光有好奇不够,还需要让网络意识到什么事情是真正重要的,这里引入了feature ext模块,通过这个module把无关的东西过滤。
过滤的具体方法,使用network2,输出
ϕ
(
s
t
)
,
ϕ
(
s
t
+
1
)
\phi(s_t),\phi(s_{t+1})
ϕ(st),ϕ(st+1),预测
s
^
t
+
1
\hat{s}_{t+1}
s^t+1,并计算
s
^
t
\hat{s}_{t}
s^t与
s
t
{s}_{t}
st之间的差距,考虑变化与动作是否真正有关系。
Curriculum Learning
第二个方向是 curriculum learning(课程式学习)
可以理解为,让模型先从容易的样本开始学习,并逐渐进阶到复杂的样本和知识。
Reverse Curriculum Generation
Hierarchical RL(分层强化学习)
分层强化学习是说,我们有好几个 agent。然后,有一些 agent 负责比较 high level 的东西,它负责订目标,然后它订完目标以后,再分配给其他的 agent,去把它执行完成。
第十章习题
Keywords
reward shaping: 在我们的agent与environment进行交互时,我们人为的设计一些reward,从而“指挥”agent,告诉其采取哪一个action是最优的,而这个reward并不是environment对应的reward,这样可以提高我们estimate Q-function时的准确性。
ICM(intrinsic curiosity module): 其代表着curiosity driven这个技术中的增加新的reward function以后的reward function。
curriculum learning: 一种广义的用在RL的训练agent的方法,其在input训练数据的时候,采取由易到难的顺序进行input,也就是认为设计它的学习过程,这个方法在ML和DL中都会普遍使用。
reverse curriculum learning: 相较于上面的curriculum learning,其为更general的方法。其从最终最理想的state(我们称之为gold state)开始,依次去寻找距离gold state最近的state作为想让agent达到的阶段性的“理想”的state,当然我们应该在此过程中有意的去掉一些极端的case(太简单、太难的case)。综上,reverse curriculum learning 是从 gold state 去反推,就是说你原来的目标是长这个样子,我们从我们的目标去反推,所以这个叫做 reverse curriculum learning。
hierarchical (分层) reinforcement learning: 将一个大型的task,横向或者纵向的拆解成多个 agent去执行。其中,有一些agent 负责比较high level 的东西,负责订目标,然后它订完目标以后,再分配给其他的 agent把它执行完成。(看教程的 hierarchical reinforcement learning部分的示例就会比较明了)
Questions
ICM是什么?我们应该如何设计这个ICM?
第十一章 模仿学习
模仿学习 (Imitation Learning) 不是强化学习,而是强化学习的一种替代品。模仿学习与强化学习有相同的目的:两者的目的都是学习策略网络,从而控制智能体。模仿学习与强化学习有不同的原理:模仿学习向人类专家学习,目标是让策略网络做出的决策 与人类专家相同;而强化学习利用环境反馈的奖励改进策略,目标是让累计奖励(即回报)最大化。
具体体现在,当连奖励都没有的时候,需要模仿专家的示范,进行学习。
举例来说,在自动驾驶汽车里面,虽然你没有办法给出自动驾驶汽车的奖励,但你可以收集很多人类开车的纪录。在聊天机器人里面,你可能没有办法定义什么叫做好的对话,什么叫做不好的对话。但是收集很多人的对话当作范例,这一件事情也是可行的。
这里介绍三种方法,第一个叫做行为克隆(behavior cloning,BC),第二个叫做逆强化学习(inverse reinforcement learning,IRL),第三个叫生成判别模仿学习(GAIL)。
Behavior Cloning(行为克隆)
行为克隆跟监督学习是一样的。
人在状态
s
1
s_1
s1会采取动作
a
1
a_1
a1,人在状态
s
2
s_2
s2会采取动作
a
2
a_2
a2。人在状态,
s
3
s_3
s3会采取动作
a
3
a_3
a3。接下来,你就学习一个网络。这个网络就是agent演员,它输入
s
i
s_i
si的时候,你就希望它的输出 是
a
i
a_i
ai,就这样结束了。
但这样的行为克隆的观测非常有限,当遇到专家中未出现的数据时,就无法处理这种情况。
这里引入了数据集聚合(dataset aggregation,DAgger)。
原有的教程我确实没看懂,又收集了一些资料。
论文在这里
人为地打标记的成本也太高,如何自动地代替人完成这个工作呢?
在不引入extra传感器的前提下,就是一个典型的POMDP问题,我们可以利用历史轨迹信息来解决:
- 将现在的observation与之前的一些历史obs连接(concat)在一起,经过CNN提取特征
- 用RNN记录历史信息
逆强化学习
逆向强化学习 (逆强化学习缩写 IRL)非常有名,但是在今天已 经不常用了。下一节介绍的GAIL更简单,效果更好。本节只简单介绍IRL的主要思想, 而不深入讲解其数学原理。
IRL 的基本设定:
第一, IRL 假设智能体可以与环境交互1,环境会根据智能体的动作更新状态,但是不会给出奖励。智能体与环境交互的轨迹是这样的:
s
1
,
a
1
,
s
2
,
a
2
,
s
3
,
a
3
,
⋯
,
s
n
,
a
n
s_{1}, a_{1}, \quad s_{2}, a_{2}, \quad s_{3}, a_{3}, \quad \cdots, \quad s_{n}, a_{n}
s1,a1,s2,a2,s3,a3,⋯,sn,an
把奖励看作
(
s
t
,
a
t
)
(s_t,a_t)
(st,at)的函数,记作
R
∗
(
s
t
,
a
t
)
R^*(s_t,a_t)
R∗(st,at).
第二, IRL 假设我们可以把人类专家的策略
π
(
a
∣
s
)
π(a|s)
π(a∣s) 作为一个黑箱调用。黑箱指是我们不知道策略的解析表达式,但是可以使用黑箱策略控制智能体与环境交互,生成 轨迹。 IRL 假设人类学习策略
π
π
π的方式与强化学习相同,都是最大化回报(即累计奖励)的期望,即
π
⋆
=
max
π
E
S
t
,
A
t
,
⋯
,
S
n
,
A
n
[
∑
k
=
t
n
γ
k
−
t
⋅
R
⋆
(
S
k
,
A
k
)
]
\pi^{\star}=\max _{\pi} \mathbb{E}_{S_{t}, A_{t}, \cdots, S_{n}, A_{n}}\left[\sum_{k=t}^{n} \gamma^{k-t} \cdot R^{\star}\left(S_{k}, A_{k}\right)\right]
π⋆=πmaxESt,At,⋯,Sn,An[k=t∑nγk−t⋅R⋆(Sk,Ak)]
IRL 的基本思想:
- 从黑箱策略反推奖励
- 用奖励函数训练策略网络
- 更新奖励函数
生成判别模仿学习 (Gail)
生成判别模仿学习 (Generative Adversarial Imitation Learning,缩写 GAIL) 需要让智能体与环境交互, 但是无法从环境获得奖励。 GAIL 还需要收集人类专家的决策记录(即很多条轨迹)。 GAIL 的目标是学习一个策略网络,使得判别器无法区分一条轨迹是策略网络的决策还是人类专家的决策。
生成判别网络 (GAN)
生成器 (Generator) 和判别器 (Discriminator) 各是一个神经网络。生成器负责生成假的样本,而判别器负责判定一个样本是真是假。
训练生成器
生成器与判别器相连,固定住判别器的参数,只更新生成器参数
θ
\theta
θ,使得生成的图片
x
=
G
(
s
;
θ
)
x = G(s;\theta)
x=G(s;θ)在判别器中更像真的。对于任意随机生成的向量s,应该改变
θ
\theta
θ,使得判别器的输出
p
^
=
D
(
x
;
ϕ
)
\hat{p}=D(x;\phi)
p^=D(x;ϕ)尽量接近1。举例,用交叉熵作为损失函数:
E
(
s
;
θ
)
=
ln
[
1
−
D
(
x
;
ϕ
)
⏟
越大越好
]
;
s.t.
x
=
G
(
s
;
θ
)
.
E(s ; \boldsymbol{\theta})=\ln [1-\underbrace{D(x ; \boldsymbol{\phi})}_{\text {越大越好 }}] ; \quad \text { s.t. } x=G(s ; \boldsymbol{\theta}) \text {. }
E(s;θ)=ln[1−越大越好
D(x;ϕ)]; s.t. x=G(s;θ).
(关于交叉熵,可以看这里)
判别器的输出介于0到1之间,越接近1,损失函数
E
(
s
;
θ
)
=
ln
[
1
−
p
^
]
E(s;\theta)=\ln [1-\hat{p}]
E(s;θ)=ln[1−p^]越小。即我们希望期望越小越好,这里采用梯度下降更新
θ
\theta
θ。
θ
←
θ
−
β
⋅
∇
θ
E
(
s
;
θ
)
\boldsymbol{\theta} \leftarrow \boldsymbol{\theta}-\beta \cdot \nabla_{\boldsymbol{\theta}} E(s ; \boldsymbol{\theta})
θ←θ−β⋅∇θE(s;θ)
β
\beta
β是学习率,需要手动调整。
训练判别器
判别器的本质是个二分类器,它的输出值
p
^
=
D
(
x
;
ϕ
)
\hat{p}=D(x;\phi)
p^=D(x;ϕ)表示对真伪的预测。从真实输出抽
x
r
e
a
l
x^{real}
xreal,随机产生一个
x
f
a
k
e
x^{fake}
xfake
F
(
x
real
,
x
fake
;
ϕ
)
=
ln
[
1
−
D
(
x
real
;
ϕ
)
⏟
越大越好
]
+
ln
D
(
x
fake
;
ϕ
)
⏟
越小越好
.
F\left(x^{\text {real }}, x^{\text {fake }} ; \phi\right)=\ln [1-\underbrace{D\left(x^{\text {real }} ; \phi\right)}_{\text {越大越好 }}]+\ln \underbrace{D\left(x^{\text {fake }} ; \phi\right)}_{\text {越小越好 }} \text {. }
F(xreal ,xfake ;ϕ)=ln[1−越大越好
D(xreal ;ϕ)]+ln越小越好
D(xfake ;ϕ).
训练流程
GAIL 的生成器和判别器
训练数据
GAIL 的训练数据是被模仿的对象(比如人类专家)操作智能体得到的轨迹,记作
τ
=
[
s
1
,
a
1
,
s
2
,
a
2
,
⋯
,
s
m
,
a
m
]
\tau=\left[s_{1}, a_{1}, s_{2}, a_{2}, \cdots, s_{m}, a_{m}\right]
τ=[s1,a1,s2,a2,⋯,sm,am]
训练数据
GAIL 的生成器是策略网络
π
(
a
∣
s
;
θ
)
π(a|s; θ)
π(a∣s;θ),策略网络的输入是状态 s,输出是一个向量:
f
=
π
(
⋅
∣
s
;
θ
)
f = \pi(· |s;\boldsymbol\theta)
f=π(⋅∣s;θ)
判别器
GAIL 的判别器记作
D
(
s
,
a
;
ϕ
)
D(s, a; \phi)
D(s,a;ϕ),输出是一个向量
p
^
=
D
(
s
;
⋅
∣
ϕ
)
\hat{p} = D(s;· |\phi)
p^=D(s;⋅∣ϕ)
GAIL 的训练