目录
摘要
本周阅读了一篇名为RECURRENT NEURAL NETWORK REGULARIZATION的文献,它主要介绍的是如何正确地将dropout应用于LSTM,这种方法能够很好地减少过拟合问题。其次,学习了关于RNN的知识,RNN对时序预测于机器翻译这些方面的效果很好,但是它容易遗忘较早的信息,而LSTM能够更好地解决这一点,所以说能应用RNN的地方,基本上都可以用LSTM来代替。
ABSTRACT
This week I read a paper titled "Recurrent Neural Network Regularization", which mainly introduces how to correctly apply dropout to LSTM. This method can greatly reduce overfitting. In addition, I learned about RNN. RNN works well on time series prediction and machine translation, but it tends to forget earlier information. LSTM can better solve this problem. Therefore, LSTM can mostly replace RNN in areas where RNN is applicable.
一、文献阅读
1、题目
题目:RECURRENT NEURAL NETWORK REGULARIZATION
链接:https://arxiv.org/pdf/1409.2329.pdf
期刊:ICLR 2015
2、ABSTRACT
The author applied regularization techniques to RNN with LSTM units, but found that standard dropout does not work well for RNN and LSTM. This paper demonstrates the proper way to apply dropout to LSTM, and shows that it can greatly reduce overfitting across a variety of tasks.
作者对带有LSTM单元的RNN使用了正则化技术,但是发现dropout对RNN和LSTM的效果不是太好,这篇文章展示了如何正确地将dropout应用于LSTM,而且证明它能够大大地减少各种任务中的过拟合。
3、文献解读
1、Introduction
众所周知,神经网络的成功应用需要良好的正则化。遗憾的是,前馈神经网络最强大的正则化方法dropoutSrivastava并不能很好地用于RNN。因此,RNN的实际应用往往使用过小的模型,因为大的往往会过拟合。在这项工作中,我们证明了正确使用 dropout可以大大减少 LSTM的过拟合,并在三个不同的问题上对其进行了评估。
2、创新点
规定符合含义:我们此处默认指多层RNN网络。规定表示第l层t时间步的一个隐藏状态,维度为n,当
=0时,
表示t时刻的外部输入;因为LSTM网络中使用全连接网络作为常规操作,全连接的数学表达为Wx+b,为了简洁起见,我们直接用一个映射变换
表示将一个n维的输入映射为m维的输出,即
,L是网络的层数,
可直接用来预测输出
。
1、LONG-SHORT TERM MEMORY UNITS
RNN方程如下,RNN动态的描述了之前状态和当前状态的转变:
在经典的RNN网络中,该方程可表达如下:
LSTM的引入,使得RNN可以记住一定数量步骤的的信息,同时也使得上述过程复杂化,long term 储存在一个向量中:,LSTM的结构可以由如下方程表示,下图是LSTM的结构表示:
上图中公式如果看不懂的话,跟下边这个标准写法是一样的:
2、REGULARIZATION WITH DROPOUT
把dropout设置在RNN网络的输入位置(在下图中虚线位置),也就是说对上式中的进行随机丢弃或者说置零操作(
)。修改后的公式如下,仅仅做了一处修改:
作者指出,dropout一定要设置在网络的非循环部分,否则信息将会因循环步的进行而逐渐丢失。比如我们将dropout设置在隐状态上(下图每一个实线位置),那么每经过一次循环,剩余的信息就被做一次dropout,如果是长序列,那么循环到最后,前面的信息早就丢失殆尽了;反之,我们把dropout设置在输入神经元上(下图虚线位置),如下图所示,那么因dropout造成的信息损失则与循环的次数无关,而仅仅与网络的层数相关。
3、实验过程
1、LANGUAGE MODELING
1.1、数据集
我们在PTB数据集上进行了词级预测实验,该数据集由929k 个训练词、73k 个验证词和 82k 个测试词组成。该数据集的词汇量为1万个。
1.2评估指标
中型LSTM、大型LSTM以及一个非正则化的网络
1.3超参数的设定
中型LSTM:一共有两层,每层有650个单元,参数在[-0.05,0.05]范围内均匀初始化,对非递归连接进行了50%的dropout,学习率设置为1。
大型LSTM:一共有两层,每层有1500个单元,参数在[-0.04,0.04]范围内均匀初始化,对非递归连接采用65%的dropout,学习率设置为1。
1.4实验结果
2、SPEECHRECOGNITION
2.1数据集
在谷歌冰岛语语音内部数据集上的表现,该数据集相对较小(9.3万个语篇)。
2.2评估指标
正则化LSTM与非正则化LSTM在测试集与训练集上的表现
2.3实验结果
4、讨论
为什么dropout在RNN上的表现不好?
1.RNN存在时序依赖性。标准dropout会随机丢弃单元,破坏时序 Signals 的传递,使RNN失去利用时序信息的能力。
2. RNN训练需要backpropagation through time (BPTT)。标准dropout会增大RNN内部Signals的变动,导致梯度爆炸或消失,使RNN难以通过BPTT训练。
3. RNN单元之间有较强的联合适应性。标准dropout破坏了单元之间的联合适应过程,使RNN的表达能力降低。
4. RNN内存细胞存在状态依赖。但标准dropout不考虑状态依赖,可能破坏RNN的内部状态传递。
5. LSTM结构复杂,标准dropout不够区分对待,可能破坏LSTM内部的门控结构。
5、结论
文章介绍了一种将dropout应用于LSTM的简单方法,这种方法可以在不同领域的多个问题上大幅提高性能。作者的研究使dropout对 RNN 非常有用。
二、深入学习RNN
一、将文本转换成向量的方法
一、one-hot编码
举例:有1000个词汇量。排在第一个位置的代表英语中的冠词”a”,那么这个"a"是用[1,0,0,0,0..],只有第一个位置是1,其余位置都是0的1000维度的向量表示,如下图中的第一列所示。
即设词典的大小为n(词典中有n个词),假如某个词在词典中的位置为k,则设立一个n维向量,第k维置1,其余维全都置0。
二、word-embedding
word-embedding/词向量/词嵌入:将单词编码成低维实数向量(将单词映射到一个低维空间)。
word embedding使用了浮点型的稠密矩阵来表示token,根据词典的大小,我们的向量通常使用不同的维度,例如:100/256/300等,其中向量中的每一个值是一个超参数,其初始值是随机生成的,之后会在训练的过程中进行学习而获得
如果我们文本中有20000个词语,如果使用one-hot编码,那么我们会有20000*20000的矩阵,其中大多数的位置都为0,但我们如果使用word embedding来表示的话,只需要2000*维度,比如20000*300。
我们会把所有的文本转化为向量,把句子用向量表示。
自然语言单词是离散信号,比如“我”、“ 爱”、“人工智能”。如何把每个离散的单词转换为一个向量呢?通常情况下,我们可以维护一个如下图图2所示的查询表。表中每一行都存储了一个特定词语的向量值,每一列的第一个元素都代表着这个词本身,以便于我们进行词和向量的映射(如“我”对应的向量值为 [0.3,0.5,0.7,0.9,-0.2,0.03] )。给定任何一个或者一组单词,我们都可以通过查询这个excel,实现把单词转换为向量的目的,这个查询和替换过程称之为Embedding Lookup。
然而在进行神经网络计算的过程中,需要大量的算力,常常要借助特定硬件(如GPU)满足训练速度的需求。GPU上所支持的计算都是以张量(Tensor)为单位展开的,因此在实际场景中,我们需要把Embedding Lookup的过程转换为张量计算,如 图3 所示。
假设对于句子"我,爱,人工,智能",把Embedding Lookup的过程转换为张量计算的流程如下:
1、通过查询字典,先把句子中的单词转换成一个ID(通常是一个大于等于0的整数),这个单词到ID的映射关系可以根据需求自定义(如图3中,我=>1, 人工=>2,爱=>3,…)。
2、得到ID后,再把每个ID转换成一个固定长度的向量。假设字典的词表中有5000个词,那么,对于单词“我”,就可以用一个5000维的向量来表示。由于“我”的ID是1,因此这个向量的第一个元素是1,其他元素都是0([1,0,0,…,0]);同样对于单词“人工”,第二个元素是1,其他元素都是0。用这种方式就实现了用一个向量表示一个单词。由于每个单词的向量表示都只有一个元素为1,而其他元素为0,因此我们称上述过程为One-Hot Encoding。
3、经过One-Hot Encoding后,句子“我,爱,人工,智能”就被转换成为了一个形状为 4×5000的张量,记为VVV。在这个张量里共有4行、5000列,从上到下,每一行分别代表了“我”、“爱”、“人工”、“智能”四个单词的One-Hot Encoding。最后,我们把这个张量V和另外一个稠密张量W相乘,其中W张量的形状为5000 × 128(5000表示词表大小,128表示每个词的向量大小)。经过张量乘法,我们就得到了一个4×128的张量,从而完成了把单词表示成向量的目的。
二、RNN的介绍
RNN是一种特殊的神经网路结构,其本身是包含循环的网络,允许信息在神经元之间传递,如下图所示:
图示是一个RNN结构示意图,图中的A表示神经网络模型,表示模型的输入信号,
表示模型的输出信号,如果没有A的输出信号传递到A 的那个箭头, 这个网络模型与普通的神经网络结构无异。那么这个箭头做了什么事情呢?它允许A将信息传递给 A ,神经网络将自己的输出作为输入了!
关键在于输入信号是一个时间序列,跟时间t有关。也就是说,在t时刻,输入信号作为神经网络A的输入,A的输出分流为两部分,一部分输出给
,一部分作为一个隐藏的信号流被输入到 A 中,在下一次时刻输入信号
时,这部分隐藏的信号流也作为输入信号输入到了 A 中。此时神经网络A就同时接收了t时刻和 t+1 时刻的信号输入了,此时的输出信号又将被传递到下一时刻的 A中。如果我们把上面那个图根据时间t展开来看,就是:
时刻的信息输出给t=1 时刻的模型 A了,t=1 时刻的信息输出给t=2 时刻的模型A了, …。这样,相当于RNN在时间序列上把自己复制了很多遍,每个模型都对应一个时刻的输入,并且当前时刻的输出还作为下一时刻的模型的输入信号。
三、RNN的局限性
RNN利用了神经网络的“内部循环”来保留时间序列的上下文信息,可以使用过去的信号数据来推测对当前信号的理解,这是非常重要的进步,并且理论上RNN可以保留过去任意时刻的信息。但实际使用RNN时往往遇到问题,RNN虽然在理论上可以保留所有历史时刻的信息,但在实际使用时,信息的传递往往会因为时间间隔太长而逐渐衰减,传递一段时刻以后其信息的作用效果就大大降低了。因此,普通RNN对于信息的长期依赖问题没有很好的处理办法。
四、长短时间记忆网络(LSTM)
一、 LSTM与RNN的关系
长短期记忆(Long Short Term Memory,LSTM)网络是一种特殊的RNN模型,其特殊的结构设计使得它可以避免长期依赖问题,记住很早时刻的信息是LSTM的默认行为,而不需要专门为此付出很大代价。
普通的RNN模型中,其重复神经网络模块的链式模型如下图所示,这个重复的模块只有一个非常简单的结构,一个单一的神经网络层(例如tanh层),这样就会导致信息的处理能力比较低。
而LSTM在此基础上将这个结构改进了,不再是单一的神经网络层,而是4个,并且以一种特殊的方式进行交互。
二、LSTM的基本思想
LSTM的关键是细胞状态(直译:cell state),表示为,用来保存当前LSTM的状态信息并传递到下一时刻的LSTM中,也就是RNN中那根“自循环”的箭头。当前的LSTM接收来自上一个时刻的细胞状态
,并与当前LSTM接收的信号输入
共同作用产生当前LSTM的细胞状态
。
在LSTM中,采用专门设计的“门”来引入或者去除细胞状态中的信息。门是一种让信息选择性通过的方法。有的门跟信号处理中的滤波器有点类似,允许信号部分通过或者通过时被门加工了;有的门也跟数字电路中的逻辑门类似,允许信号通过或者不通过。这里所采用的门包含一个sigmoid神经网络层和一个按位的乘法操作,如下图所示:
其中黄色方块表示sigmoid神经网络层,粉色圆圈表示按位乘法操作。sigmoid神经网络层可以将输入信号转换为 0 到 1 之间的数值,用来描述有多少量的输入信号可以通过。0 表示“不允许任何量通过”,1 表示“允许所有量通过”。
LSTM主要包括三个不同的门结构:遗忘门、记忆门和输出门。这三个门用来控制LSTM的信息保留和传递,最终反映到细胞状态和输出信号
。如下图所示:
图中标示了LSTM中各个门的构成情况和相互之间的关系,其中:
- 遗忘门由一个sigmoid神经网络层和一个按位乘操作构成;
- 记忆门由输入门(input gate)与tanh神经网络层和一个按位乘操作构成;
- 输出门(output gate)与 tanℎ 函数(注意:这里不是 tanℎ 神经网络层)以及按位乘操作共同作用将细胞状态和输入信号传递到输出端。
三、遗忘门
遗忘门的作用就是用来“忘记”信息的。在LSTM的使用过程中,有一些信息不是必要的,因此遗忘门的作用就是用来选择这些信息并“忘记”它们。遗忘门决定了细胞状态 中的哪些信息将被遗忘。
左边高亮的结构就是遗忘门,包含一个sigmoid神经网络层(黄色方框,神经网络参数为 ,
),接收t时刻的输入信号
和t-1时刻LSTM的上一个输出信号
,这两个信号进行拼接以后共同输入到sigmoid神经网络层中,然后输出信号
,
是一个 0 到1之间的数值,并与
相乘来决定
中的哪些信息将被保留,哪些信息将被舍弃。
四、记忆门
记忆门的作用与遗忘门相反,它将决定新输入的信息和
中哪些信息将被保留。
记忆门包含2个部分。第一个是包含sigmoid神经网络层(输入门,神经网络网络参数为 ,
)和一个tanh神经网络层(神经网络参数为
,
)。
- sigmoid神经网络层跟遗忘门一样,它接收
和
作为输入,然后输出一个 0 到 1 之间的数值
来决定哪些信息需要被更新;
- Tanh神经网络层的作用是将输入的
和
整合,然后通过一个tanh神经网络层来创建一个新的状态候选向量
,
的值范围在 −1 到 1 之间。
记忆门的输出由上述两个神经网络层的输出决定, 与
相乘来选择哪些信息将被新加入到t时刻的细胞状态
中。
五、更新细胞状态
有了遗忘门和记忆门,我们就可以更新细胞状态了。
这里将遗忘门的输出与上一时刻的细胞状态
相乘来选择遗忘和保留一些信息,将记忆门的输出与从遗忘门选择后的信息加和得到新的细胞状态
。这就表示t时刻的细胞状态
已经包含了此时需要丢弃的t-1时刻传递的信息和t时刻从输入信号获取的需要新加入的信息
。
将继续传递到t+1时刻的LSTM网络中,作为新的细胞状态传递下去。
六、输出门
前面已经讲了LSTM如何来更新细胞状态, 那么在t时刻我们输入信号
以后,对应的输出信号计算如下:
输出门就是将t−1时刻传递过来并经过了前面遗忘门与记忆门选择后的细胞状态, 与 t-1时刻的输出信号
和t时刻的输入信号
整合到一起作为当前时刻的输出信号。整合的过程如上图所示
和
经过一个sigmoid神经网络层(神经网络参数为
,
)输出一个 0 到 1 之间的数值
。
经过一个tanℎ函数(注意:这里不是 tanh神经网络层)到一个在 −1 到 1 之间的数值,并与
相乘得到输出信号
,同时
也作为下一个时刻的输入信号传递到下一阶段。
五、BRNN
为什么会用到双向循环神经网络呢?
因为循环神经网络只能记住以前的信息,对于未来的信息他们一无所知,但是如果设计一个从前向后的循环神经网络,再设计一个从后向前的循环神经网络,那么就可以解决这个问题。
双向循环神经网络(BRNN)的基本思想是提出每一个训练序列向前和向后分别是两个循环神经网络(RNN),而且这两个都连接着一个输出层。这个结构提供给输出层输入序列中每一个点的完整的过去和未来的上下文信息。下图展示的是一个沿着时间展开的双向循环神经网络。六个独特的权值在每一个时步被重复的利用,六个权值分别对应:输入到向前和向后隐含层(w1, w3),隐含层到隐含层自己(w2, w5),向前和向后隐含层到输出层(w4, w6)。值得注意的是:向前和向后隐含层之间没有信息流,这保证了展开图是非循环的。
对于整个双向循环神经网络(BRNN)的计算过程如下:
向前推算(Forward pass):
对于双向循环神经网络(BRNN)的隐含层,向前推算跟单向的循环神经网络(RNN)一样,除了输入序列对于两个隐含层是相反方向的,输出层直到两个隐含层处理完所有的全部输入序列才更新:
向后推算(Backward pass):
双向循环神经网络(BRNN)的向后推算与标准的循环神经网络(RNN)通过时间反向传播相似,除了所有的输出层项首先被计算,然后返回给两个不同方向的隐含层:
六、BPTT
一、RNN的前向输出流程
x是输入,h是隐层单元,o为输出,L为损失函数,y为训练集的标签。这些元素右上角带的t代表t时刻的状态,其中需要注意的是,因策单元h在t时刻的表现不仅由此刻的输入决定,还受t时刻之前时刻的影响。V、W、U是权值,同一类型的权连接权值相同。
二、BPTT
BPTT(back-propagation through time)算法是常用的训练RNN的方法,其实本质还是BP算法,只不过RNN处理时间序列数据,所以要基于时间反向传播,故叫随时间反向传播。BPTT的中心思想和BP算法相同,沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛。综上所述,BPTT算法本质还是BP算法,BP算法本质还是梯度下降法,那么求各个参数的梯度便成了此算法的核心。
需要寻优的参数有三个,分别是U、V、W。与BP算法不同的是,其中W和U两个参数的寻优过程需要追溯之前的历史数据,参数V相对简单只需关注目前。
W和U的偏导的求解由于需要涉及到历史数据,其偏导求起来相对复杂,我们先假设只有三个时刻,那么在第三个时刻 L对W的偏导数为:
L在第三个时刻对U的偏导数为:
总结
通过对RNN的学习,对LSTM以及RNN的了解进一步加深,RNN本身有许多缺陷,所以大部分能用到RNN的地方,基本上都可以用LSTM来代替。