Meta Learning-Gradient Descent as LSTM
观察我们之前学到MAML流程,发现这是一个类似RNN的过程。我们可以把参数看成RNN的Memory,而每次都会把一个训练数据放进NN中。
复习RNN
简短地复习一下RNN。RNN的优势就在于无论input再怎么长,参数量都不会增加。因此很适合处理input是一个sequence的情况。
但我们一般用到的是RNN的变形LSTM。一般说RNN就是指LSTM。
RNN和Gradient Descent
我们将RNN和Gradient Descent的式子写下来比较,发现
θ
θ
θ和
c
t
c^t
ct的式子很像。那我们不如把
c
t
c^t
ct当做
θ
θ
θ来看。 然后令
z
f
,
z
i
,
h
t
?
1
,
x
t
z^f,z^i,h^{t-1},x^t
zf,zi,ht?1,xt分别替换即可。 因此Gradient Descent其实就是RNN的简化版本。
刚才我们是强制让
z
f
,
z
i
z^f,z^i
zf,zi变成想要的值,那我们能不能让机器自己学出来呢? 答案是可以的。 有几个要注意的地方:
- 在一般的 LSTM 里面,每次的
c
c
c与
x
x
x是无关的;
- 而在我们这里,现在的
θ
\theta
θ会影响到
?
?
θ
l
-\nabla_\theta l
??θ?l。
实际操作
实际操作中,由于参数太多跑不起来,因此要做一个简化LSTM只有一个cell,所有的参数公用一个LSTM。 只有刚才的架构还不够。因为现在我们用Gradient Descent的时候,往往还要考虑过去对现在的影响,比如:RMSProp,Momentum。 因此我们再加一层LSTM ,让这一层LSTM做Momentum工作,再把output加到原来的LSTM中。 但这还只是一个构想,原论文中,上面一层并非LSTM,而是普通的Gradient Descent。因此这个方法的正确性有待考证。 根据实验结果,发现这种用LSTM的效果非常好。但只有一个例外:训练和测试的激活函数不一样时,结果会很差。
|