赞
踩
零 前言
觉得害得补补RNN的知识,虽然好像有人说transformer把RNN替代了。
如果我们希望神经网络能学习上下文的信息,也就是具有一定的记忆能力,那么RNN是一种选择。另外,LSTM的全称是Long short-term memory,破折号-是加在short和term之间的,所以LSTM仍是一个短时记忆网络,只不过是比较长的短时记忆网络。
一 RNN
RNN的本质就是用之前的hidden layer的输出或者整个network的输出来参与下一次的计算,就是将某个东西存在“memory”里,可以看成是一个网络的时间展开,或是多次复制。
以语音识别为例子,我们知道说arrive Taipei和leave Taipei这两个短语里,Taipei的身份是不同的,一个是目的地,一个是出发地。如果我们想让网络学习这种区别,就要有记忆功能。
\space
RNN可以分为两种,一种是Elman Network,就是将hidden layer的输出作为memory,第二种是Jordan Network,把整个Network的输出作为memory。后者具有更好的performance。
\space
二 LSTM
每个LSTM的cell由这几部分构成:
因此,一个cell有四个输入和一个输出。
为了便于理解最终形态的LSTM,先介绍一个cell的基本形态,如下图所示:
\space
解读:
底部的输入是input z \quad z z,经过一个activation function后,是 g ( z ) g(z) g(z)。注意,activation function通常是范围为0~1的(比如sigmoid),因为用0 1表示close和open是比较合理的。
由于输入要受input gate的控制,input gate的输入记为 z i z_i zi,同样的道理也需要经过一个activation function,输出为 f ( z i ) f(z_i) f(zi),这时要作用在输入上,因此相乘,得到 f ( z i ) g ( z ) f(z_i)g(z) f(zi)g(z)。若 z i z_i zi的值使得 f ( z i ) f(z_i) f(zi)的值接近于0,则当前的输入就不起作用了。以下同理。
如何决定当前memory中的内容是否忘记呢?同样的道理也是由两个gate控制的。假设原来里面存的值为
c
c
c,forget gate的输入经过activation后是
f
(
z
f
)
f(z_f)
f(zf),则memory里面存的值应该更新为:
c
′
=
f
(
z
i
)
g
(
z
)
+
c
f
(
z
f
)
c'=f(z_i)g(z)+cf(z_f)
c′=f(zi)g(z)+cf(zf)
还要决定是否要进行output,则output的值为:
a
=
f
(
z
o
)
h
(
c
′
)
a=f(z_o) h(c')
a=f(zo)h(c′)
其实一个cell就跟一个普通网络的neuron一样,只不过一个cell需要四个输入,因此实际上LSTM比普通的网络多了四倍的参数。
\space
实际一般LSTM的形态
实际的LSTM肯定是由多个cell构成的,那么,此时假如输入了一个向量 x x x,我们需要将其乘以不同的矩阵,得到新的矩阵,新矩阵的每个element分别控制c每个ell的对应的输入信号。
例如,假设 x x x的shape是 ( m , ) (m,) (m,),有 n n n个cell,则乘以一个矩阵 W W W,其shape是 ( n , m ) (n,m) (n,m),得到输入向量 z = W x z=Wx z=Wx, z z z的shape是 ( n , ) (n,) (n,),其中的每个element分别控制n个cell的输入。其他input、forget、output的控制信号同理。
实际的LSTM中,在 t + 1 t+1 t+1时刻,会考虑 t t t时刻的memory里面的值 c t c^t ct(此时的表示是一个向量)和输出 h t h^t ht,因此 t + 1 t+1 t+1时刻的输入由 x t + 1 , c t , h t x^{t+1},c^t,h^t xt+1,ct,ht拼接而成
因此,把这所有的cell当做一个整体来看的话(实际上就是一个layer),LSTM的流程就可以表示如下图:
注意:输入
z
z
z应该也要经过activation function,图中已标出
\space
当然,也不会只有一层。多层的LSTM如下图所示,就是一层的output作为下一层的 x x x,和普通的网络是一样的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。