目录
摘要
本周主要围绕RNN进行探讨,从为什么需要这类”循环网络“入手,提到了”slot filling“技术,接着又对RNN的几个典型类别进行流程绘制及优缺点分析。总的来说,RNN有几种特殊情况——LSTM和GRU。本篇文章主要是对LSTM的基本结构、计算步骤进行了解和总结,最后还手写推导了一个具体的案例。LSTM和一般的network还是有一些区别,为了理解它和RNN的关系,又进行了对比分析。
Abstract
This week's discussion centers around RNNs, starting from why we need this kind of “recurrent networks”, mentioning the “slot filling” technique, and then mapping the flow and analyzing the advantages and disadvantages of several typical classes of RNNs. In general, there are several special cases of RNN - LSTM and GRU. this article mainly focuses on understanding and summarizing the basic structure and computation steps of LSTM, and in the end, it also handwrites and derives a specific case. there are still some differences between LSTM and general networks, and a comparative analysis is carried out in order to understand the relationship between LSTM and RNN. relationship with RNN, and then compared and analyzed.
一、RNN
1、引入
slot filling槽填充:一个关键词汇就是一个槽slot,从输入的句子当中发选出合适的词汇取值放入槽中称为填充filling。
在上图的例子当中,输入是一个句子。slot是”目的地“和”到达时间“,最终经过神经网络,筛选出其对应的词汇。
问题:如果使用前馈神经网络来实现slot filling,那么将会出现词义混淆的问题。
如上图一样,分不清Taipei是”目的地“还是”出发地“。但是可以看出,Taipei的前置动词是不一样的,如果神经网络可以有记忆,记住arrive和leave,就能解决这个问题。
解决:我们将输入的信息再传入下一层神经元的时候,先保存在一个hidden layer中,然后通过”记忆“计算输出。
RNN(Recurrent Neural Network)循环神经网络:是一类以序列数据为输入,在序列的演进方向进行递归且所有节点(循环单元)按链式连接的递归神经网络。
在本案例中,增加slot——”leave“和”arrive“,其中绿色方框是hidden layer、蓝色方框是memory、黄色和橙色方框分别代表输入和输出。当输入为”leave“或是”arrive“时,首先经过多层hidden layer最终输出是进行slot filling;其中hidden layer中的值会转而储存到memory中;当下一个输入在hidden layer中进行计算时,还要考虑到前一个memory中的值;最后计算”Taipei“的slot filling时,是考虑了前面单词的词义,解决了”前馈神经网络“的无记忆的问题。
2、RNN的分类
Elman network&Jordan network
在Elman network中,前一个(输入的)hidden layer所得的值保存下来放到下一个(输入的)hidden layer中去;而在Jordan network中,前一个(输入的)output的值保存下来放到下一个(输入的)hidden layer中去。
由实验所得,Jordan network一般要优于Elman network,是因为hidden layer没有target,而output有target(target的作用就是使预测值有一个对标的真实值),有target则认为是有参照物的,比较好控制。
Bidirectional RNN
前面的方式,RNN都是将一个句子的单词“从头至尾”的单向读取。但是,也可以双向的读取各个单词,如下:
这样的话,当句子中的某个单词做input-output时,该方式不仅仅看过了前半部分的input,而且还看过了其后半部分的input,考虑的信息更多,最终的slot filling效果更好。
二、LSTM
1、基本结构
长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决RNN存在的长期依赖问题而专门设计出来的,所有的RNN都具有一种重复神经网络模块的链式形式。
LSTM的结构图如下所示:
该结构中一共有三个控制信号,分别是input gate(控制memory cell的开关,只有“开”才会将信息保存至memory中 ) 、forget gate(决定memory cell何时重置清零)、output gate(控制memory cell的开关,只有“开”才会将memory中的信息读取出来)
LSTM的详细计算流程如下图:
字母含义介绍:
输入
“输入”控制信号
“重置”控制信号
“输出”控制信号
输出
memory中的值—— memory中更新后的值
、、、、都是输入经过激活函数计算后的值
2、具体步骤
step1 判断“输入门”是否开启
判断式
如果是零(输入门关闭),那么式子也是零;如果非零(输入门开启),那么式子非零(不为零)
step2 判断“记忆门”是否开启
判断式
如果是零(记忆门关闭),那么式子也是零;如果非零(记忆门开启),那么式子非零(c不为零)
step3 叠加记忆或者重置记忆
将step1和step2的两个式子相加得到该input信息在memory中的存储情况。总的来说,memory当中的取值取决于“输入门“控制 和”记忆门“控制二者。
step4 判断”输出门“是否开启
判断式
如果是零(输出门关闭),那么式子也是零;如果非零(输出门开启),那么式子非零(不为零)
3、举例说明
当{、、} 的输入信息不断变化的时候,输出的分析如下图:
4、原理理解
LSTM是RNN的一种特殊形式 ,其中的memory就可以看作是neural。一般的network当中,neural相当于一个处理input的function;LSTM中,memory也相当于一个function,只不过需要有4个对应的input。如下图:
左图中的一个input只会乘以一个权重就放进neural中,右图中可以明显看出,一个input放进hidden layer当中的neural进行计算时,需要分为4个input,所以推测最初input的值应该是一个4维向量。
然而,现实中的 LSTM会更加的复杂,结构如下图:
每一个的计算都需要:该输入的4个input、上一输入的output、以及memory中存储的值。
一般LSTM不止一层,会出现多层叠加的情况,如下:
总结
这周由RNN入手,进而深入学习了LSTM的基本原理和计算流程。接下来,我将学习RNN的另一种特殊形式——GRU,以及RNN所遇到的困难和解决方式。针对上周自注意力机制的学习,我将在后续查漏补缺,更进一步学习底层原理和计算的推导。