小常识10:  循环神经网络(RNN)与长短时记忆网络LSTM简介。

 

本文目的:在计算机视觉(CV)中,CNN 通过局部连接/权值共享/池化操作/多层次结构逐层自动的提取特征,适应于处理如图片类的网格化数据。在自然语言处理(NLP)中,循环神经网络被设计用于处理序列的神经网络,如应用 RNN 识别言建模,翻译等。同时,现有的计算机视觉研究开始结合CNN与RNN的使用,应用于视频目标检测,图像字幕生成等既有图像数据,又具备序列化特点的任务。所以了解循环神经网络及其变种,有助于更好的理解神经网络的设计理念,能在不同的任务中合理选用不同的神经网络。

 

循环神经网络(RNN):

  RNN是在自然语言处理领域中最先被用起来的,比如,RNN可以为语言模型来建模。我们写出一个句子前面的一些词,然后,让电脑帮我们写下接下来的一个词。比如下面这句:

我昨天上学迟到了,老师批评了____

  语言模型是对一种语言的特征进行建模,它有很多很多用处。比如在语音转文本(STT)的应用中,声学模型输出的结果,往往是若干个可能的候选词,这时候就需要语言模型来从这些候选词中选择一个最可能的。当然,它同样也可以用在图像到文本的识别中(OCR)。

  使用RNN之前,语言模型主要是采用N-Gram。N可以是一个自然数,比如2或者3。它的含义是,假设一个词出现的概率只与前面N个词相关。我们以2-Gram为例。如果用2-Gram进行建模,那么电脑在预测的时候,只会看到前面的『了』,然后,电脑会在语料库中,搜索『了』后面最可能的一个词。不管最后电脑选的是不是『我』,我们都知道这个模型是不靠谱的,因为『了』前面说了那么一大堆实际上是没有用到的。如果是3-Gram模型呢,会搜索『批评了』后面最可能的词,感觉上比2-Gram靠谱了不少,但还是远远不够的。因为这句话最关键的信息『我』,远在9个词之前!现在读者可能会想,可以提升继续提升N的值呀,比如4-Gram、5-Gram.......。实际上,这个想法是没有实用性的。因为我们想处理任意长度的句子,N设为多少都不合适;另外,模型的大小和N的关系是指数级的,4-Gram模型就会占用海量的存储空间。

   所以,该轮到RNN出场了,RNN理论上可以往前看(往后看)任意多个词。

小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。

   在上面的示例图中,神经网络的模块A,正在读取某个输入 x_i,并输出一个值 h_i。循环可以使得信息可以从当前步传递到下一步。RNN 可以被看做是同一神经网络的多次复制,每个神经网络模块会把消息传递给下一个。所以,如果我们将这个循环展开:

 

小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。

 

   链式的特征揭示了 RNN 本质上是与序列和列表相关的。他们是对于这类数据的最自然的神经网络架构。

   以下是RNN的常用场景的输入输出结构图:

小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。

·       many to one:常用在文本分等任中,将一句到一个向量。并通向量行文本分类。

·       many to many:第一个many to manyDNN-HMM语音识别框架中常有用

·       many to many(variable length):第二个many to many常用在机器翻等任

many to many例,以下的神络结构将一个入序列映射到相同度的出序列:

小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。

则其更新方程为:

小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。

其中的参数的偏置向量 b 和 c 连同权重矩阵 U、V 和W,分别对应于输入到隐藏、 隐藏到输出和隐藏到隐藏的连接。

 

训练算法:BPTT

篇幅限制,请参考 https://zybuluo.com/hanbingtao/note/541458

 

存在的缺点:

    RNN的梯度爆炸和消失问题:RNN在训练中很容易发生梯度爆炸和梯度消失,这导致训练时梯度不能在较长序列中一直传递下去,从而使RNN无法捕捉到长距离的影响。

通常来说,梯度爆炸更容易处理一些。因为梯度爆炸的时候,我们的程序会收到NaN错误。我们也可以设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取。

梯度消失更难检测,而且也更难处理一些。总的来说,我们有三种方法应对梯度消失问题: 1.合理的初始化权重值。初始化权重,使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。

2.使用relu代替sigmoid和tanh作为**函数。

3.使用其他结构的RNNs,比如长短时记忆网络(LTSM)

 

长短时记忆神经网络(LSTM):

    其设计思路如下:

    原始RNN的隐藏层只有一个状态,即h[隐藏状态],它对于短期的输入非常敏感,但是由于梯度消失问题的存在,使得其无法有效的对长序列建模,因此,lstm通过新增加一个状态,记作c[细胞状态],让它来保存长期的状态。以下为lstm的结构图:

小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。

为了模块组件的说明如下:

 

小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。

    在上面的例中,每一条黑线传输着一整个向量,从一个点的出到其他点的入。粉色的圈代表pointwise 的操作,如向量的和,而黄色的矩就是学到的神络层。合在一起的线表示向量的接,分开的线表示内容被复制,然后分到不同的位置。

        LSTM 的关就是胞状,水平线上方穿运行。细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易

小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。

   LSTM 通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。

小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。

Sigmoid层输出 0 1 的数,描述每个部分有多少量可以通0 代表任何量通1 就指任意量通

 

    理解Lstm的关在于理解其设计的三个门结构,分门。结合其更新方程来理解具体的设计:

便于阅读,直接截,原始网页见参考料3出的网页链接.

 

 小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。

 

小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。

 

 

 小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。

 小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。

阅读

    1.除以上介绍的LSTM网络被广泛应用外,现有的针对序列数据的处理方式的改进有GRU(Gated Recurrent Unit)等计算复杂度更低的循环神经网络变种。同时BiLstm利用了序列的双向特性,被广泛应用在序列建模中。另外,循环神经网络的变种与传统机器学习序列模型的结合也值得关注,如LSTM+CRF应用于自然语言处理的标注类任务。

    2.在机器学习领域中,Attention机制被广泛用于各种序列建模的任并且均取得了良好效果。推荐查阅相关的料及文,了解基于RNN/LSTM等序列模型合Attention机制的用。

 
参考资料: 
1.     https://zybuluo.com/hanbingtao/note/541458 [零基础入门深度学习(5) - 循环神经网络]
2.     https://zybuluo.com/hanbingtao/note/581764 [零基础入门深度学习(6) - 长短时记忆网络(LSTM)]
3.     https://www.cnblogs.com/wangduo/p/6773601.html?utm_source=itdadao&utm_medium=referral  [理解 LSTM(Long Short-Term Memory, LSTM) 网络]
4.     https://github.com/exacity/deeplearningbook-chinese/  [Deep Learning ]