Meta Learning

这个meta learning就是 learn to learn  主要是用一个网络学习另一个网络的东西


首先介绍一个文章  Matching Networks for One Shot Learning 

blob.png

应该是16年的nips


这个文章就是学习one-shot的这种东西  用的是类似 KNN的那种思路


blob.png

其中x^{hat}就是指的输入的测试数据,x_i是训练集的数据,这样可以看作是knn的一种表示


blob.png

也就是我们用的这种attention的方法,来寻找这个最近的东西


注意 我们选的这个k个东西, 叫作 support set  也就是one-shot learning中那每一类只有一个数据的东西 支撑集应该是在knn里面有说  蓝本什么的


现在重点来了 其实我们看论文如果只看它的模型的话,大家都大同小异,所以这种模型不用看(怎么算f怎么算g)  主要是它对一个任务的介绍


首先是 在很多情况下 我们不是一个类别只有一个标签,那么我们怎么算这个one-shot呢?

blob.png

也就是其实我们每次也就是取全集中一些类别的标签出来,

blob.png

这一步就很清楚了  我们是先选label  比如我们有一个任务是城市分类,判断一个文本描述的是哪一个城市,我们候选城市有1000(|T|=1000)个,我们首先选label 也就是sample L from T  这个时候L很可能就是 ‘北京’,‘上海’。然后我们根据这个L去从训练集选取支撑集S 也就是随便找两个标签是北京和上海的样本。然后我们选取一个batch 这个就可以很大了,但是标签也是只能是这两个。然后按照上面公式2来训练,这样就是可以构造我们的one-shot的训练过程了。


然后我们再来看下一篇文章

Meta Networks 

主要是meta-learning

整体结构是下面这样的 


blob.png

首先是一个base learner  学习输入输出 有自己的slow weight  


然后 它提供一些东西给meta learner 这个东西就是他的梯度

blob.png

blob.png

看到没 其实也就是那个支撑集  基本上都是一个类别一个数据的那种,这样才会固定有多少个导数


然后    我们的meta-learner拿到这些信息之后,开始产生一个新的weight W*  这个新的weight是base learner的fast weight 也就是每一个数据都有的一个独特的weight 


blob.png

看到没 就是将梯度转化成那个fast weight


然后这个meta-learner也有两个参数  一个是fast 一个是slow weight


但是这个meta-learner的fast weight是自己学的  我们看看怎么产生这一切的 

blob.png

blob.png

可以看到也是自己逗自己玩,但是这里面用了一些新的数据来学习这个Q* 也是另一些支撑集


有了这些 我们就可以算哪个W*了

blob.png

其中M是

blob.png

  也就是刚才上面那个导数求出来放到的地方,每次都在变


两套参数同时作用的时候 是这样的


blob.png


最后就是为了让下面这个目标函数最小,因为W_j^*是哪个meta-learner的参数,所以也可以学出来,所以现在都学出来了


blob.png

说的很清楚 ,也是每一个任务 (其实就是上一篇文章的那个batch) support set是每一类只有一个标签的那个支撑集,然后每一个meta-learner其实是只在这个支撑集上面得到输入


也就是cross-task的信息。但是这个base-learner就是跟support set无关了,而是对当前的输入(3)来改变  


具体过程我猜就是 来了一个样本,先用当前的W 算出对支撑集的梯度,然后得到了W*  。再来一个数据,再算。。。。

留下您的评论

回复列表:

By王炳宁 on March 9, 2017 | 类别 ML

关于本站