原文链接:https://arxiv.org/abs/2007.06240
摘要
在一些深度神经网络的优化工作中发现,训练数据的顺序对于分类器的性能有一定影响,合理地安排顺序使分类器更快、更准。受此启发,作者将此思想融入meta-learning中,按照由易到难地顺序进行训练。如何度量task的难易程度呢?作者提出了一个Task Hardness Aware Module来实现。
主要贡献
作者提出一种“专家”训练策略,将meta-training分成两个阶段,第一阶段训练简单的tasks,第二阶段训练困难tasks,这种策略实现简单并且可在绝大多数meta-learning上实现;
作者设计了Task Hardness Aware Module(THAM),并分为两种:Se-THAM和Co-THAM用来度量tasks的难易程度。
简介
在传统的FSL中,每个episode的support set和query set中的samples是随机生成的。
然而,不同的episodes之间分类难度可能差别很大,如下图所示:
简单的tasks产生很小的loss而复杂tasks的loss会很大,如果meta-learner一视同仁地处理这些tasks显然是不合理的。我们知道人类在学习新事物时往往是按照从易到难的顺序,这启发了作者将此概念引入到meta-learning中。
作者设计了一种训练策略来提高meta-learner的性能,同时将Task Hardness Aware Module(THAM)加入到训练过程中,来评估每个task的难易程度,并据此将整个训练过程分成两个阶段:primary learning phase和advanced training phase。
在第一阶段,用简单的tasks来训练meta-learner使之获得基础的分类能力;在第二阶段,用困难的tasks来强化meta-learner使之成为分类任务的“专家”。这种“专家”训练策略其实也和人类学习新事物的过程不谋而合。
在这个“专家”训练策略中,THAM扮演着最重要的角色。一个task的难易程度即它的类别间的可区分度,这个可以用语义关系或者计算度量来表示。根据这两种表示方式,作者提出两种THAM的实现:Se-THAM(基于语义),Co-THAM(基于计算)。
Se-THAM直接根据WordNet中的标签树来生成简单task和复杂task。
如下图所示,父节点相同的子类节点之间比较容易区分,是简单task,而父节点不同的节点之间较难区分,是困难task。
Co-THAM方法通过给不同任务量化打分(hardness score)来决定难易程度。Co-THAM中的training tasks依然是随机取样的,每个类包含多个样本,不同类之间的关系是一种集合间的关系,如图所示:
我们可以通过三种距离来度量这种关系:pairwise Euclidean distance, Hausdorff distance以及Hilbert Schmidt independence criterion.
Hardness score基于从learner中提取的features,因此使得Co-THAM可以实现端到端训练。
具体实现
Se-THAM
训练过程和传统meta-training相似,但是每个episode中的样本不再是随机取样,而是根据语义树来确定每个tasks的难易程度。
在auxiliary dataset中,一共有M个类,表示为
{
C
i
}
i
=
1
M
\{C_i\}_{i=1}^M
{Ci}i=1M,这M个类根据语义隶属关系分成L个子类,如下图所示:
我们使用一个标签字典来存储这些关系Label_Dic=
{
H
C
i
{
C
j
}
j
=
1
M
i
}
i
=
1
L
\{HC_i\{C_j\}_{j=1}^{M_i}\}_{i=1}^L
{HCi{Cj}j=1Mi}i=1L,Mi是父类
H
C
i
HC_i
HCi下的类别数量,并且M=
∑
i
=
1
L
M
i
\sum_{i=1}^{L}Mi
∑i=1LMi。
核心算法
总览
详细分析
输入:标签字典与数据字典,N-way,K-shot,Query
输出:根据难易程度分类后的tasks
构造Easy Task:
相同父类下的类别容易分类,属于简单tasks,而不同父类下的类别难以分类,是困难tasks。
对于N-way-K-shot,构建简单tasks:随机选择N个父类,然后从每个父类中选一个子类;
构建Hard Task:
先随机选取一个父类,然后从每个父类中选取N个子类;
如果这个父类的子类数小于N,那么再逐个加入其他父类的子类,直到子类个数大于等于N;
从新类中随机选择N个类构建Task;
注意,这里虽然加入了其他父类的数据,但是总体依然是hard task,如前文所述,只要存在来自相似类中的样本,这个task就会难以区分。
选择样本:
从上一步得到的类中随机选择K个样本作为support set,再从剩下的N-k个样本中随机选择Q个样本作为query set。
Co-THAM
主要由四个模块组成:
随机采样模块:产生epidoses喂给meta-training
Learner:通常是一个CNN,用来分类一个特定task
Meta-learner:初始化权重并且不断为Learner更新指令
Co-THAM:关键模块,基于从fine-tuned learner得到的特征给每个任务难易程度打分。
训练过程
1、 随机生成episode,support data
共N个categories,Ci表示第i个categories,K代表共K个shot,小k表示第k个
2、用support data来fine-tune learner,更新meta-learner的初始化weight
3、将query data 喂给fine-tuned CNN learner生成两种输出:
1)query集样本的loss
2)从CNN learner的最后一个全连接层提取出的特征
G
e
G_e
Ge
4、 Co-THAM利用2)中得到的G_e来计算TH_e,然后将得分喂给meta-learner
5、 在一个minibatch中,meta-learner得到若干query集上的loss以及这些task对应的
T
H
e
TH_e
THe,meta-learner根据
T
H
e
TH_e
THe以及训练阶段为这些任务加权,然后更新参数。
Primary learning phase: 简单的任务权重更高
Advanced learning phase: 复杂任务权重更高
Task Hardness Score ( T H e TH_e THe)的计算
任务的难易程度主要取决于那些相似度较高的类别,如何量化
T
H
e
TH_e
THe?
Dist(·)是两个类之间的距离,距离越小, T H e TH_e THe越高,task越复杂。有三种度量距离的方式:pairwise Euclidean distance、Hausdorff distance和Hilbert-Schmidgt independence criterion(HSIC)。
Pairwise Euclidean Distance
计算两个目标类的所有样本之间的欧式距离。
Hausdorff distance
遍历计算A类中样本到最近的B类中样本的距离为d,然后取d的最大值
其中d()可以是任意距离度量方式,简单起见我们使用欧氏距离。
Hilbert-Schmidgt independence criterion(HSIC)
为类 C i C_i Ci和 C j C_j Cj定义两个特征矩阵 G C i = [ g 1 C i , g 2 C i , . . . , g Q C i ] G_{C_i}=[g_1^{C_i},g_2^{C_i},...,g_Q^{C_i}] GCi=[g1Ci,g2Ci,...,gQCi]和 G C j = [ g 1 C j , g 2 C j , . . . , g Q C j ] G_{C_j}=[g_1^{C_j},g_2^{C_j},...,g_Q^{C_j}] GCj=[g1Cj,g2Cj,...,gQCj],两个类之间的HSIC值按照下式计算:
其中
公式里的
1
Q
∈
1_Q\in
1Q∈
R
Q
R^Q
RQ,是值为1的列向量。
基于HSIC的
T
H
e
TH_e
THe为:
核心算法
总览
详细分析
输入:数据集,超参数α、β,N-way,K-shot,Query
输出:θ(meta-learner的参数),task的样本
对于T个训练任务,我们采用minibatch的方式,batchsize=B,因此iteration=T/B;
其中
x
K
C
i
j
x_K^{C_i^j}
xKCij表示第j个任务中的第i个类中的第k个support样本,L_j代表第j个任务的loss,作者用的是交叉熵损失:
然后通过梯度下降来更新参数θ,并根据前文所述用CNN learner提取query data的特征
计算当前任务的
T
H
e
TH_e
THe,用这两个公式:
然后再计算meta-loss,同样使用交叉熵损失。
最后调整当前minibatch的权重,然后更新θ。
在每个batch中,
T
H
e
TH_e
THe用来根据training loss来调整权重,这一过程如下公式所述:
实验
数据集:
作者在miniImageNet和tieredImageNetSketch上进行了实验。
miniImageNet由60,000张图片组成,共100个类,其中64个类用来训练,16个类用来验证,20个类用来测试。因为miniImageNet是ImageNet的子集,我们可以直接用后者的语义标签结构提取出标签树。
tieredImageNetSketch共有608个类,34个父类,其中20个用来训练,6个用来验证还有8个用来测试,确保训练集和测试集有显著区别。
在meta-training阶段,训练集的样本组成auxiliary dataset,从中产生T个训练任务。在测试阶段,V个novel类任务从测试集中随机取样,每个任务有N×Q个样本用来计算分类准确率,并用均值和标准差来改进性能。
作者用λ区分两个训练阶段,λ×T个任务属于primary learning阶段,而剩余的任务属于advanced training阶段。
作者在Meta-SGD上使用了“专家”训练策略,结果如下:
参数设置:1-shot λ=1/4,5-shotλ=1/3
综上所述,用“专家“训练策略训练的meta-learner在novel tasks中有更好的表现;
Co-THAM比Se-THAM拥有更好的表现,因为前者实现端到端的训练过程,可随着meta-learner不断优化。