【机器学习杂记】循环神经网络和长短时记忆网络(RNN & LSTM)
零 前言觉得害得补补RNN的知识,虽然好像有人说transformer把RNN替代了。
零 前言
觉得害得补补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由这几部分构成:
- Input gate:控制是否读入input。Input gate有两个输入:一个是cell的input,一个是控制信号
- memory cell,存储memory的值
- Forget gate:决定是否抹掉memory cell的值,有一个输入,是控制信号
- Output gate:决定是否输出,有一个输入,是控制信号,有一个输出,cell的output。
因此,一个cell有四个输入和一个输出。
为了便于理解最终形态的LSTM,先介绍一个cell的基本形态,如下图所示:

\space
解读:
底部的输入是inputz\quad zz,经过一个activation function后,是g(z)g(z)g(z)。注意,activation function通常是范围为0~1的(比如sigmoid),因为用0 1表示close和open是比较合理的。
由于输入要受input gate的控制,input gate的输入记为ziz_izi,同样的道理也需要经过一个activation function,输出为f(zi)f(z_i)f(zi),这时要作用在输入上,因此相乘,得到f(zi)g(z)f(z_i)g(z)f(zi)g(z)。若ziz_izi的值使得f(zi)f(z_i)f(zi)的值接近于0,则当前的输入就不起作用了。以下同理。
如何决定当前memory中的内容是否忘记呢?同样的道理也是由两个gate控制的。假设原来里面存的值为ccc,forget gate的输入经过activation后是f(zf)f(z_f)f(zf),则memory里面存的值应该更新为:
c′=f(zi)g(z)+cf(zf)c'=f(z_i)g(z)+cf(z_f)c′=f(zi)g(z)+cf(zf)
还要决定是否要进行output,则output的值为:
a=f(zo)h(c′)a=f(z_o) h(c')a=f(zo)h(c′)
其实一个cell就跟一个普通网络的neuron一样,只不过一个cell需要四个输入,因此实际上LSTM比普通的网络多了四倍的参数。
\space
实际一般LSTM的形态
实际的LSTM肯定是由多个cell构成的,那么,此时假如输入了一个向量xxx,我们需要将其乘以不同的矩阵,得到新的矩阵,新矩阵的每个element分别控制c每个ell的对应的输入信号。
例如,假设xxx的shape是(m,)(m,)(m,),有nnn个cell,则乘以一个矩阵WWW,其shape是(n,m)(n,m)(n,m),得到输入向量z=Wxz=Wxz=Wx,zzz的shape是(n,)(n,)(n,),其中的每个element分别控制n个cell的输入。其他input、forget、output的控制信号同理。
实际的LSTM中,在t+1t+1t+1时刻,会考虑ttt时刻的memory里面的值ctc^tct(此时的表示是一个向量)和输出hth^tht,因此t+1t+1t+1时刻的输入由xt+1,ct,htx^{t+1},c^t,h^txt+1,ct,ht拼接而成
因此,把这所有的cell当做一个整体来看的话(实际上就是一个layer),LSTM的流程就可以表示如下图:
注意:输入zzz应该也要经过activation function,图中已标出
\space
当然,也不会只有一层。多层的LSTM如下图所示,就是一层的output作为下一层的xxx,和普通的网络是一样的。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)