1.本文作者想要解决什么问题?如何解决?
作者指出传统的深度学习的参数更新和优化方法在小样本学习问题上并不能够很好地work。这主要是因为
1:基于梯度的优化算法:Momentum、Adagrad、Adam并不适用于在梯度更新步长受限的场景,即它们都是为大数据多步迭代而设计的优化算法。小样本更新高维参数模型容易过拟合,所以梯度更新步长受限(另一个需要受限的原因是元学习的主要目标之一是可以快速学习),不能遵循传统深度学习的Rountine在adaption过程多次更新参数。
基于上述问题作者提出了一种自动学习优化过程的模型。
2: 对不同的task,传统的深度学习的都开始于参数的随机初始化,这样不利于几步迭代就将参数更新到一个较好的解。因此可以试图学习一个较好的初始化参数,由这个初始化参数开始进行更新可以可以更快的使参数adaption到各个task。
2.本文提出的模型,如何训练?
首先元学习的学习问题通常分为两个部分:slow learning和fast learning。Slow learning是以task为单位的学习过程,学习到不同task之间shared(slow) knowledge,Fast learning是within task的参数适应过程。通过对某个特定task进行学习使得模型获得针对此任务perform well的fast knowledge。
传统的梯度下降参数优化:
θ
t
=
θ
t
−
1
−
α
▽
θ
t
−
1
L
t
\theta_t=\theta_{t-1}-\alpha\bigtriangledown_{\theta_{t-1}}L_t
θt=θt−1−α▽θt−1Lt。
LSTM:
遗忘门:
f
t
=
σ
(
W
f
[
h
t
−
1
,
x
t
]
+
b
f
)
f_t=\sigma (W_f[h_{t-1},x_t]+b_f)
ft=σ(Wf[ht−1,xt]+bf)
输入门:
i
t
=
σ
(
W
i
[
h
t
−
1
,
x
t
]
+
b
i
)
i_t=\sigma(W_i[h_{t-1},x_t]+b_i)
it=σ(Wi[ht−1,xt]+bi)
c
~
t
=
t
a
n
h
(
W
c
[
h
t
−
1
,
x
t
]
+
b
c
)
\widetilde{c}_t=tanh(W_c[h_{t-1},x_t]+b_c)
c
t=tanh(Wc[ht−1,xt]+bc)
LSTM中更新cell state的过程:
c
t
=
f
t
⊙
c
t
−
1
+
i
t
⊙
c
~
t
c_t=f_{t}\odot c_{t-1}+i_t\odot \widetilde{c}_{t}
ct=ft⊙ct−1+it⊙c
t
本文Meta-learner:
当令:
c
t
=
θ
t
c_t=\theta_t
ct=θt,
f
t
=
[
1...1
]
f_t=[1...1]
ft=[1...1],
c
~
t
=
−
▽
θ
t
−
1
L
t
\widetilde{c}_t=-\bigtriangledown_{\theta_{t-1}}L_t
c
t=−▽θt−1Lt,
i
t
=
α
t
i_t=\alpha_t
it=αt.
时LSTM的cell state的更新过程就和梯度下降参数更新过程一致。本文基于此启发设计了一个基于LSTM的Meta-learner。
candidate state用
−
▽
θ
t
−
1
L
t
-\bigtriangledown_{\theta_{t-1}}L_t
−▽θt−1Lt代替参数化的计算过程。
f
t
=
σ
(
W
f
[
L
t
,
−
▽
θ
t
−
1
L
t
,
θ
t
−
1
,
f
t
−
1
]
)
f_t=\sigma(W_f[L_t,-\bigtriangledown_{\theta_{t-1}}L_t,\theta_{t-1},f_{t-1}])
ft=σ(Wf[Lt,−▽θt−1Lt,θt−1,ft−1])
i
t
=
σ
(
W
i
[
L
t
,
−
▽
θ
t
−
1
L
t
,
θ
t
−
1
,
i
t
−
1
]
)
i_t=\sigma(W_i[L_t,-\bigtriangledown_{\theta_{t-1}}L_t,\theta_{t-1},i_{t-1}])
it=σ(Wi[Lt,−▽θt−1Lt,θt−1,it−1])
c
t
=
f
t
⊙
c
t
−
1
+
i
t
⊙
c
~
t
c_t=f_{t}\odot c_{t-1}+i_t\odot \widetilde{c}_{t}
ct=ft⊙ct−1+it⊙c
t
c
t
=
θ
t
c_t=\theta_t
ct=θt
元学习器基于上述过程在参数
θ
\theta
θ(对应cell state)的更新过程中自适应的调整学习率
α
t
\alpha_t
αt(对应
i
t
i_t
it)。使得参数
θ
\theta
θ以较快的速度更新到较好的值。
注意
f
t
f_t
ft在参数
θ
\theta
θ更新过程不是恒为1的,这样当参数更新到一个local minimum时(
▽
θ
t
−
1
L
t
=
0
,
L
t
\bigtriangledown_{\theta_{t-1}}L_t=0,L_t
▽θt−1Lt=0,Lt很大,此时需要对参数进行相当程度的扰动才能继续更新)
f
t
f_t
ft起到对参数加扰动避免无法继续更新的作用。
3.算法与模型的具体结构以及训练过程。
如图,模型由于两个module组成,分别为Meta-learner和Classifier结合算法流程分析模型的训练过程:
1.训练以task为单位,每一个task分为Support Set和Query Set。先初始化Meta-learner的参数为
Θ
0
\Theta_0
Θ0, 其中
Θ
0
\Theta_0
Θ0中包括分类器的初始化参数
c
0
c_0
c0和元学习器参数。
2.Outer-loop:循环以下几步操作直到元学习器收敛。
3.初始化Classfier的初始化参数
θ
0
\theta_0
θ0为
c
0
c_0
c0, sample出来一个task。
4.inner-loop:循环以下过程T步,T为LSTM模块个数。
从当前task的support set中sample出来a batch of data
(
X
t
,
Y
t
)
(X_t,Y_t)
(Xt,Yt),将数据输入到classifier(当前参数为
θ
t
−
1
\theta_{t-1}
θt−1)得到对应的loss以及对参数求得的梯度,将loss和求得的梯度输入到模块t得到cell state
c
t
c_t
ct,将
c
t
c_t
ct赋值给分类器参数此时分类器参数更新为
θ
t
\theta_{t}
θt。
5.当前task的query set输入到classifier中得到最终loss,使用此loss更新Meta-learner的参数和初始化参数
c
0
c_0
c0,跳转到2.
6.最终得到可以快速适应各个不同task的元学习器。
4.因为classifier是deep neural network所以参数量非常巨大(上万个),将这些参数一起输入到LSTM中进行adaption过程LSTM参数量将是巨大的(explotion)。如何解决这一问题?
本文解决这一问题的方法是采用compact LSTM。具体来说试讲参数进行划分为不同的部分,这些不同的部分共享LSTM的参数,这样虽然一些分类器参数对应的LSTM参数是一样的,但由于在LSTM中的adaption过程不仅与LSTM的参数相关,还和前面阶段更新的状态有关,这样使得每个参数更新保留自己独特的方式。
5.对LSTM遗忘门和输入门的值动态变化的实验结果的分析。
作者使用N-way 1-shot以及N-way 5-shot两种不同情况的tasks训练了Meta-learner并且对元学习器中每个LSTM模块的遗忘门和输入门值进行了可视化。
图中layer1-layer4指classifier的第一层和第四层参数随机取一个可视化对应的
f
t
,
i
t
f_t,i_t
ft,it的值。每一个layer不同的curve表示满足同一任务的不同数据集的训练阶段。
通过可视化结果可以看到forget gate在不同数据集下学习到的模式几乎是相同的(相同的weight decay策略)而input gate在不同数据集上变化是不同的。尤其在one-shot和five-shot上的表现大相径庭。似乎元学习器针对不同的问题(one-shot,five-shot)学习到了不同的分类器的参数更新策略。