基于DAE的GNN小样本分类方法学习笔记

文献Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning(文章链接:https://arxiv.org/abs/1905.01102)中提出了一种解决小样本的迁移学习方法。它通过某些类似的大量的样本的特征提取训练出一组用于分类的meta-model(元模型),元模型最终能分辨的所有类别统称为base class(基类),我称之为一次训练,这次训练是有大样本的,之后再输入novel class(新类)跟相应的小样本,通过Graph Neural Network based Denoising Autoencoders (基于降噪自编码器DAE的图神经网络GNN)进行训练,最终得到一个对基类跟新类都适用的分类模型,这部分我称为二次训练,它的训练集只有小样本的权值向量跟一次训练的输出。

本文的二次训练模型包含一个feature extractor network(特征提取网)跟 feature classififier(特征分类器),对类的区分是通过classification weight vectors(分类权值向量)实现的,它是一个d维向量,用\vec{w}表示,对于给定的图像\vec{x},特征提取网络会输出一个d维特征向量\vec{z}=F(\vec{x}|\theta ),特征分类器会输出一个分类得分:[s_{1},s_{2},...,s_{N}]=[\vec{z}^{T}\vec{w}_{1},\vec{z}^{T}\vec{w}_{2},...,\vec{z}^{T}\vec{w}_{N}]

具体的步骤如下:在一次训练时通过训练集D_{tr}^{bs}训练出一个能够分辨出N^{bs}个类的模型(或者网络),各个类的权值向量为\vec{w}^{bs}=\left \{ \vec{w_{i}^{bs}} \right \}_{i=1}^{N^{bs}},而最终生成的二次训练模型则必须满足:输入训练好的各个基类的权值向量\vec{w}^{bs}跟新类的样本D_{tr}^{nv}= \bigcup _{i=N_{bs}+1}^{N_{bs}+N_{nv}}}\left \{ \vec{x}_{k,i} \right \}_{k=1}^{K}\vec{x}_{k,i}表示第i类的第k个样本)所计算的粗权值向量,模型最终能输出所有样本的N个分类的权值向量\vec{w}=\left \{ \vec{w}_{i} \right \}_{i=1}^{N=N_{bs}+N_{nv}}

基于DAE的GNN小样本分类方法学习笔记_第1张图片

本文的二次训练通过基于DAE的GNN来修正新类的权值,如上图所示,初始的分类权重在加入高斯噪声(避免过拟合)以后用于GNN的训练,训练结果是修正后的权值。DAE理论指出,对于被高斯噪声干扰的输入,DAE能够估算其输入w的密度的能量函数p(w)的梯度:\frac{\partial logp(\textbf{w})}{\partial \textbf{w}}\approx \frac{1}{\sigma ^{2}}(r(\textbf{w})-\textbf{w}),σ为高斯噪声总量,r为可训练的自编码器函数,其训练集越大或噪声越低,结果越精确,r(\textbf{w})-\textbf{w}所指的方向就是更新权值w时候的修正方向。在本文中,我们关心的是在训练集D_{tr}=D_{tr}^{nv},D_{tr}^{bs}训练下对权值w的修正方向,这里的能量函数是w在训练集下的条件分布概率密度,输入是\frac{\partial logp(\textbf{w}|D_{tr})}{\partial \textbf{w}}\approx \frac{1}{\sigma ^{2}}(r(\textbf{w})-\textbf{w}),所以我们更新权值的方向就应该为:\textbf{w}\leftarrow \textbf{w}+\varepsilon \left ( r\left ( \textbf{w} \right ) -\textbf{w}\right ),这说明我们需要初始权值,基类的初始权值是一次训练的输出,小样本部分的权重向量初值设置为样本特征向量的平均值。

这篇文章在二次训练的时候用了一种新颖的输入方法,他在训练前选择元模型的基类的一部分作为“伪新类”\tilde{N}_{nv},剩下的才作为基类\tilde{N}_{bs},也就是说在训练中把它视为新类而实际上它本是基类(可以看出“伪新类”一次训练时是有很大量的样本的),然后在将“伪新类”输入网络时只采样“伪新类”的部分样本特征值平均值作为二次训练集而不是像一般的基类一样输入一次训练的输出权值;除此之外,他还从“伪新类”跟剩下的基类中各抽取一部分样本组成验证集D_{val}=\left \{ \left ( \textbf{x}_{m},y_{m} \right ) \right \}_{m=1}^{M},y为类的标签。在一切准备就绪以后,作者将所有二次训练所需的高斯噪声扰动后的输入权值向量\tilde{\textbf{w}}=\left \{ \tilde{\textbf{w}}_{i}+\varepsilon \right \}_{i=1}^{\tilde{N}=\tilde{N}_{bs}+\tilde{N}_{nv}}\varepsilon \sim N(0,1))作为DAE的输入得到修正后的权值\hat{\textbf{w}}=\left \{ \textbf{w}_{i} \right \}_{i=1}^{\tilde{N}},由于基类跟“伪新类”本身就有自己的权值向量\textbf{w}^{*}=\left \{ \textbf{w}_{i}^{*} \right \}_{i=1}^{\tilde{N}},所以定义分类损失函数\frac{1}{N}\sum_{i=1}^{N}\left \| \hat{\textbf{w}}_{i}-\textbf{w}_{i}^{*} \right \|+\frac{1}{M}\sum_{m=1}^{M}loss\left ( \textbf{x}_{m},y_{m}|\hat{\textbf{w}} \right ),其中:loss\left ( \textbf{x}_{m},y_{m}|\hat{\textbf{w}} \right )=-\textbf{z}_{m}^{T}\hat{\textbf{w}}_{y_{m}}+log\sum_{i=1}^{\tilde{N}}e^{\textbf{z}_{m}^{T}\hat{\textbf{w}}_{i}},表示第m个验证集的交叉熵损失,z是第m个验证集样本的特征向量。

基于DAE的GNN小样本分类方法学习笔记_第2张图片

本文采用GNN的网络结构实现DAE对权值向量的修正,GNN是图网络,图G=(V,E)每个点i的值的更新都涉及到与之相连的结点N(i)=\left \{ j,\forall (i,j)\in E \right \}的值,所以GNN都包含聚合函数(aggregation function)跟更新函数(update function)。将本文需要分的所有类(基类、新类)作为图G=(V,E)的结点;根据未加入高斯噪声的各类初始权值向量的余弦相似性将最近的J类连接起来;而图的两个节点i和j之间的线aij的边缘强度(线的权值)就是两点的余弦相似性的softmax函数值,定义\textbf{h}^{(l)}=\left \{ \textbf{h}_{i}^{(l)} \right \}_{i=1}^{N}为第l层的所有权值向量,不难看出\textbf{h}^{(0)}=\textbf{w},最终网络执行过程为\textbf{h}_{N(i)}^{(l)}=AGGREGATE(\left \{ \textbf{h}_{j}^{(l)},\forall j\in N(i) \right \})\textbf{h}_{i}^{l+1}=UPDATE(\textbf{h}_{i}^{(l)},\textbf{h}_{N(i)}^{(l)}),其中聚合函数为\textbf{h}_{N(i)}^{(l)}=\sum_{j\in N(i)}a_{ij}\cdot q^{(l)}\left ( \textbf{h}_{i}^{(l)},\textbf{h}_{j}^{(l)} \right ),q是线性相加以后激活的函数,更新函数为\textbf{h}_{i}^{(l+1)}=[\textbf{h}_{i}^{(l)};u^{(l)}(\textbf{h}_{i}^{(l)};\textbf{h}_{N(i)}^{(l)})],[a;b]是向量的级联,u(l)是对输入向量进行BatchNorm + Dropout + LeakyReLU+L2normalization的函数,最后一层的更新函数是\delta _{\textbf{w}_{i}},\textbf{o}_{i}=u^{(L-1)}([\textbf{h}_{i}^{(L-1)};\textbf{h}_{N(i)}^{(L-1)}])。最终由GNN输出计算出结果\hat{\textbf{w}_{i}}=\textbf{w}_{i}+\textbf{o}_{i}\odot \delta _{\textbf{w}_{i}}

基于DAE的GNN小样本分类方法学习笔记_第3张图片

 

你可能感兴趣的:(计算机视觉)