赞
踩
元学习是一种来源于经典机器学习的算法。不同于经典的机器学习,元学习通过对学习这件事本身进行建模,让学习不在拘泥于在指定任务下的训练过程,而是让学习含有任务层面的算法求解性。即学习如何进行学习,简而言之就是学习你需要的任务模式。这里的任务模式可以是任何一种原来在机器学习中的手工设计任务,比如分类、分割等神经网络架构搜索,又或者是超参数算法任务等。
机器学习遵循函数求解的基本算法逻辑,即从数据中学习分布,并在目标函数的指导下完成优化实现对某个输入数据的函数性学习。
学习过程可遵循对
f
f
f的求解过程,我们希望给定一个
i
m
a
g
e
image
image,函数式
f
f
f都能正确的给出它的类别。那这就是一种对函数本身的求解过程:
f
(
i
m
a
g
e
)
=
c
a
t
,
d
o
g
,
.
.
.
f(image)= cat,dog,...
f(image)=cat,dog,...一般来说,经典机器学习遵循如下三个步骤:
1、数据输入模型
数据输入给一个未知的模型
f
0
f_{0}
f0,经过函数式
f
0
f_{0}
f0运算后会得到一个值
y
0
y_{0}
y0。模型
f
0
f_{0}
f0一般是经过设计的,这取决于数据经验或者已有研究。
2、损失设计与计算
对
y
0
y_{0}
y0与真实的标签信息进行“距离运算”即构成了一般分类问题的损失函数。“距离运算”在分类问题中一般是交叉熵
L
C
E
L_{CE}
LCE。当然也可以根据不同任务自行设计损失函数。
3、目标优化求解
对于获得的损失函数值,又或者是目标函数值,我们通常可以用一些求解手段来最小化它们以获得最优的模型函数式
f
0
f_{0}
f0,这里的求解过程一般可以是牛顿法,梯度下降法等策略。
至此,通过不断的在训练数据集的循环我们可以得到一个近似学习到该种数据分布的模型 f f f,使用未知数据进行测试 f f f,将会输出在训练历史中的相关信息。这其实就完成了机器学习过程。
对于元学习来说,情况有些不同。在上述的机器学习任务中,我们首先规定好了分类这个任务(亦或是你需要的任务),然基于这个任务,我们不断完成对数据内部的训练并测试这个机器学习器效果。元学习则是想要探寻在有限数据输入的情况下,哪种任务并衍生出的算法模型能够解决这些数据需求。一言以蔽之,元学习想要知道是如何确定分类(或别的什么任务)这个任务的?“如何确定”就揭示了学习这一过程的本质特点。从任务中学习,学习如何学习,都是对如何确定这几个字的解答。同时,元学习也遵循如机器学习一般的步骤性操作,但是要时刻记住元学习的逻辑:学习如何学习。
这其实是元学习的第一个步骤,即你需要确定让元学习这个工具去学什么?可能是学习率,正则化系数这种超参数,也可以是神经网络架构,参数初始化方式等模型内部细节。不同的元学习算法的本质就是在对不同的元内容(元特征)的 ϕ \phi ϕ 求解。以最常见的参数初始化方式为例,这也是元学习被提出来的首要需求,从小样本中学习数据本质。最为经典的是MAML方法,MAML是一种基于元学习的优化方法,对于连续空间的任务具有较好的适用性。比如,通过对特征参数空间这一本来应被先验性设计的超参数进行学习,从而确定在元学习计算策略下的目标初始化空间。值得注意的是这里并不一定会使用小样本数据,元学习是一种计算策略,它可能以更常见的方式出现在小样本学习中(后面会解释),但元学习并不等于小样本学习。
正如上图所示,元学习从具体数据集学习函数
f
f
f转向对任务
F
F
F的求解,而任务又可以是多种的,网络结构搜索,参数初始化,学习率等等。这样的目的决定了输入方式的转变。
当我们认同了这样的元学习架构,另一个问题又摆在了眼前,我们如何构建学习过程?
元学习仍为一种机器学习,因此必须要有目标(损失)函数才能进行学习。
以分类为例,通过对数据样本的学习从而得到一套模型参数进而对新输入的测试数据进行类别判断。如果我们有足够多的数据,我们完全可以从0训练一个机器学习模型,无论是手动的特征设计还是深度学习的特征自动提取,在足够的样本下,准确的进行每一个类别的划分都不是难事。但如果此时数据量很小,比如一个含有5个类别,每个类别仅有3张数据的分类任务,在不使用任何外部数据迁移学习情况下是很难设计出一个鲁棒模型完成分类任务的。即便我们有迁移学习这样的策略,但假如额外的获得相同模态的数据是更困难的呢?此时,元学习就成为了一种在小样本中进行参数初始化方式这个元特征求解的有力手段。如果我们在这套小样本数据中的相对固定的特征空间中进行如以往机器学习一般运算的话,解空间将会严格限制在特定区域内,这将不仅加快模型收敛速度,还会更容易接近最优值。
既然是学习如何学习,那么输入就不能是端对端的。假设现在有两个类,每个类中只有一张图像的(2-way 1-shot)N个任务(Task),对N个任务进行训练集(Train)和测试集(Test)划分。对于Train与Test集合内再划分为Support set 和Query set。Support set就对应上图的Training Examples, Query set对应上图的Testing Examples。但是需要注意,此时我们只使用Train中的Support 和Query。如果是参数初始化这个元学习任务,
ϕ
\phi
ϕ 就表示一种初始化方式,它可以是迁移来的,也可以是随机的。此时让Train-Query set通过由当前Train-Support set
ϕ
\phi
ϕ 产出并进行 inner fine-tuning 分类任务参数
θ
1
\theta _{1}
θ1 得到一个预测项,与label进行损失计算即完成了对于当前Task的一个loss计算。
如上图所示,在N个Task中图像分类可以是指向相同内容的,也可以是不同内容的。也可以用不同样式的苹果和橘子组成Task2来进行
l
2
l_{2}
l2计算。将所有的
l
l
l 加起来,就组成了元学习的整体损失
L
L
L。此时,我们并没有使用Test数据集,一切的操作都在Train集合中。与之前不同的是,传统ML方法会让全部的Train进入到model中,而在meta learning中,Train也将被划分为两部分,而计算损失的则是用于在训练集中用于测试的那部分数据(Query set)。但还没完,有了损失就需要计算求解。
对于元学习损失的求解也遵循最小化损失函数这一基本逻辑。在本例中从参数化行为中获得的分类损失的求解空间是连续的,因此可使用梯度下降方式进行优化求解。然而,如果元学习任务
ϕ
\phi
ϕ 是神经网络架构搜索这种离散行为,那么就有可能使用EM算法进行求解,甚至也可以再使用强化学习逐步迭代求解。无论哪种方式,至少可以通过某一种策略进行最小化损失,假设这一步骤是可行的。那么我们可以重新审视元学习整体框架。
在上述的所有环节中我们都没有使用Test集合。当我们在认为Train中的
L
ϕ
L_{\phi}
Lϕ 降的差不多了,就可以拿来做真正的ML训练了,此时Test集合中的Support set是 train,Query是 真正的test。
整体回顾一下,自始至终Train集合就是在做一件事,边学边测,用测试的内容作为损失进行优化。而Test集合利用了Train集合的结果,对Support set进行一般ML训练,真正的test则发生在Test集合的 Query set中。
再说一下小样本学习和元学习的区别和联系,小样本学习是指在极少样本下的模型学习,比如上述我们提到的每个类别只有3张图像的五分类问题,如果有相同模态的预训练迁移,小样本学习任务也可以得到妥善解决。这3x5=15张图像甚至可以看做是大规模相同模态数据集的测试数据。因此,小样本学习是一种目的,而如何实现从小样本中学习确有多种手段。元学习是最常见的一种小样本学习手段。因此,如果你有大样本你仍然可以进行元学习,但带来的困扰就是元学习每次训练都需要花费很长时间,并且如何判断Train是否降低到足够小以用于Test集合中的ML训练对于大样本来说相对模糊。因为有大样本,一次只输入几张的元学习运算反而不如端对端ML模型求解来的更快且直接。
这就是一个开放性问题,也具有开放性答案。对于不同任务需求的人来说,元学习光彩各异。比如前述提到的小样本参数初始化任务的元学习,在这个问题中,元学习解决的是学习一种更适合当前数据的参数初始化方式再进行机器学习,可谓是决定着学习的学习。同时元学习本身也具有机器学习的瀑布问题:
总之,元学习作为一种计算策略,应用方式要随着具体任务的迁移而发生改变,其中要解决的问题也非常多,尤其在数据样本为丰富的今天,挖掘新的元学习任务与策略发现更为本质的元信息实现属性学习则有可能成为新的热点方向。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。