来源于李宏毅老师机器学习课程,笔记是其中meta learning部分,few-shot learning学习也可以观看此部分课程。
课程主页:http://t.cn/Exykrk9 video: http://t.cn/ExykrkC
bilibili:https://www.bilibili.com/video/BV1Gb411n7dE?p=32
上一次讲到通过学习初始化参数的meta learning方法,那么是否有更多的方法呢?
每一次的update的,会很像RNN的time step,每一步训练都会更新参数,那么RNN是否可以用于meta learning呢?
那么RNN和lstm的原理是什么样的呢,这里先做了一些介绍,其实看图就让人回忆起来了。
详细原理可以参考:RNN及其变种LSTM/GRU/SRU
LSTM由于加入了cell单元,相对于RNN会有更长期的记忆。具体原理下面会进行回顾
首先是输入向量z, 以及三个门(输入门、遗忘门、输出门)计算公式。
然后图中是lstm的输出:
的计算公式。
然后每一次都反复每个time step的步骤,就是LSTM的计算过程。 那么和meta learning会有什么关系呢?
梯度下降过程中,每个time step会通过梯度来更新参数
,和LSTM中c很相似,那么LSTM中c是否也可以用
来代替呢? 如图,将遗忘门
置为全1的矩阵,将输入门
所有元素置为meta learn的学习率。
实际过程中,当前time step的输入还可以引入更多东西(图中other),可以是当前参数
的loss等。 同时,
是固定的,能否通过学习得到呢?即:
:自动学习给出适合当前的学习率。
自动学习出做多少weight decay。
是将之前的参数缩小,和weight decay一样的作用。
图上面是一般的lstm结构,下面是gradient descent中的lstm,对于初始参数
,训练集中mini batch输入可以获得其梯度,然后更新参数的过程为:
同时每次的batch不一样,并且参数不一样,对应的梯度
也是不一样的(这里符号上没有做区别)。 图中就是一个训练数据集的三次参数update的过程,然后这个是“lstm”网络的前馈过程,然后使用训练数据,计算获得损失
,然后使用梯度更新“lstm”参数来使得损失最小。(这里有点套娃)
由于参数
的数量巨大,不能直接输入“lstm”,所有会将所有维度的参数都复用一个“lstm”的cell。