(一)、什么是循环神经网络LSTM?
LSTM指的是长短期记忆网络(Long Short Term Memory),它是循环神经网络中最知名和成功的扩展。由于循环神经网络有梯度消失和梯度爆炸的问题,学习能力有限,在实际任务中的效果很难达到预期。为了增强循环神经网络的学习能力,缓解网络的梯度消失等问题,LSTM神经网络便横空出世了。LSTM可以对有价值的信息进行长期记忆,不仅减小循环神经网络的学习难度,并且由于其增加了长时记忆,在一定程度上也缓解了梯度消失的问题。(注:梯度爆炸的问题用一般的梯度裁剪方法就可以解决)。

(二)、LSTM实现长短期记忆的原理是什么?

2.1 LSTM网络内部结构示意图

与传统的循环神经网络相比,LSTM在ht−1h_{t-1}ht−1​,xtx_txt​的基础上加了一个cell state(即长时记忆状态ct−1c_{t-1}ct−1​)来计算hth_tht​,并且对网络模型内部进行了更加精心的设计,加入了遗忘门ftf_tft​、输入门iti_tit​、输出门oto_tot​三个门神经元以及一个内部记忆神经元c~t\tilde{c}_tc~t​(上图2.1中的LSTM网络模型内部黄色的σ\sigmaσ从左到右分别指的是ftf_tft​、iti_tit​、oto_tot​,黄色的tanh⁡\tanhtanh则指的是c~t\tilde{c}_tc~t​)。遗忘门神经元ftf_tft​控制前一步记忆单元中信息有多大程度上被遗忘掉;输入门神经元iti_tit​控制当前记忆中的信息以多大程度更新到记忆单元中;输出门神经元oto_tot​控制当前的hidden state(即短时记忆单元)的输出有多大程度取决于当前的长时记忆单元。在一个训练好的网络中,当输入的序列没有重要信息时,LSTM遗忘门的值接近于1,输入门的值接近于0,此时过去的信息将会保留,从而实现了长时记忆的功能;当输入的序列中出现了重要信息时,LSTM应当将其存入记忆中,此时其输入门的值会接近于1;当输入的序列中出现了重要信息,且该信息意味着之前的记忆不再重要时,则输入门的值会接近于1,而遗忘门的值会接近于0,这样旧的记忆就会遗忘,新的重要信息被记忆。经过这样的设计,整个网络更容易学习到序列之间的长期依赖。

(三)、LSTM的原理公式是什么?
经典的LSTM中,第t步的更新计算公式如下(⊙\odot⊙表示元素点乘):
{输入:xinput=concat[ht−1,xt]遗忘门神经元:ft=σ(xinputWf+bf)遗忘后的长时记忆:ct−1′=ft⊙ct−1记忆门神经元:c~t=tanh⁡(xinputWc+bc)输入门神经元:it=σ(xinputWi+bi)输入后的记忆:c~t′=it⊙ct~t时刻的长时记忆:ct=ct−1′+c~t′输出门神经元:ot=σ(xinputWo+bo)t时刻的短期记忆:ht=ot⊙tanh⁡(ct)\begin{cases} 输入:x_{input}=concat[h_{t-1},x_t]\\ 遗忘门神经元:f_t=\sigma(x_{input}W_f+b_f) \\ 遗忘后的长时记忆:c'_{t-1}=f_t\odot c_{t-1} \\ 记忆门神经元:\tilde{c}_t=\tanh(x_{input}W_c+b_c)\\ 输入门神经元:i_t=\sigma(x_{input}W_i+b_i)\\ 输入后的记忆:{\tilde{c}'_t}=i_t\odot \tilde{c_t}\\ t时刻的长时记忆:c_t=c'_{t-1}+{\tilde{c}'_t}\\ 输出门神经元:o_t=\sigma(x_{input}W_o+b_o)\\ t时刻的短期记忆:h_t=o_t\odot \tanh{(c_t)}\\ \end{cases}⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​输入:xinput​=concat[ht−1​,xt​]遗忘门神经元:ft​=σ(xinput​Wf​+bf​)遗忘后的长时记忆:ct−1′​=ft​⊙ct−1​记忆门神经元:c~t​=tanh(xinput​Wc​+bc​)输入门神经元:it​=σ(xinput​Wi​+bi​)输入后的记忆:c~t′​=it​⊙ct​~​t时刻的长时记忆:ct​=ct−1′​+c~t′​输出门神经元:ot​=σ(xinput​Wo​+bo​)t时刻的短期记忆:ht​=ot​⊙tanh(ct​)​
其中输入xinputx_{input}xinput​是通过对上一时刻t−1t-1t−1的短期记忆状态ht−1h_{t-1}ht−1​以及当前时刻ttt的字(词)向量输入xtx_txt​进行特征维度的concatconcatconcat所获得的。σ\sigmaσ指的是sigmoidsigmoidsigmoid函数,遗忘门、输入门以及输出门神经元的输出结果是向量,由于三个门神经元均采用sigmoidsigmoidsigmoid作为激活函数,所以输出向量的每个元素均在0~1之间,用于控制各维度流过阀门的信息量;记忆门神经元的输出结果仍为向量,且与遗忘门、输入门以及输出门神经元的输出向量维度等同,由于记忆门神经元使用的激活函数是 tanh⁡\tanhtanh,所以其输出向量的每个元素均在-1~1之间。WfW_fWf​,bfb_fbf​,WiW_iWi​,bib_ibi​,WcW_cWc​,bcb_cbc​,WoW_oWo​,bob_obo​是各个门神经元的参数,是在训练过程中需要学习得到的。与传统的循环神经网络所不同的是,LSTM循环神经网络新增了长时记忆单元,从上一个长时记忆单元的状态ct−1c_{t-1}ct−1​到当前的长时记忆单元ctc_{t}ct​不仅取决于激活函数tanh⁡\tanhtanh计算得到的状态,而且还由输入门和遗忘门神经元来共同控制。

(四)、LSTM为什么选择sigmoidsigmoidsigmoid作为遗忘门、输入门以及输出门神经元的激活函数,又为什么选择tanh⁡\tanhtanh作为记忆门神经元的激活函数?
我们可以注意到,无论是sigmoidsigmoidsigmoid还是tanh⁡\tanhtanh,它们均属于饱和函数,也就是说当输入达到一定值的情况下,输出就不会明显变化了。比如,当输入小于一定值时,sigmoidsigmoidsigmoid输出几乎接近于0,tanh⁡\tanhtanh输出几乎接近于-1;当输入大于一定值时,sigmoidsigmoidsigmoid,tanh⁡\tanhtanh输出均接近于1。
(1). 如果使用非饱和的激活函数,例如relurelurelu,我们很难实现门控效果。sogmoidsogmoidsogmoid的函数输出在0~1之间,且输入较大或较小时,其输出会非常接近1或0,从而保证该门是开或关。故选择sigmoidsigmoidsigmoid作为遗忘门、输入门以及输出门神经元的激活函数最合适不过。
(2). tanh⁡\tanhtanh函数的输出在-1~1之间,并且中心为0,这与大多数场景下特征分布是0中心吻合,并且,tanh⁡\tanhtanh在输入为0附近的时相比sigmoidsigmoidsigmoid函数有更大的梯度。通常使模型收敛更快。

(五)、常问问题一:LSTM有几个输入几个输出?
三个输入:序列中的字(词)向量输入xtx_txt​、短时记忆状态输入ht−1h_{t-1}ht−1​以及长时记忆状态输入ct−1c_{t-1}ct−1​。
两个输出:短时记忆状态输出hth_tht​和长时记忆状态输出ctc_tct​。

(六)、常问问题二:LSTM有几个神经元,分别使用什么激活函数?
四个神经元:遗忘门、输入门、输出门以及记忆门神经元,其中遗忘门、输入门以及输出门神经元使用sigmoidsigmoidsigmoid作为激活函数,实现门控效果;记忆门神经元使用tanh⁡\tanhtanh作为激活函数,来吻合0中心特征分布,并且tanh⁡\tanhtanh函数在0中心有较大梯度,提高模型收敛速度。

(七)、如何构建双向LSTM?

7.1 双向LSTM结构示意图

(1). 初始化两个新的LSTM,一个LSTM将序列正序输入,另一个LSTM将序列反序输入,然后将对应字(词)向量的LSTM输出的结果进行concat,并将concat的结果作为该字(词)向量的新特征向量。
注:这个concat的输入,既可以说是LSTM网络结果输出,也可以说是LSTM短时记忆状态输出。若考虑长时记忆状态的concat,则应是两个序列的最后一个长时记忆状态进行concat,详细见(3)总结

(2). ExampleExampleExample:假如有一个序列为"大梦想家",我们正序输入即将"大",“梦”,“想”,“家"的字向量按照顺序依次输入到第一个LSTM神经网络,与此同时将"家”,“想”,“梦”,"大"的字向量按照顺序依次输入到第二个LSTM神经网络,然后将得到的"大"对应的第一个LSTM向量输出与"大"对应的第二个LSTM向量的输出进行concat。

(3). 总结
1.在上面的ExampleExampleExample中,我们不难看出,对于正序输入的"大"字向量来说,其输出并没有其他字向量的信息,而对于反序输入的"大"字向量来说,其输出包含了"家",“想”,"梦"所有在反序中"大"字向量前面的字向量信息。将这两个"大"所得到的LSTM网络输出进行concat,于是"大"字向量获得了concat后的新特征向量,该特征向量拥有了序列的全局信息,即拥有全局视野。
2.对于双向LSTM来说,若我们考虑将第一个LSTM在正序序列输入的情况下,所输出的最后一个长时记忆状态,即对应的"家"的输出状态与第二个LSTM在反序序列输入的情况下,所输出的最后一个长时记忆状态,即对应的"大"的输出状态进行concat,这样所得到的hidden_state以及cell_state将具有更持久的记忆,即记忆能力更强。

深度学习中的循环神经网络LSTM详解相关推荐

  1. Keras深度学习实战(4)——深度学习中常用激活函数和损失函数详解

    Keras深度学习实战(4)--深度学习中常用激活函数和损失函数详解 常用激活函数 Sigmoid 激活函数 Tanh 激活函数 ReLU 激活函数 线性激活函数 Softmax 激活函数 损失函数 ...

  2. 深度学习中的Adam优化算法详解

    Adam论文:https://arxiv.org/pdf/1412.6980.pdf (一).什么是Adam算法? Adam(Adaptive momentum)是一种自适应动量的随机优化方法(A m ...

  3. 使用深度学习中的循环神经网络(LSTM)进行股价预测

    tushare ID:468684 一.开发环境: 操作系统:Windows10 开发工具:PyCharm 2021.1.1 (Professional Edition) Python版本:Pytho ...

  4. 机器学习、深度学习中常用的优化算法详解——梯度下降法、牛顿法、共轭梯度法

    一.梯度下降法 1.总述: 在机器学习中,基于基本的梯度下降法发展了三种梯度下降方法,分别为随机梯度下降法,批量梯度下降法以及小批量梯度下降法. (1)批量梯度下降法(Batch Gradient D ...

  5. 《深度学习》之 前馈神经网络 原理 详解

    前馈神经网络 1. 深度学习: **定义:**深度学习是机器学习的一个研究方向,它基于一种特殊的学习机制.其特点是建立一个多层学习模型,深层级将浅层级的输出作为输入,将数据层层转化,使之越来越抽象.是 ...

  6. 【人工智能】图文详解深度学习中的卷积神经网络(CNN)

    [人工智能]图文详解深度学习中的卷积神经网络(CNN) 概念和原理 为什么要使用卷积神经网络? 卷积神经网络简介 卷积神经网络的数学公式 池化操作: 全连接层: 激活函数 卷积神经网络的 C++ 实现 ...

  7. 深度学习 实验七 循环神经网络

    文章目录 深度学习 实验七 循环神经网络 一.问题描述 二.设计简要描述 三.程序清单 深度学习 实验七 循环神经网络 一.问题描述 之前见过的所以神经网络(比如全连接网络和卷积神经网络)都有一个主要 ...

  8. python神经网络算法pdf_Python与机器学习实战 决策树、集成学习、支持向量机与神经网络算法详解及编程实现.pdf...

    作 者 :何宇健 出版发行 : 北京:电子工业出版社 , 2017.06 ISBN号 :978-7-121-31720-0 页 数 : 315 原书定价 : 69.00 主题词 : 软件工具-程序设计 ...

  9. 《深度学习》之 循环神经网络 原理 超详解

    循环神经网络 一.研究背景 1933年,西班牙神经生物学家Rafael Lorente de Nó发现大脑皮层(cerebral cortex)的解剖结构允许刺激在神经回路中循环传递,并由此提出反响回 ...

最新文章

  1. 7、java中的面向对象思想和体现
  2. java web js加版本号_[Java教程]js 比较版本号(一)
  3. php curl 模拟多线程,php利用curl 多线程 模拟 并发的详解
  4. python中input函数的返回是哪种类型_Python3.x中input的变化:input函数默认返回字符串类型...
  5. Vagrant搭建虚拟化开发环境(五)虚拟机优化 PHP升级 打包分发
  6. 数据挖掘之CTR预估(FM算法)
  7. 人脸生成:Beyond Face Rotation: Global and Local Perception GAN
  8. web框架Django一
  9. JMF视频音频通信( 图+源码 )
  10. The app references non-public selectors in payload With Xcode6.1
  11. ubuntu系统grub引导修复
  12. Android加载自定义字体出错,盘点Android使用自定义字体遇到的坑
  13. 三次握手,为什么不是两次,也不是四次
  14. 软件测试需求分析方法
  15. 计算机系统原理实验:模型机(十)ttime部分
  16. Qt中的forever是什么?
  17. 从联立方程式看机器学习的数学模式
  18. #9733;思维导图的30个问答
  19. 查看gcc编译器版本
  20. 机器学习要用到的基础知识

热门文章

  1. 2017年科技界十大新闻,你都知道吗?
  2. 微信变身大史记:从IM到电商 腾讯帝国新时代http://danke74520.qzone.qq.com
  3. 【HDU 5445】Food Problem(DP)
  4. 康奈尔大学的电影对白语料库介绍 --Cornell Movie-Dialogs Corpus
  5. Word,Excel,PPT等Office文件Web浏览器在线预览
  6. linux启动mysql1820_linux下安装mysql的问题解决
  7. 页内嵌多媒体内容的完美实现
  8. 域名被墙的解决方法是什么?
  9. python元组:格式化字符串
  10. What does shot mean?