LSTM介绍

1. 传统神经网络结构的缺陷

从传统的神经网络结构我们可以看出,信号流从输入层到输出层依次流过,同一层级的神经元之间,信号是不会相互传递的。这样就会导致一个问题,输出信号只与输入信号有关,而与输入信号的先后顺序无关。并且神经元本身也不具有存储信息的能力,整个网络也就没有“记忆”能力,当输入信号是一个跟时间相关的信号时,如果我们想要通过这段信号的“上下文”信息来理解一段时间序列的意思,传统的神经网络结构就显得无力了。与我们人类的理解过程类似,我们听到一句话时往往需要通过这句话中词语出现的顺序以及我们之前所学的关于这些词语的意思来理解整段话的意思,而不是简单的通过其中的几个词语来理解。

例如,在自然语言处理领域,我们要让神经网络理解这样一句话:“地球上最高的山是珠穆朗玛峰”,按照传统的神经网络结构,它可能会将这句话拆分为几个单独的词(地球、上、最高的、山、是、珠穆朗玛峰),分别输入到模型之中,而不管这几个词之间的顺序。然而,直观上我们可以看到,这几个词出现的顺序是与最终这句话要表达的意思是密切相关的,但传统的神经网络结构无法处理这种情况。

因此,我们需要构建具有“记忆”能力的神经网络模型,用来处理需要理解上下文意思的信号,也就是时间序列数据。循环神经网络(RNN)就是用来处理这类信号的,RNN之所以能够有效的处理时间序列数据,主要是基于它比较特殊的运行原理。下面将介绍RNN的构建过程和基本运行原理,然后引入长短期记忆网络(LSTM)。

2.1 RNN的构造过程

RNN是一种特殊的神经网路结构,其本身是包含循环的网络,允许信息在神经元之间传递,如下图所示:

图示是一个RNN结构示意图,图中的 表示神经网络模型,[公式] 表示模型的输入信号,[公式] 表示模型的输出信号,如果没有 [公式] 的输出信号传递到 [公式] 的那个箭头, 这个网络模型与普通的神经网络结构无异。

那么这个箭头做了什么事情呢?它允许 [公式] 将信息传递给 [公式] ,神经网络将自己的输出作为输入了!这怎么理解啊?作者第一次看到这个图的时候也是有点懵,读者可以思考一分钟。

关键在于输入信号是一个时间序列,跟时间有关。也就是说,在 [公式] 时刻,输入信号 [公式] 作为神经网络 [公式] 的输入,[公式] 的输出分流为两部分,一部分输出给 [公式] ,一部分作为一个隐藏的信号流被输入到 [公式] 中,在下一次时刻输入信号 [公式] 时,这部分隐藏的信号流也作为输入信号输入到了 [公式] 中。此时神经网络 [公式] 就同时接收了 [公式] 时刻和 [公式] 时刻的信号输入了,此时的输出信号又将被传递到下一时刻的 [公式] 中。如果我们把上面那个图根据时间 [公式] 展开来看,就是:

 

看到了吗?t=0 时刻的信息输出给[公式] 时刻的模型 [公式] 了,[公式] 时刻的信息输出给[公式] 时刻的模型 [公式] 了, [公式]。这样,相当于RNN在时间序列上把自己复制了很多遍,每个模型都对应一个时刻的输入,并且当前时刻的输出还作为下一时刻的模型的输入信号。

 这样链式的结构揭示了RNN本质上是与序列相关的,是对于时间序列数据最自然的神经网络架构。并且理论上,RNN可以保留以前任意时刻的信息。RNN在语音识别、自然语言处理、图片描述、视频图像处理等领域已经取得了一定的成果,而且还将更加大放异彩。在实际使用的时候,用得最多的一种RNN结构是LSTM,为什么是LSTM呢?我们从普通RNN的局限性说起。

2.2 RNN的局限性

RNN利用了神经网络的“内部循环”来保留时间序列的上下文信息,可以使用过去的信号数据来推测对当前信号的理解,这是非常重要的进步,并且理论上RNN可以保留过去任意时刻的信息。但实际使用RNN时往往遇到问题,请看下面这个例子。

假如我们构造了一个语言模型,可以通过当前这一句话的意思来预测下一个词语。现在有这样一句话:“我是一个中国人,出生在普通家庭,我最常说汉语,也喜欢写汉字。我喜欢妈妈做的菜”。我们的语言模型在预测“我最常说汉语”的“汉语”这个词时,它要预测“我最长说”这后面可能跟的是一个语言,可能是英语,也可能是汉语,那么它需要用到第一句话的“我是中国人”这段话的意思来推测我最常说汉语,而不是英语、法语等。而在预测“我喜欢妈妈做的菜”的最后的词“菜”时并不需要“我是中国人”这个信息以及其他的信息,它跟我是不是一个中国人没有必然的关系。

这个例子告诉我们,想要精确地处理时间序列,有时候我们只需要用到最近的时刻的信息。例如预测“我喜欢妈妈做的菜”最后这个词“菜”,此时信息传递是这样的:

“菜”这个词与“我”、“喜欢”、“妈妈”、“做”、“的”这几个词关联性比较大,距离也比较近,所以可以直接利用这几个词进行最后那个词语的推测。

而有时候我们又需要用到很早以前时刻的信息,例如预测“我最常说汉语”最后的这个词“汉语”。此时信息传递是这样的

 

 

 此时,我们要预测“汉语”这个词,仅仅依靠“我”、“最”、“常”、“说”这几个词还不能得出我说的是汉语,必须要追溯到更早的句子“我是一个中国人”,由“中国人”这个词语来推测我最常说的是汉语。因此,这种情况下,我们想要推测“汉语”这个词的时候就比前面那个预测“菜”这个词所用到的信息就处于更早的时刻。

而RNN虽然在理论上可以保留所有历史时刻的信息,但在实际使用时,信息的传递往往会因为时间间隔太长而逐渐衰减,传递一段时刻以后其信息的作用效果就大大降低了。因此,普通RNN对于信息的长期依赖问题没有很好的处理办法。

为了克服这个问题,Hochreiter等人在1997年改进了RNN,提出了一种特殊的RNN模型——LSTM网络,可以学习长期依赖信息,在后面的20多年被改良和得到了广泛的应用,并且取得了极大的成功。

3.1 LSTM与RNN的关系

长短期记忆(Long Short Term Memory,LSTM)网络是一种特殊的RNN模型,其特殊的结构设计使得它可以避免长期依赖问题,记住很早时刻的信息是LSTM的默认行为,而不需要专门为此付出很大代价。

普通的RNN模型中,其重复神经网络模块的链式模型如下图所示,这个重复的模块只有一个非常简单的结构,一个单一的神经网络层(例如tanh层),这样就会导致信息的处理能力比较低。

而LSTM在此基础上将这个结构改进了,不再是单一的神经网络层,而是4个,并且以一种特殊的方式进行交互。

 粗看起来,这个结构有点复杂,不过不用担心,接下来我们会慢慢解释。在解释这个神经网络层时我们先来认识一些基本的模块表示方法。图中的模块分为以下几种:

  • 黄色方块:表示一个神经网络层(Neural Network Layer);
  • 粉色圆圈:表示按位操作或逐点操作(pointwise operation),例如向量加和、向量乘积等;
  • 单箭头:表示信号传递(向量传递);
  • 合流箭头:表示两个信号的连接(向量拼接);
  • 分流箭头:表示信号被复制后传递到2个不同的地方。

下面我们将分别介绍这些模块如何在LSTM中作用。

 

3.2 LSTM的基本思想

LSTM的关键是细胞状态(直译:cell state),表示为 Ct ,用来保存当前LSTM的状态信息并传递到下一时刻的LSTM中,也就是RNN中那根“自循环”的箭头。当前的LSTM接收来自上一个时刻的细胞状态 [公式] ,并与当前LSTM接收的信号输入 [公式] 共同作用产生当前LSTM的细胞状态 [公式],具体的作用方式下面将详细介绍。

在LSTM中,采用专门设计的“门”来引入或者去除细胞状态 Ct 中的信息。门是一种让信息选择性通过的方法。有的门跟信号处理中的滤波器有点类似,允许信号部分通过或者通过时被门加工了;有的门也跟数字电路中的逻辑门类似,允许信号通过或者不通过。这里所采用的门包含一个 [公式] 神经网络层和一个按位的乘法操作,如下图所示: 

其中黄色方块表示sigmod神经网络层,粉色圆圈表示按位乘法操作。[公式]神经网络层可以将输入信号转换为 [公式][公式] 之间的数值,用来描述有多少量的输入信号可以通过。[公式] 表示“不允许任何量通过”,[公式] 表示“允许所有量通过”。

LSTM主要包括三个不同的门结构:遗忘门、记忆门和输出门。这三个门用来控制LSTM的信息保留和传递,最终反映到细胞状态 Ct 和输出信号 [公式] 。如下图所示:

 

图中标示了LSTM中各个门的构成情况和相互之间的关系,其中:

  • 遗忘门由一个sigmod神经网络层和一个按位乘操作构成;
  • 记忆门由输入门(input gate)与tanh神经网络层和一个按位乘操作构成;
  • 输出门(output gate)与 tanh 函数(注意:这里不是 [公式] 神经网络层)以及按位乘操作共同作用将细胞状态和输入信号传递到输出端。

3.3 遗忘门

顾名思义,遗忘门的作用就是用来“忘记”信息的。在LSTM的使用过程中,有一些信息不是必要的,因此遗忘门的作用就是用来选择这些信息并“忘记”它们。遗忘门决定了细胞状态 Ct-1 中的哪些信息将被遗忘。那么遗忘门的工作原理是什么呢?看下面这张图。

左边高亮的结构就是遗忘门了,包含一个sigmod神经网络层(黄色方框,神经网络参数为 [公式]),接收 [公式] 时刻的输入信号 [公式][公式] 时刻LSTM的上一个输出信号 [公式] ,这两个信号进行拼接以后共同输入到[公式]神经网络层中,然后输出信号 [公式][公式]是一个 [公式][公式]之间的数值,并与 [公式] 相乘来决定 [公式]中的哪些信息将被保留,哪些信息将被舍弃。可能看到这里有的初学者还是不知道具体是什么意思,我们用一个简单的例子来说明。

假设 , [公式], [公式], 那么遗忘门的输入信号就是[公式][公式]的组合,即 [公式], 然后通过[公式] 神经网络层输出每一个元素都处于[公式][公式]之间的向量[公式],注意,此时[公式]是一个与[公式]维数相同的向量,此处为3维。如果看到这里还没有看懂的读者,可能会有这样的疑问:输入信号明明是6维的向量,为什么 [公式]就变成了3维呢?这里可能是将[公式]神经网络层当成了[公式]激活函数了,两者不是一个东西,初学者在这里很容易混淆。下文所提及的[公式]神经网络层和[公式]神经网络层而是类似的道理,他们并不是简单的[公式]激活函数和[公式]激活函数,在学习时要注意区分。

3.4 记忆门

记忆门的作用与遗忘门相反,它将决定新输入的信息 xt 和 [公式] 中哪些信息将被保留。

 

如图所示,记忆门包含2个部分。第一个是包含sigmod神经网络层(输入门,神经网络网络参数为 [公式])和一个 [公式] 神经网络层(神经网络参数为 [公式])。

  • sigmod神经网络层的作用很明显,跟遗忘门一样,它接收 [公式][公式] 作为输入,然后输出一个 [公式][公式] 之间的数值 [公式] 来决定哪些信息需要被更新;
  • Tanh神经网络层的作用是将输入的 xt 和 [公式] 整合,然后通过一个[公式]神经网络层来创建一个新的状态候选向量 [公式][公式] 的值范围在 [公式][公式] 之间。

记忆门的输出由上述两个神经网络层的输出决定,it 与 [公式] 相乘来选择哪些信息将被新加入到 [公式] 时刻的细胞状态 [公式] 中。

3.5 更新细胞状态

有了遗忘门和记忆门,我们就可以更新细胞状态 Ct 了。

这里将遗忘门的输出 Ft 与上一时刻的细胞状态 [公式] 相乘来选择遗忘和保留一些信息,将记忆门的输出与从遗忘门选择后的信息加和得到新的细胞状态 [公式]。这就表示 [公式] 时刻的细胞状态 [公式] 已经包含了此时需要丢弃的 [公式] 时刻传递的信息和 [公式] 时刻从输入信号获取的需要新加入的信息 [公式][公式] 将继续传递到 [公式] 时刻的LSTM网络中,作为新的细胞状态传递下去。 

3.6 输出门

前面已经讲了LSTM如何来更新细胞状态 , 那么在 [公式] 时刻我们输入信号 [公式] 以后,对应的输出信号该如何计算呢?

 

如上面左图所示,输出门就是将t-1时刻传递过来并经过了前面遗忘门与记忆门选择后的细胞状态[公式], 与 [公式] 时刻的输出信号 [公式][公式] 时刻的输入信号 [公式] 整合到一起作为当前时刻的输出信号。整合的过程如上图所示,[公式][公式] 经过一个[公式]神经网络层(神经网络参数为 [公式])输出一个 [公式][公式] 之间的数值 [公式][公式] 经过一个[公式]函数(注意:这里不是 [公式] 神经网络层)到一个在 [公式][公式] 之间的数值,并与[公式] 相乘得到输出信号 [公式] ,同时 [公式] 也作为下一个时刻的输入信号传递到下一阶段。

其中,tanh函数是激活函数的一种,函数图像为:

至此,基本的LSTM网络模型就介绍完了。如果对LSTM模型还没有理解到的,可以看一下这个视频,作者是一个外国小哥,英文讲解的,有动图,方便理解。

3.7 LSTM的一些变体

前面已经介绍了基本的LSTM网络模型,而实际应用时,我们常常会采用LSTM的一些变体,虽然差异不大,这里不再做详细介绍,有兴趣的读者可以自行了解。

3.7.1 在门上增加窥视孔

这是2000年Gers和Schemidhuber教授提出的一种LSTM变体。图中,在传统的LSTM结构基础上,每个门(遗忘门、记忆门和输出门)增加了一个“窥视孔”(Peephole),有的学者在使用时也选择只对部分门加入窥视孔。

3.7.2 整合遗忘门和输入门

与传统的LSTM不同的是,这个变体不需要分开来确定要被遗忘和记住的信息,采用一个结构搞定。在遗忘门的输出信号值(0 到 [公式]之间)上,用 [公式] 减去该数值来作为记忆门的状态选择,表示只更新需要被遗忘的那些信息的状态。

3.7.3 GRU

改进比较大的一个LSTM变体叫Gated Recurrent Unit (GRU),目前应用较多。结构图如下

GRU主要包含2个门:重置门和更新门。GRU混合了细胞状态 Ct 和隐藏状态 [公式] 为一个新的状态,使用 [公式] 来表示。 该模型比传统的标准LSTM模型简单。

 

 

 

 

 

 

 

 

 

  • 5
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值