Meta Module Generation for Fast Few-Shot incrememtal Learning

Meta Module Generation for Fast Few-Shot incrememtal Learning

Abstract

在只有少量样本的情况下,使用DNN来做增量学习有两个主要的挑战:

  1. DNN需要使用大量的数据进行训练
  2. 对于新增的类别,DNN会忘掉

为了解决上面两个问题,作者提出了MetaMG(Meta Module Generation),一个基于Meta-learning的方法, 能够基于少量样本利用module generator 产生一个category module, 从而实现识别新的类别, 并且在新的类别加入了之后,老的类别并不会被遗忘。

Introduction

Deep learning在分类的任务型上面做的比较好,其原因很大程度上依赖于大量的训练数据,但是当训练数据变少了之后,性能会下降很多,但是人却不是这样。并且人还可以不断地学习,而且对之前的知识忘的并不是那么快。

  • N-way,K-shot Task

即指的是区分N个类别,每个类别仅仅有K个样本供训练。 这样的任务可以看成是当数据缺乏时的一个情况,这时候迁移学习以及加正则化防止过拟合都不太有效,结果仍然是会过拟合. 当前针对这样的任务的解决方案是”learning to learn”或者称为”meta-learning”。通常的分类任务是在很多有label的数据上进行训练,而meta-learning是基于很多的tasks进行的, 其中每一个task都有训练集和测试集。按照有监督的图像分类任务来讲, meta-learning可以分为两个阶段,即meta-training和meta-testing. 在 meta-training阶段,meta-learner学到的是这些任务之间的联系与本质,或者说可以迁移的东西,或者简单地理解为经验。这种知识或者经验可以是图像的表示,其中图片之间可以通过定义的度量来衡量相似度, 这种知识经验也可以是一个优化器或者是优化方法,能够提供优化方法来处理few-shot设定下的分类问题.当meta-training之后,meta-learner就可以应用到去处理给定的few shot classification 问题, 只需要将其当成一个新的任务即可.这时候就会用到之前meta-training阶段学到的经验。[DIMP里面其实就用到了这种思想.]

MetaMG主要的模块是module generator,它会根据少量的样本产生category module 从而识别出新的类别.识别的过程就是将这些category modules 弄到一块儿,从而将特征空间划分不同的区域,分别代表这些不同的类别。 如下图所示

avator

Framework

avator

如图所示, 框架主要分为两个部件,分别是classification network和module generator.

  • 设计原则
  1. 当一个pretrain的feature extractor应用到不同的数据上时,embeded features的类别可能不是线性可分的,因此category modules应该是非线性的,这样才能够把他们分好

  2. 分类网络的size应该是endurable的,否则当有很多类别加入的时候就崩了,因此需要category module 轻量。

  3. module generator 实际上是从一个(K,d)维的欧氏空间到一个p维的欧氏空间(代表一个category module的weights)的映射, 因此module generator 应该是strong in feature correlation,这样才能够实现当类别之间接近的时候,产生的category module也很接近。即关于feature 应该是一个正相关的.

  • Classification Network

分类模块是由feature exactor和category module组合而成的. 因为希望category module是非线性的,在特征空间中能够形成一个封闭的区域, 因此

  1. Spherical Category Module是自然的选择

这时候需要一个球心m和一个半径r, 给定一个feature 空间中的点p, 这时候spherical category module会根据下面的公式计算是否属于该类别

avator

实际上就是 r-到球心的距离.

  1. Multi-Gaussian Category Module

这时候是基于 一个类别的特征空间中的点服从高多维高斯分布,从而就会由一个mean vector以及一个covarance matrix 来确定. 这时候相似度是这样算的

avator

但是这时候参数比较多,而且优化起来比较麻烦,那么为了方便,直接使用对解矩阵来代替协方差距阵.

  1. MLP Category Module

即直接让MLP网络来学习一个相似度,并不对一个类别的特征空间中的点的分布做假设.

  • Module Generator

主要是产生category modules,这些category modules可以被加入分类的网络中从而能够识别出新的类别.它的实现在本文中有两种结构:

  1. LSTM-Based Module Generator

avator

如图所示, k张图片会先经过一个linear layer得到features, 之后它们分别送入k个LSTM结构,这就是encoder部分,之后再进入一个线性的decoder部分,输出参数w, 个人理解这个过程就是如何利用仅有的k个图片的特征得到能够代表整个类别的权重vector. 最简单的也可以直接average pooling,但是效果可能不是那么好.

  1. DeepSets-Based Module Generator

正如上面所说,就是想根据仅有的图片得到一个合理的权重vector,因此用了DeepSets中的想法.

module generator 产生区分性的category modulse就是通过meta-learning在auxiliary tasks上面学到的.

Few-Shot Incremental Learning

  • 记号
  1. meta sets

用meta-train, meta-val, meta-test来分别代表meta-training set , meata-validation set 和meta-testing set. meta-training set 主要用来去建立meta-training tasks来训练module generator G; meta-validation set 主要是监督training的表现,选择G的最好的参数; meta-testing set 是评测分类的表现.

  1. task内部的

针对一个task,有: D_train 包含了随机选择的类别作为support sets, support sets为G的输入. D_test 包含了随机选择的(sample, label)的pairs, 用来评价G产生的modules的表现. 对于meta-training阶段中的一个task而言, loss是在D_test上计算的,然后反传来更新G的参数. 通过随机的建立不同的(D_train, D_test)就可以建立起不同的tasks, 所有这些tasks就可以形成task space, 所有tasks服从的分布记为p(t). 个人理解其实meta-learning就是定义在tasks上的一个泛函.

比如有很多的学习任务(语文,数学,英语), 那么每一科学完之后可以通过考试来衡量,那么通过这些学习任务总结出来的经验,就是学习方法,这就是meta-learning的任务.

  • problem formulation

每一个任务对应着随机选择的C个类别,每个类别中有K个样本,这组成了D_train; N个pair对组成了D_test,其中每个类别有N/C个样本. category module实际上可以看成一个函数M(., w),其中w可以表示成为G(F(S_c))。 定义了有局部的loss和整体的loss.

  1. local loss

avator

即针对每一个样本是不是给定的那个类别的一个监督,

  1. global loss

avator

即cross-entropy, 即希望每一个类别正中的类别的那个概率最高.因此加了一个softmax的loss

注意上面的区别,比如以C为5来理解, 针对某一个样本(X, 2), 即label的One-hot形式是[0,0,1,0,0], 我们的C个类别module合成的大module应该会预测出C个输出,即logits, (10,5,2,-10,1),那么 local loss在这个样本的loss即为-log(sigmoid(2))-log(1-sigmoid(5)) - log(1-sigmoid(10))-log(1-sigmoid(-10))-log(1-sigmoid(1)), 即同时希望2号位置变得更大,同时希望其他位置变得更小, 但是这并不能够保证2号位置是最大的。

因此还需要加上global-loss,即-log(softmax), 这就牵涉到-log(softmax(a1,a2,…,an))什么时候最大的问题了.(这里有一个细节是为什么softmax的优化目标是这样的.)

如果C等于2的话, 比如logits是(10,5), gt 是1,那么local-loss为(-log(1-sigmoid(10)) - log(sigmoid(5))) 而global-loss为(-log(exp(5)/(exp(5)+exp(10)))),

用数学形式写出来即, avator

experiments

  • 整个优化过程如下

avator

  • 其他细节
  1. feature exactor: resnet101 pretrained on Imagenet, 在meta-training的过程中,固定参数不动.

  2. 实现结果证明,随着类别数据目增多,效果会变差(可以理解);sphere category module效果要更好 avator

  3. 基于LSTM的要比基于DeepSets的效果要好.

avator

thoughts

感觉可以将few-shot的想法应用到sot任务上面,其实DIMP中就有meta-learning的思想在里面.

打赏,谢谢~~

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,多谢支持~

打开微信扫一扫,即可进行扫码打赏哦