前言
我将看过的增量学习论文建了一个github库,方便各位阅读地址
主要工作
提出一种无需examplar的增量模型——FearNet
motivation
对于人类大脑而言,近期记忆存储在海马复合体中,而长期记忆存储在内侧前额叶皮层,在睡眠阶段,近期记忆会整合转变为长期记忆中,从海马复合体中转移至内测前额叶皮层。
受大脑记忆方式启发,FearNet采用了一种双记忆系统,利用PNN(概率神经网络)存储短期记忆,可理解为存储最近几次增量学习的知识。利用AutoEncoder存储长期记忆,可理解为存储前几次增量学习的知识。在”睡眠阶段“,PNN中存储的知识会”转移“至AutoEncoder中,PNN中存储的所有类别信息被清空。
method
采用一个预训练好的ResNet网络作为特征提取器,将图片映射为Feature Embeded。这么做其实有点打擦边球了,增量应该连着特征提取器一起增量才对,不过本文工作的新意主要体现在旧知识的存储上。
FearNet的结构如下:
mPFC network
AutoEncoder,用于存储长期记忆,Encoder将feature embeded映射为大小为m的向量,接着接一个fc分类器,用于分类。Decoder将Encoder输出的大小为m的向量映射回feature embeded。Encoder用于分类,Decoder用于存储记忆信息。Encoder与Decoder层数相同。
mPFC network训练的loss如下:
L
c
l
a
s
s
L_{class}
Lclass为标准的分类损失函数,例如交叉熵,
L
r
e
c
o
n
L_{recon}
Lrecon定义如下:
L
r
e
c
o
n
=
∑
j
=
0
M
∑
i
=
0
H
j
−
1
λ
j
∣
∣
h
e
n
c
o
d
e
r
,
(
i
,
j
)
−
h
d
e
c
o
d
e
r
,
(
i
,
j
)
∣
∣
2
L_{recon}=\sum_{j=0}^M\sum_{i=0}^{H_j-1}\lambda_j||h_{encoder,(i,j)}-h_{decoder,(i,j)}||^2
Lrecon=j=0∑Mi=0∑Hj−1λj∣∣hencoder,(i,j)−hdecoder,(i,j)∣∣2
M
M
M为Encoder的层数,
H
j
H_j
Hj为第
j
j
j层隐藏层神经元的个数,
h
e
n
c
o
d
e
r
,
(
i
,
j
)
h_{encoder,(i,j)}
hencoder,(i,j)为Encoder第
j
j
j层第
i
i
i个神经元的输出,
h
d
e
c
o
d
e
r
,
(
i
,
j
)
h_{decoder,(i,j)}
hdecoder,(i,j)同理,
λ
j
\lambda_j
λj为超参数,
λ
0
\lambda_0
λ0取值最大,深度越深,
λ
j
\lambda_j
λj取值越小。
HC network
PNN,用于存储短期记忆,PNN存储有最近几次增量学习训练数据的feature embeded,其分类依据如下(其实PNN有点冷启动算法的味道):
x
x
x表示训练数据的feature embeded,
u
k
,
j
u_{k,j}
uk,j表示k类别第j个样本的feature embeded。
BLA
由于HC network与mPFC network均具备分类的功能,假设目前有 M M M类,HC network可以预测 m m m到 M M M类,mPFC network可以预测0到 m − 1 m-1 m−1类,两个网络预测的类别不重合,对于测试数据的feature embeded,由BLA决定采用哪个网络的输出作为最终输出。
BLA的输出取值为0~1之间,表明取mPFC作为最终输出的概率,设
A
(
x
)
A(x)
A(x)表示BLA的输出,x表示测试图片的feature embeded,预测公式如下:
Consolidation
该阶段用于训练mPFC网络,分为首次训练与增量训练,首次训练,利用训练数据训练AutoEncoder,训练完毕后,对每一个类别,利用训练数据分别计算其Encoder输出的均值与方差。
增量训练,依据每个类别的均值与方差,从对应的混合高斯分布采样,将其输入到decoder中得到与旧类别feature embeded类似的pseudo-examples,与HC中存储的feature embeded构成训练集微调mPFC网络,训练完毕后,利用训练数据重新计算其混合高斯分布的均值与方差。此时mPFC可以生成每个类别(包括HC中存储的类别)的feature embeded,因此,清空HC network中的类别信息,相当于短期记忆转换为长期记忆。
Training/Recall
训练阶段只训练BLA,mPFC network与HC network是固定的,从每个类别的混合高斯分布中采样,利用Decoder,将其转变为feature embeded,并标记为1,将HC中的feature embeded标记为0,训练BLA,BLA的损失函数论文没说,可以是交叉熵等分类损失函数,如下图:
整体算法
每隔K个极端,进行一次Consolidation,即睡眠阶段
实验部分并没有太有意思的地方,在此不做过多总结,有兴趣可以浏览原文。