1.前言
上一篇介绍了循环神经网络 RNN,但是RNN无法处理长距离依赖问题,通俗点就是不能处理一些较长的序列数据,那么今天就来介绍一下两个能处理长距离依赖问题地RNN变种结构,LSTM和GRU。依旧如标题一样,我尽量以我自己的理解,用最通俗的语言来说明,在看这篇博客之前呢希望你已经了解了RNN的原理,不太清楚RNN原理的同学可以参考我上一篇博客:史上最小白值RNN详解
2.LSTM (Long short-term memory)
2.1LSTM结构

上左图是普通RNN结构图,上右图是LSTM结构图。
从图中我们可以看出,普通的RNN在隐藏层中只传递一个状态值h,而LSTM不仅传递h,还新增了一个状态值C,每一层隐藏层中的每一个神经元都接收上一时刻传递的h{t-1}和c{t-1},经过计算得到h{t}和c{t}再传入下一时刻。
那么接下来咱们就来看看状态c和h究竟在LSTM的隐藏层中做了哪些计算又是怎么传递地。

上图是LSTM的某一隐藏层的局部结构,三个矩形为{t-1},{t},{t+1}三个时刻的神经元,中间显示的是t时刻神经元的内部结构图。说实话只是单单看图的话,反正我当时是一脸懵逼,这都是些啥?不过不要慌,接下来咱们一步一步慢慢说明。
首先LSTM是由三个门来控制信息传递状态地,分别是红色方框对应的”忘记门“,绿色方框对应的”输入门“,和紫色方框对应的”输出门“。这三个门中一共包含3个sigmoid函数和2个tanh函数。使用sigmoid函数的原因是sigmoid函数能够将输入映射到[0,1]空间中,那么咱们就可以根据映射之后的概率对于上一时刻传递的信息进行有选择的去除,保留和输出。比如sigmoid函数的值为1也就是门的全开状态,则代表所有的信息都被保留,如果sigmoid函数为0也就是门的全闭状态,则代表所有的信息都不被保留。使用tanh函数是为了对数据进行处理,映射到[-1,1]的空间,当然也可以使用其他的激活函数,比如ReLU,至于效果谁好谁坏,我没有深究过,有研究表明在LSTM层数比较少的时候使用tanh比ReLU效果好。知道了这些之后,接下来咱们就来将这三个门一步一步拆解来讲讲具体这三个门中怎么计算。
忘记门:

上图就是”忘记门“的结构,以及计算公式。说白了就是把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接,然后通过权值矩阵Wf转换后,加上偏置bf,再由sigmoid函数映射到[0,1]空间中。就形成了这个”忘记门“。
然后通过”忘记门“ft对于上一时刻传入的C{t-1}进行有选择的忘记,将C{t-1}与ft进行点乘,得到去除一些信息后的”忘记门的输出“
C t − 1 ⊗ f t 忘 记 门 的 输 出 值 C_{t-1} \otimes f_t 忘记门的输出值 Ct−1⊗ft忘记门的输出值
输入门:

上图是”输入门“的结构,与”忘记门“类似,首先把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接,然后通过权值矩阵Wi转换后,加上偏置bi,再由sigmoid函数映射到[0,1]空间中形成了这个”输出门“。然后得到输入数据,输入数据是把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接,然后通过权值矩阵WC转换后,加上偏置bC,再有激活函数tanh映射到[-1,1]空间,得到输入数据Ct’。然后将"输入门"it与Ct’进行点乘,就能得到"输入门"的输出了。
i t ⊗ C t ~ 输 入 门 的 输 出 值 i_t \otimes \tilde{C_t} 输入门的输出值 it⊗Ct~输入门的输出值
得到Ct:
然后将”忘记门“的输出值与”输入门“的输出值加起来,就得到了t时刻的Ct值。
C t = C t − 1 ⊗ f t + i t ⊗ C t ~ C_t = C_{t-1} \otimes f_t +i_t \otimes \tilde{C_t} Ct=Ct−1⊗ft+it⊗Ct~
Ct中保留了t-1传入的部分信息和t时刻传入的经过筛选后的信息。得到了Ct,那咱们就只剩下计算t时刻的ht了,计算ht由”输出门“来完成。
输出门:

可以看到上图中的”输出门“的结构和计算公式,把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接,然后通过权值矩阵Wo转换后,加上偏置bo,再由sigmoid函数映射到[0,1]空间中形成了这个”输出门“。
然后将上一步计算得到的Ct经过tanh函数缩放,映射到[-1,1]空间中,再与”输出门“点乘,就能得到输出门的输出值ht了。
h t = O t ⊗ t a n h ( C t ) h_t = O_t \otimes tanh(C_t) ht=Ot⊗tanh(Ct)
这样咱们就计算出来t时刻的所有输出值,ht和Ct,然后ht和Ct又可以传入到下一时刻来进行循环操作了。
计算t时刻的输出yt:

1699

被折叠的 条评论
为什么被折叠?



