Self-Supervised Meta-Learning for Few-Shot Natural Language Classification Tasks
引言部分
- 这篇文中提出了两个点:一个是使用自监督来生成多种多样的任务从而通过meta-learning来学习得到更加具备泛化性的学习能力;第二个点是使用few-shot来对于之前通过meta-learning学习得到的更加具备学习能力的模型进行微调;
- 首先,pre-train model是通过预训练来得到一个良好的模型的初始化参数,然后再配合微调的方式来得到最终在特定任务上的模型;但是这种方式是存在缺陷的,即用来微调的数据可能并没有那么多,从而导致在最终任务上的效果可能不够好;
- 对于上面的方法,文中提到的解决办法即是使用一些用在few-shot上,也就是针对于少样本进行微调的方式对于原来的泛化模型进行具化。现在问题就是可能原始实现meta-learning的任务种类就没那么多,从而最终可能导致学习得到模型不具备较强的学习泛化能力;
- 本文中提到的模型即针对于上面提到的这种问题进行的改进,通过从大量的无标签样本中构建大量的丰富的meta-learning任务分布;这种构建多种不同的tasks的思想是通过一种完形填空的目标函数来驱动从而创建出多种不同的tasks,创建不同的多类分类任务通过将少量的单词术语变成空白框,从而实现完形填空驱动的多类分类任务;
前言部分
-
文中提到,将大规模预训练语言模型在小规模数据集上fine-tuning时,数据不充分不能够取得很好的效果的这种情况认为是一大挑战。作者认为这将是一种few-shot Learning,因为这种情况就被称为是训练和测试集的模型不匹配问题,在进行微调的时候不能够学习到一个很好的初始化参数,同时进行fine-tuning的时候还要引入一些额外的参数,这就导致在本就不多的特定任务的数据集上很难习得很少的模型结果;
-
文中对于上面挑战,提到的解决办法是使用meta-learning的思想,让模型在大量的不同任务上学习如何学习 ,使用这种思想来提升模型在少量样本的task上的泛化能力;本质上就是让通过meta-learning这种思想学习得到在不同的task的分布表示,从而最终可以泛化到后面的未知task上;这种就是一种数据高效的fine-tuning,称为是meta-learning;
-
但是这种思想也是存在弊端的,如果在具有大量带标签的data set中进行meta-learning最终可能导致meta-overfitting,最终学习得到的模型可能在未知的task上的处理具有偏向性;不能够很好的泛化到新的任务上;
-
为了解决上面的这种问题,文中提到的解决办法是使用self-supervised Learning的思想,借助完形填空的目标函数,从而在大量的无标记的句子上建立多种不同的tasks;
- 通过将词表中的单词子集,将句子中的包含这些子集中的单词将这些单词变成空白项,按照理解上来说就是将空白项中部分当成模型预测的目标、当成标签,最终就形成了一个多类分类任务;;由于单词表中的单词子集的数量是巨大的,因此最终诞生任务的不同种类也是种类繁多的;这也是有利于学习得到多种不同的元学习任务,最终让模型学会学习,得到这些不同任务的分布表示,从而更容易泛化到新的任务上来;
- 文中提到的这种方法称为是Subset Masked Language Modeling Tasks (SMLMT)
-
这篇文章主要是用来处理few-shot问题:
1. 提出使用自监督的方法来创建针对于NLP上的meta-learning任务,提出了SMLMT
2. BERT就是基于这种任务驱动训练出来的;
3. 文中的方法也可以结合监督数据来学习更加丰富的特征表示,同时还避免了meta-overfitting问题;
4. 这种方法在few-shot问题取得了很好的泛化能力;
5. 同时,进行了实验来探究在few-shot问题上模型参数的数量对于模型性能的影响,meta-learning使得小模型在few-shot问题上也可以获得不错的性能;
模型序言
文中首先介绍了Meta-learning的工作方式,提到Meta-learning是学习一个任务分布P(T)P(T) ,其中TT 表示多种不同的任务的集合,即T={T1,T2,...,TM}T={T_1,T_2,...,T_M} ,如果是对于有监督的分类任务来说,其中的TiT_i 指的是Ni−wayN_i-way 的分类任务,即对于这个分类任务中一共有NiN_i 个类别;大部分的Meta-learning方法通常是对于多个不同的分类任务固定分类的类别的数量;但是文中使用的方法不同的是对于每一个不同的分类任务分配不同潜在数量的分类类别 ,从而可以保证meta-learning 的train set中具有多种不同的任务;
Meta-learning的学习目标是利用meta-train的不同tasks学习到一个学习流程,最终可以将这种学习得到的泛化流程使用到新的任务中,即学习一个映射让这个映射学习不同任务是如何学习的,形式化的表示就是T′T'~ P(T)P(T) ,让新的任务T′T' 服从于之前学习得到不同任务的分布表示;文中提到的忽略模型的meta-learning(MAML)就是这种的meta-learning之下的一种模型,对于MAML这种模型本身的一些参数而言,记为θ\theta ,即需要学习这样的一个映射关系:

通过使用梯度下降算法来得到最优的模型参数:

其中,α\alpha 为MAML进行梯度下降的学习率,Li(Dtr,θ)L_i(D^{tr},\theta) 表示在任务TiT_i 下支持集DtrD^{tr} 中的损失loss;通过梯度下降算法得到最终的模型参数θi′\theta_i' ;
将通过上述通过梯度下降得到的最终模型参数θi′\theta_i' 放入到该任务对于的验证集DvalD^{val} 中进行评估,然后通过最终的模型在这个验证集下的损失进行梯度下降,


其中,β\beta 表示在meta-training步骤中的学习率,
上面两个公式(1)和(2)分别表示参数优化过程的内循环和外循环;训练的过程在一个个独立的模块框架中进行处理,其中的每一个小模块中的mini-batch是通过在train set和val set中进行采样得来的;
文中对于meta-learning的这种meta-train过程进行了定义,假定这种有监督的task中的标签数量是有L个,对于其中的每一个子任务定义为N-way k-shot,其中N<<L,k为这N个不同的子任务中每一个子任务中不同标签下的support set中sample数量;
从data set中对于上面的这N个类中,每一个类取出k+q个样本,其中k个样本作为当前这个label下对应的实例数量,N个类中的每一个类中的q个样本放在一起共同组成当前这个任务的query set;
对于meta-train要避免学习sample跟某一个label的绑定映射,因为meta-learning是为了泛化这些不同tasks的不同任务分布,从而学到如何进行模型的学习,如果一旦学习到固定的映射关系,这将不利于meta-learning的泛化,和后面对于new task的学习;
Self-supervised Tasks for Meta-learning
文中提到对于使用原来的全监督方式来学习一个模型这种方式是有如下缺点的:
1. 首先,具有大的标签空间的大的数据集并不是在每一个NLP任务上都是有效的,比方说情感分类任务中的标签数量就是很少的;
2. 第二,受限于固定的全监督的数据集,这种方式下学习到元学习模型是具有不太强的泛化能力,这种模型可以很好的泛化到这个任务中的新的标签,但是对于泛化到新的任务上能力确实不足;
3. 最后,这种全监督方式训练得到的模型的灵活性并不高,例如,对于在不同的领域中元学习一个自然语言推断模型,这种模型可以很好的泛化到不同的领域中;一种强有力的模型可以做到忽略掉train set中的数据,直接对于在每一个训练领域中的sample进行预测label ,但是这种模型的泛化到新领域能力并不强;文中使用了无标签数据进行掩码预测最终创建出不同的meta-learning tasks的方式来解决这种繁华能力低的问题;
SMLMT:
1.
首先给定了一堆输入句子XiX_i 然后还有一个词表,而这个句子是这个词表中的单词组成的序列,词表的大小为V;
2.
在子序列掩码语言模型中,每一个任务都是词表中单词的子集。对于每一个任务而言,作为一个N-way分类任务,从V中随机的选择N个不同的单词作为需要进行Mask部位,其中词汇表集合为{v1,v2,...,vN}{v_1,v_2,...,v_N} ;所有的句子中都包含着这N个不同的单词;
3.
然后,对于每一个单词随机选择r=k+qr=k+q 个句子,将其中的k个句子作为support set中的元素,q个句子作为query set中的元素;

上面集合中的viv_i 将作为这个这个句子中需要mask的word,即作为这个sentence的label;
4.
对于其中的每一个句子中的viv_i 进行mask处理,最终得到的句子处理之后的集合为

5.
最终形成的N个不同的类别的sample集合为

这个集合的大小为N*r维的大小,其中的N为共有N个不同的类别,r表示这个类别中共有多少个sentences;
6.
将Mask掉的这些tokens的信息忘掉,分配{1,...,N}{1,...,N} 这些数作为当前这个句子的label,最终通过 子集掩码模型 构建出来的分类任务集合为
T={(xij,i∣i∈{1,...,N},xij∈xvi′}T={(x_{ij},i|i∈{1,...,N},x_{ij}∈x'_{v_i} }
然后再将这个集合划分成支持集和验证集;
7.
这种子集掩码模型的实例,通过将选出的单词mask掉,最终mask的这个word将会跟这个句子的lable具有一定的对应关系;SMLMT模型将会保证这种模型不会记忆下来这种input data和label之间的映射关系,因为对于masked的单词是从词表中随机选择的,同时对于这些单词对应的label的标号也是随机指定的;
8.
对于SMLMT中的每一个不同的单词将会对应一个不同的子任务,将会生成多个不同的子任务,由于词表中单词子集的数量的缘故;
9.
这种方式使得unlabel data可以构建多种不同的任务从而驱动meta-learning
Hybrid SMLMT:
1. 这种混合式的SMLMT模型,是将原始使用unlabel数据的tasks进行mask这种方式结合有监督任务,最终实现效果,文中提到如果将unlabel数据结合有监督数据,这样做最终可以提升tasks的多样性;
2. 所以使用了一个抽样率的概念,λ∈(0,1)\lambda∈(0,1) 从每一个独立模块中抽取sample,其中SMLMT task 是以概率λ\lambda 为指标来抽样结果,而有监督数据是以概率1−λ1-\lambda 为指标从有进度的数据中选取结果;
Meta-learning Model
- 这个部分是对于本文中使用的Meta-learning模型在进行meta-learning时候,在执行这个流程的时候,其中涉及的点;
Text encoder :
1. 这个部分中主要是讲述了文中的模型是通过什么原理进行文本编码的;
2. 首先,对于这个文本编码器的输入文本肯定是自然语言的句子,同时,这个模型中使用的是以transformer一类的文本编码器,而文中使用的是BERT作为这个文本编码器;
3. 给定一个原始的输入文本,对于这个句子中的每一个token,通过结合使用上下文的token信息表示,将一个输入经过多层的self-attention层之后,最终得到关于每一个词的token表示;
4. 同时这里结合了BERT中的特殊字符$[CLS] $ ,将这个字符作为一个句子的开始符;然后,给定一个输入句子x,将fπ(X)f_{\pi}(X) 作为带有参数π\pi 的最后一层的Transformer的CLSCLS 类型的表示结果;
Meta-learning across diverse classes:
1.
这个部分讲的是如何通过多种类别的tasks来进行meta-learning;
2.
文中在一开始提到,meta-learning的动机是为了学习一个可以泛化到NLP新任务上的初始点,即初始参数;
3.
文中为了实现这个目标使用的方法是通过不同的类别数量来实现不同种类的tasks的构建;
4.
本文中提出的模型使用的方法是通过生成以任务支持集为条件的softmax 分类层的参数,最终使得meta-learning得到的模型可以适配到不同种类任务上;
5.
关键点是训练一个深层次的编码器gψ(⋅)g_{\psi}(·) ,其中ψ\psi 为参数;这个编码器使得输入NN 个类别的实例,然后生成d+1d+1 维的嵌入,将这个嵌入作为softmax分类层中n个类别的线性权重和偏置值;

将上面的k个实例作为任务t中的类别n个k个实例;



6.
然后,使用MAML的方法使用内外两层循环的方法来优化其中参数;将

作为内循环进行优化的参数;
将

作为外循环需要进行优化的参数;
个人认为其中的ψ={ϕ,Wt,bt}\psi = {\phi,W_t,b_t} ,而α\alpha 表示内循环中的这个层中的优化的学习率;
Fast adaptation :
1. 文中为了避免像MAML这个模型优化的速度缓慢,文中使用的方法是扭曲损失面的方法来使得损失可以尽快的进行优化;
2. 使用的方法就是将BERT中的存在的Transformer层作为扭曲层,具体操作方法就是将两个self-attention层之间的的feed-forward层作为扭曲层;这个扭曲层是一个非线性层;将这个扭曲层的维度从768 to 3072 to 768;
3. warp layer可能不能在每一个任务上进行优化,但是仍然是可以在外循环中进行优化的;
4. 5. 由于这个扭曲层不能够在每一个tasks上都进行适配,这种特点就使得这个层中具备在fine-tunning时更快的训练速度、更少的需要优化的参数;
Meta-learning算法:

实验部分
对比实验
文中在获得SMLMT部分的数据时,使用的数据集跟BERT原生使用的数据集是相似的,这种构造方法是为了避免如果产生较好的结果时被认为是由于数据集的不同和多样性,从而导致了最终的实验效果好,这种方法类似于控制变量法,控制数据集部分不变来检测model的性能好不好;
在实验使用的模型有BERT模型、MT-BERT模型——多任务模型、MT−BERTsoftmaxMT-BERT_{softmax} ——在上一个模型的基础上对于softmax分类层也进行微调处理、LEOPARD——只使用有监督数据进行训练的meta-learning模型、SMLMT、Hybrid-SMLMT这两个都是文中的模型;
在使用时,这些使用Transformer的模型使用相同的Transformer架构,这样可以保证由可见部分组件带来的贡献是相同的;
同时LEOPARD和SMLMT以及Hybrid-SMLMT模型使用的meta-learning框架相同的;
meta-overfitting
文中通过图像表示出LEOPARD在后面的多层训练中,到后面的学习率直接是趋于零,这就表明了该模型产生了元过拟合现象,在这个任务上已经不需要再进行任何优化了,那么对于这个模型在泛化到其他任务的话可能效果就并没有那么好;
再来关注文中提到的Hybrid-SMLMT模型,这个模型不管是学习的再长时间,该模型的学习率都会保持较大的非零值,这就证明了这个模型不会在某些任务的数据集上产生meta-overfitting;究其原因,文中推测是因为SMLMT模型通过在大量的无监督的数据集上进行自监督学习,从而极大程度上避免了meta-overfitting这种现象的产生;
总结:
- 这篇文中的创新点就是使用自监督学习来将大量的unlabeled数据通过自监督掩码语言模型任务来构建大量的元学习任务,从而进行元学习,如通过元学习可以学习得到一个更好地模型初始点,可以学习得到很好的模型学习率等等;
- 然后文中通过将通过SMLMT得到的大量的无监督数据tasks和有监督的大量任务结合的方式从而有效的缓解的meta-overfitting;
- 总之就是通过在大量的任务上学到一个会学习的模型,这样可以在few-shot利用少量的sample实现高效的学习质量;而文中就是对于这个大量的多样的任务进行构建,通过在无监督数据上进行执行自监督掩码语言模型任务,最终成功构建多种不同的任务;然后通过将这些在无监督数据上构建的多种不同的任务和有限的有监督数据一起构建一个大的任务包,从而可以缓解meta-overfitting问题;
