meta learning
2019-05-26 本文已影响0人
机器学习与自然语言处理
想较于之前的机器学习算法,meta learning 是让机器学会学习。传统的机器算法只是希望机器学习到一个函数,通过这个函数
,来判断这个图片属于究竟属于哪个类别,一条微博的评论是正面还是负面。但是meta learning 是希望机器在学习了一些图片分类任务之后,可以学会文本分类的任务。

与life long learning 不同,metal learning是希望在不同任务上机器都能自己学会一个模型,而前者是希望学习到一个模型可以处理多个任务。
machine learning 和meta learning的区别:

下面具体阐述meta learning是如何进行训练和实现的。
一般的机器学习的流程,最开始是需要定义一个网络结构,定义初始化参数,计算模型的损失函数,通过梯度下降的方法来优化参数。最终得到一组最优解。

其中红色框框的部分都是人工进行设计的,网络结构、初始化参数,更新参数的方法这些能不能让机器来自己实现呢?如果机器能够自己的初始化参数,自己设定更新方法,就在一定程度上实现了meta learning 。
既然一个meta learning是找到一个F,产生一些列的f,那么如何评价的这个F的好坏呢,这个和机器学习也有类似的地方就是通过具体的任务,测试模型的效果。在不同的任务上,看一下相应的f的效果

在这里就可以看到machine learning和meta learning的区别,前者的输入是不同的图片或者文字数据,后者是不同的任务,通过产生的f在不同任务上的效果,来 评价这个F的效果。

meta learning 的思想在few-shot learning上有广泛的应用。
因为meta learning 需要跑很多的任务,所以通常每个任务的数据集并不是很多,不然需要耗时很久啊。
损失函数和优化方法,就是在不同的任务上效果更好一些。

meta learning 的mnist 公开的标准数据集

一共有1623的字符,每一个有20个范例。
那么如何使用这个数据集呢?

每次从数据集中抽取出N个类别,每个类别有K的sample.

meta learning中主要的几种方法:

MAML是学习一个最好的初始化的方法,如何评价呢,采用这个方法初始化参数,之后看不同任务上的效果。

在多任务学习中,我们也提到过使用其他任务训练好的参数,来初始化当前的模型。那么MAML和预训练模型的参数有什么区别呢,前者是在所有任务上训练完之后得到的,后者是使用上一批数据训练出来的model,直接用在新的数据集上面。
这两者的区别就是

MAML侧重于找到一个φ,有很大的潜力可以让模型的效果得到提升,使用梯度下降法之后可以得到最优的解。model pre-training就是比较注重φ当前的表现,找到一个φ在所有的任务上表现好。



在MAML中,每个任务的参数更新,一般只做一步,这样做,一方面是模型训练可以很快,同时训练一步效果已经ok了。

既然神经网络可以拟合任意的函数,通过一个例子看一下MAML和model pre-training上的效果如何。在正弦函数曲线中随机选择一些点,看一下拟合能力

下图是在model pre training上的效果 ,为什么是一条近似于水平的直线呢,因为不同的正弦 曲线,当相位发生变化时,y值在相加时最有可能得到的是0 ,相当于互相抵消掉了。

下图是MAML的方法,
