小样本学习&元学习经典论文整理||持续更新
核心思想
本文提出一种采用图神经网络GNN的小样本学习算法,本质上还是一种学习参数更新策略的元学习算法,使得模型参数能够根据在基础数据集上得到的模型和少量的新样本进行更新,在适应新任务的同时,且不会忘记旧任务。整个网络结构分成特征提取网络
F
(
⋅
∣
θ
)
F(\cdot|\theta)
F(⋅∣θ)和分类器网络
C
(
⋅
∣
w
)
C(\cdot|w)
C(⋅∣w)两个部分,特征提取网络根据输入图像
x
x
x输出对应的特征向量
z
=
F
(
x
∣
θ
)
z=F(x|\theta)
z=F(x∣θ),而分类器网络的参数
w
w
w则是由
N
N
N个类别权重向量构成的
w
=
{
w
i
}
i
=
1
N
w=\left \{w_i\right \}^{N}_{i=1}
w={wi}i=1N,每个向量对应一个类别。将特征向量
z
z
z与类别权重向量
w
i
w_i
wi相乘就得到了对应类别的得分
s
i
=
z
T
w
i
s_i=z^Tw_i
si=zTwi。假设在基础数据集
D
t
r
b
s
D^{bs}_{tr}
Dtrbs(包含大量有标签的图片)上训练得到的权重为
w
b
s
=
{
w
i
}
i
=
1
N
b
s
w^{bs}=\left \{w_i\right \}^{N_{bs}}_{i=1}
wbs={wi}i=1Nbs,本文要做的就是设计一个算法
g
(
⋅
∣
ϕ
)
g(\cdot|\phi)
g(⋅∣ϕ),根据权重
w
b
s
w^{bs}
wbs和新样本构成的数据集
D
t
r
n
v
D^{nv}_{tr}
Dtrnv,得到新老样本对应的类别权重向量
w
=
{
w
i
}
i
=
1
N
b
s
+
N
n
v
=
g
(
D
t
r
n
v
,
w
b
s
∣
ϕ
)
w=\left \{w_i\right \}^{N_{bs}+N_{nv}}_{i=1}=g(D^{nv}_{tr},w^{bs}|\phi)
w={wi}i=1Nbs+Nnv=g(Dtrnv,wbs∣ϕ)。
思路已经明确了,那么怎么去实现算法
g
(
⋅
∣
ϕ
)
g(\cdot|\phi)
g(⋅∣ϕ)呢?作者提出一种叫做去噪自动编码器(Denoising Autoencoders,DAE)的结构,其原理如下式所示
其中
w
w
w表示输入,
p
(
w
)
p(w)
p(w)表示输入的概率密度函数;
r
(
w
)
r(w)
r(w)表示去噪自动编码器,其具体的过程是:首先给输入
w
w
w增加一定的高斯噪声,然后对带有噪声的权重进行去噪重构;
σ
2
\sigma^2
σ2表示高斯噪声的规模(应该就是方差)。则根据上式,概率密度函数对数对于输入的偏导数近似等于
1
σ
2
⋅
(
r
(
w
)
−
w
)
\frac{1}{\sigma^2}\cdot(r(w)-w)
σ21⋅(r(w)−w),
(
r
(
w
)
−
w
)
(r(w)-w)
(r(w)−w)的方向指向更有可能的
w
w
w分布。利用这一结论应用于本文的任务中,将权重参数向量
w
w
w作为输入,可得
则权重参数向量的更新策略可写为
那么下面的问题就是,初始的权重
w
w
w怎么获得?去噪自动编码器怎么实现?
第一个问题,对于基础数据集中各个类别样本对应的初始权重,可以直接使用在基础数据集上预训练的结果
w
b
s
w^{bs}
wbs,而对于新任务数据集上的初始权重,可以使用各个类别样本对应的特征向量的平均值代替,如下式
式中
x
k
,
i
x_{k,i}
xk,i表示第
i
i
i个类别中的第
k
k
k个样本。
第二个问题,作者提出一种基于图神经网络GNN的结构,如下图所示,首先对基础类别的初始权重和新类别的初始权重增加高斯噪声,然后进入一个由三层GNN构成的去噪自动编码器结构,得到重构后的权重。
回顾整个过程,首先利用基础数据集上的样本对特征提取网络和分类器网络进行预训练得到基础类别的初始权重向量
w
b
s
w^bs
wbs;然后对于新样本数据集上的样本,经过特征提取网络得到特征向量,并计算对应类别特征向量的平均值作为初始权重向量
w
n
v
w^{nv}
wnv;二者级联起来输入到DAE结构中得到重构的权重向量
r
(
w
)
r(w)
r(w),沿着
r
(
w
)
−
w
r(w)-w
r(w)−w的方向对初始权重向量
w
w
w进行更新,得到最优的类别权重向量
w
^
\hat{w}
w^,利用
w
^
\hat{w}
w^就能实现基础样本和新样本的分类任务了。
实现过程
网络结构
图神经网络的每个隐藏层的结构如上图,定义每个初始权重向量对应图中的一个节点;然后根据余弦距离,计算得到与节点
i
i
i最近的
J
J
J个节点,作为节点
i
i
i的邻居
N
(
i
)
N(i)
N(i);然后利用聚合函数(Aggregation Function)得到节点
i
i
i的聚合信息
h
N
(
i
)
(
l
)
h_{N(i)}^{(l)}
hN(i)(l);最后将节点
i
i
i所表示的特征信息
h
i
(
l
)
h_i^{(l)}
hi(l)与聚合信息
h
N
(
i
)
(
l
)
h_{N(i)}^{(l)}
hN(i)(l)级联起来,通过更新函数(Update Function)得到下一层节点
i
i
i的特征信息
h
i
(
l
+
1
)
h_i^{(l+1)}
hi(l+1)。
其中聚合函数是根据RelationNet改进的,首先两个节点的特征信息分别经过两个全连接层,然后对输出的结果求和,并经过由BN层+LeakyReLU和dropout构成的激活函数层得到输出
q
(
l
)
(
h
i
(
l
)
,
h
j
(
l
)
)
,
最
后
将
输
出
乘
以
对
应
节
点
之
间
的
权
重
值
q^{(l)}(h_i^{(l)},h_j^{(l)}),最后将输出乘以对应节点之间的权重值
q(l)(hi(l),hj(l)),最后将输出乘以对应节点之间的权重值a_{ij}$并求和,数学表达如下
更新函数是将节点
i
i
i所表示的特征信息
h
i
(
l
)
h_i^{(l)}
hi(l)与聚合信息
h
N
(
i
)
(
l
)
h_{N(i)}^{(l)}
hN(i)(l)级联起来,经过一个全连接层+BN层+Dropout层+LeakyReLU层+L2正则化层得到输出,再与
i
i
i所表示的特征信息
h
i
(
l
)
h_i^{(l)}
hi(l)级联起来得到得到下一层节点
i
i
i的特征信息
h
i
(
l
+
1
)
h_i^{(l+1)}
hi(l+1)
对于最后一层图神经网络,其更新函数略有不同。给定一个输入向量,会得到两个维度相同的输出向量
δ
w
i
\delta w_i
δwi和
o
i
o_i
oi,全连接层
u
(
L
−
1
)
u^{(L-1)}
u(L−1)+L2正则化层输出
δ
w
i
\delta w_i
δwi,全连接层
u
(
L
−
1
)
u^{(L-1)}
u(L−1)+Sigmoid层输出
o
i
o_i
oi,最后将
δ
w
i
\delta w_i
δwi和
o
i
o_i
oi相乘,在于初始权重向量
w
i
w_i
wi相加得到最终的输出
w
^
i
\hat{w}_i
w^i
根据我个人的理解这里的输出
w
^
i
\hat{w}_i
w^i应该就是上文提到的最优的类别权重向量
w
^
\hat{w}
w^,作者将权重的更新过程暗含在了最后一层GNN网络之中了。
损失函数
损失函数包含两个部分重构损失和分类损失,计算过程如下
其中
N
N
N表示基础数据集中的图片数目,
M
M
M表示验证集中的图片数目,
w
i
∗
w^*_i
wi∗表示基础数据集经过识别网络学习得到的权重参数,
w
^
i
\hat{w}_i
w^i表示网络优化输出的最终类别权重参数,
l
o
s
s
loss
loss表示交叉熵损失函数。
创新点
- 提出一种基于DAE的元学习算法,用于快速学习新样本对应的分类权重向量,实现小样本学习任务
- 利用图神经网络实现DAE结构,充分利用了节点之间的联系,实现分类权重向量的重构和更新
算法评价
本文利用分类权重向量实现分类任务,每个向量对应一个类别,而算法的目的就是能够根据基础类别的权重向量和少量的新样本,快速更新得到新样本对应的类别权重向量,这样既能识别新样本,又能保留对于基础类别的分类能力(之前的权重向量都保留着)。而为了能够快速更新权重参数,作者引入了DAE结构,对于初始权重向量增加高斯噪声,在对向量进行恢复和重构,通过重构向量和初始向量之间的差异,指引权重更新的方向。而为了实现DAE结构,作者采用了图神经网络GNN,因为其可以更好的利用各个节点之间的关系。整个算法思路清晰,结构完整,而且环环相扣,其引入的DAE结构也是新的思路和方法,值得借鉴学习。
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。