我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。
本次笔记补充视频 BV1JE411g7XF 的缺失部分。上节课李老师讲了元学习中的参数初始化方法:MAML 与 Reptile 。本节课内容为 Gradient Descent as LSTM
。在 B 站搜索 meta
与 lstm
即可找到视频。本节内容 30 分钟左右。
注意:本节讨论的是“元学习”,我们将讨论用 LSTM 做优化器的方法。我们所指的训练,是指训练优化器 LSTM 的参数。
本节内容综述- 我们可以把元学习的过程,当然 RNN 来看。首先复习 RNN 。多数时候,我们说 RNN ,其实就是在用 LSTM 。
- 比较 LSTM 中的运算与 meta-learning 中的更新式,会发现有一些相似之处。
- 在实际操作中,我们做了非常大的简化。
- 此外,我们很久以前介绍过一些优化方法,如
RMSProp
、Momentum
,是需要过去的梯度来确定现在的梯度的。因此,可以根据这个为 LSTM 做些改进。
文章目录
小细节引入 RNN
如上,我们的训练过程像 RNN 计算过程。主要源自两篇文章。
Recurrent Neural Network
如上,RNN的输入输出过程。
多数时候,我们说 RNN ,其实就是在用 LSTM 。
LSTM的运算如上。
Similar to gradient descent based algorithm
如上,我们何不把
c
t
c^t
ct 当作
θ
t
\theta^t
θt 来看呢?
此外,为了使两个式子更相像,我们把 LSTM 的 input 从
h
t
+
1
,
x
t
h^{t+1}, x^t
ht+1,xt 变成
−
∇
θ
l
-\nabla_\theta l
−∇θl 。
我们发现,梯度下降其实是 LSTM 的简化版。
此外,我们还看做些调整,如上。这样,机器就会自动地调整 learning rate ,并且进行了些正则。
LSTM for Gradient Descent
如上,我们使用“简化版LSTM”,更新参数。我们的目标 loss 即为最终算出的
l
(
θ
i
)
l(\theta^i)
l(θi) 。
有几个要注意的地方:
- 在一般的 LSTM 里面,每次的 c c c 与 x x x 是无关的;
- 而在我们这里,现在的 θ \theta θ 会影响到 − ∇ θ l -\nabla_\theta l −∇θl 。
Real Implementation
如上,实际操作中, LSTM 只有一个 cell ,并且被用于所有的参数上。
好处是:
- 模型容量小了;
- 符合在参数上应用同样规则的原理;
- 允许 training 与 testing 模型不同。
Experimental Results
如上,我们发现 Forget gate 一般保持在 1 左右;并且,其学习率是动态变化的。
About Previous Gradients
我们在架构中加入“过去的梯度”,让过去的梯度也参与现在梯度的决定,类似优化器 Momentum
。
如上,我们再加一层绿色的 LSTM ,希望 m 存储过去的梯度。但是,李老师对原论文做了些“幻想”,原论文中,只使用了 LSTM 做 m 的存储,上面的蓝色 LSTM 是没有的;而另外一篇论文是有上面,没有下面的 LSTM 。
Experimental Results
如上,LSTM 作为优化器,得到了很惊人的效果。而这个 LSTM 中的参数在 1 * 20 的小神经网络中训练好了;拿到测试任务
中,也训练得起来。
但是如最后一张图,训练时与测试时使用不同的激活函数,会坏掉。