一、从监督学习到决策
首先来看一个标准的监督学习的例子,给定一张图片,然后通过CNN对其进行分类。
但是,在强化学习的世界里,重点是Agent对环境如何做出决策,即Agent看到老虎会采取什么行动, 那么我们将最后的分类标签改为一系列行为, 如 {逃跑,模仿武松打虎}, 这就是对行为(决策)的监督学习。
可以看到,对行为的监督学习本质上也是一种分类任务,但是和传统分类任务不同的是:前者具有序列属性,也就是说,上一阶段的输出决定着下一阶段的输入(看到老虎选择逃跑或者打虎,之后发生的事肯定是不一样的). 在强化学习的世界里,相关元素也有专业的术语。
- o t o_t ot: 称为Agent对环境的观测(observation), 对应着图像分类任务中的输入图像。
- a t a_t at: 称为Agent关于目前环境状态选择的行动(action), 对应着图像分类任务中的标签。
- π θ ( a t ∣ s t ) \pi_{\theta}(a_t|s_t) πθ(at∣st): 称为策略(policy), 对应着图像分类任务中的分类模型。
除此以外,在强化学习中,我们仍然需要明白状态(state)和观测(observation) 的区别。简单来说,前者表示了真实的客观世界,而后者是前者的有/无信息损失的表示。举两个例子:
-
有损表示:
如上图所示,在这个例子中,观测即是该图片本身,由一个二维的像素矩阵组成。而状态则包含了豹的速度,猎物的速度等等物理信息。而从观测中我们无法得到这些关于客观世界的信息,因此这是一种有损的表示。 -
无损表示:
对棋盘的描述,观测便可以作为状态的无损表示。
状态、观测 、行为可以由如下的概率图模型表示, 且一般我们假设其满足马尔科夫性:
二、模仿学习
由上述对行为的监督学习,我们便可以得到强化学习中的模仿学习(Imitation Learning). 其本质便是Agent通过数据学习
π
θ
(
a
t
∣
o
t
)
\pi_{\theta}(a_t|o_t)
πθ(at∣ot). 下图是自动驾驶的一个示意图:
但是,Agent真的能通过对有限数据的模仿从而在现实世界的任务中表现地好吗?答案是否定的. 由于序列决策任务具有错误累积的性质,因此,往往最后的结果和给定的数据相比,有很大的偏差。如下图所示:
如自动驾驶来说,如果小车在某一个位置做出了一点错误,那么它看到的情形将和训练集的图像有一定偏差,那么可能就会做出不好的行为,而这不好的行为又造成更大的偏差,从而累积错误。
基于此,Nvidia在它们的自动驾驶实验中,对小车安放了三个摄像头,分别观测左前方,前方,右前方,并且对左前方的图像给定一个稍右转的标签,右前方的图像给定一个稍左转的标签。这样便起到了一定的修正作用。
回到错误累积的问题,我们如何用数学语言描述这样的错误呢?我们认为真实的观测数据满足一个分布
P
d
a
t
a
(
o
t
)
P_{data}(o_t)
Pdata(ot). 而Agent做出的行为满足一个分布
P
π
θ
(
o
t
)
P_{\pi_{\theta}}(o_t)
Pπθ(ot). Agent犯错,本质就是
P
π
θ
(
o
t
)
P_{\pi_{\theta}}(o_t)
Pπθ(ot)偏离了
P
d
a
t
a
(
o
t
)
P_{data}(o_t)
Pdata(ot). 因此,我们可以通过让两个分布相等从而提高Agent表现。由此,我们有著名的DAgger: Dataset Aggregation算法:
该算法思想简单,也能够收敛,但是,这期间需要人的参与,需要花费大量的人力。那么如果我们没有进一步的人力资源呢。我们只能够通过构建更强大的模型,从而使得模型能够很好模仿专家的行为。
在模型模仿专家行为过程中,通常有两个难点问题。
- 非马尔科夫性:
人类专家所作出的行为并不是满足马尔科夫性质的。这样就需要模型有着对序列建模的能力。通常,我们可以通过RNN结合CNN实现建模。
- 多峰行为:
对上图所示的情形,我们可以选择左转,也可以选择右转,因此如果我们采用离散分布建模,最后的概率分布很明显如图中的蓝色所示。但是,如果我们采用连续概率分布建模呢?在该种建模中,我们通常选择高斯分布,并且通过神经网络学习其分布的均值和方差,但是高斯分布是单峰的,因此,针对这样类似的多峰行为,无论如何简单的网络都无法拟合真实情况。
针对多峰问题,我们有以下解决方案。
- 混合高斯分布:我们采用多个高斯分布去拟合真实的连续分布。
- 隐变量模型:
待理解
- 自回归离散化
待理解
三、模仿学习的问题
- 第一,人类需要提供数据,而人能提供的数据通常是非常有限的,即便如头戴摄像机这样相对便宜的手段被开发出来,而深度神经网络通常需要大量的数据才能把事情做好,此为一大限制。
- 第二,人类不善于提供有些类型的行动指导,原因可能是多种多样的。
- 第三,人类可以自主学习而机器则不能,自主学习的好处是我们可以通过自己的经验获得无限量的数据,看到错误可以自我修正,达到连续的自我提升。
四、奖励/代价函数
既然提到了模仿学习的弊端,那么,我们应该如何解决这个弊端呢?模仿学习是希望Agent模仿人的行为,这样的行为似乎是无脑,无目的性的,然而决策都是带有目的性的,因此,我们是否应该引入目的因素呢?而这,就引出了奖励/代价函数,以此来刻画目的。一般我们用 r ( a , s ) r(a,s) r(a,s)表示奖励函数,用 c ( a , s ) c(a,s) c(a,s)表示代价函数。它们两者是等价的。
回到最开始的问题,对于Agent见到老虎所采取的行动。我们可以设置如下的目的: a r g min a 1 , a 2 , . . . , a n P ( e a t e n b y t i g g e r ∣ a 1 , a 2 , a 3 . . , a n ) arg \min_{a_1, a_2, ..., a_n}P(eaten \ by \ tigger|a_1,a_2,a_3..,a_n) arga1,a2,...,anminP(eaten by tigger∣a1,a2,a3..,an)
即采取的行动要使得自己被吃的概率最小。
而对于自动驾驶的这样的模仿学习,我们可以认为它们的目的就是纯粹的模仿: 即最大化似然 l o g ( a = π ∗ ( s ) ∣ s ) log(a= \pi^*(s)|s) log(a=π∗(s)∣s)
总之,个人认为,引入奖励/代价函数相当于引入了目的,让Agent不再是纯粹的模仿,从而能够自我提升。
在实际问题中,奖励函数的形式也是很重要的:
如上图所示,下方的奖励函数都会比上方的奖励函数更加鲁棒。总体而言,奖励函数应该更加平滑,应该尽量避免非黑即白。