Recurrent Neural Network
本文是 李宏毅机器学习视频中循环神经网络部分的一点笔记。
1 Simple Recurrent Neural Network
1.1 Elman Network & Jordan Network
传说,Jordan Network的performance好一些,因为Elman Network存在memory里的隐含层不包含target的信息,不好控制;Jordan Network将output的值存在memory里,而这output的值包含target信息,所以存在network中的信息更清晰。
附一张Elman Network的例子:
1.2 Bidirectional RNN
双向的RNN,可以让RNN把前前后后都看了之后再输出output。例如,在自然语言处理中,双向RNN看到整句话后,再输出句子里的各单词含义。
Simple RNN 可以随时把值存入memory,也可以随时把值从memory中取出来。
2 Long Short-term Memory (LSTM)
2.1 LSTM Memory Cell
LSTM输入、输出、忘记时,需要相应gate打开。
一个LSTM的cell有4个input和1个output。input包含一个希望存入memory的信息,三个控制gate开关的输入。
具体计算流程如下:
上图中c是上一步LSTM cell的值,c’是这一步LSTM cell的值。forget gate关闭(为0)时,会遗忘;若forget gate打开(不为0)时,则前面的LSTM cell会被传下去。
上图例子中,蓝色为外界输入,x1、x2、x3为输入门、遗忘门、输出门,y为对应输出。
可以手动计算以下例子,注意即使output为0,LSTM cell的值也会更新。
2.2 LSTM Network
一般的Neural Network长这样:
把上图中的neurons替换为LSTM Cell,即为LSTM Network:
因为每个LSTM Cell都要4个不同的input才能有一个output,所以当neurons数目一样时,LSTM Network的参数量会是一般Neural Network的4倍。
输入Xt,乘上4个不同的矩阵,进行线性变换,得到4个vectors Z,四个Z的维数与cell数目一致,分别操控各个cell的input。
这里,不是矩阵内积,而是元素对应相乘(element wise)。
真正的LSTM cell并不是只input
x
t
x^{t}
xt,而是会在每一个cell的input中同时考虑
c
t
−
1
、
h
t
−
1
、
x
t
c^{t-1}、h^{t-1}、x^{t}
ct−1、ht−1、xt。
LSTM is quite standard now.
Don’t worry if you cannot understand this. Keras can handle it. Keras supports “LSTM”, “GRU”, “SimpleRNN” layers
2.3 Why LSTM?
用于解决RNN梯度消失的问题。
RNN:
如上图,RNN中的memory与input相乘,替换掉先前的memory,导致
ω
\omega
ω的 gradient vanishing 与 gradient explode,不好设置learning rate。
LSTM 中memory与input相加,所以前期input的影响不会消失,即梯度不会消失,可以把learning rate设得小一些。
同时,要注意forget gate 需要比较大的bias,保证大部分时候gate打开,input能保留下来。
3 Gated Recurrent Unit (GRU)
LSTM有4个input,GRU只有3个input,参数更少,更鲁棒,overfitting情况更少。
具体而言,GRU将input gate与 forget gate联动起来,即input gate打开,forget gate就会关闭,也就是忘记以前的值,才能记下新的值。 简言之,旧的不去,新的不来。
相关链接: