本文翻译自Understanding LSTM Networks

循环神经网络

人类并不是每次都是从零开始去思考一个问题的。比如你在阅读这篇文章时,你对当前每个字的理解都是基于前面字的理解的,并不是孤立的去理解每个字的意思。

传统的神经网络做不到这点,者看起来是个很大的问题。比如,你想对电影里出现的事件进行分类,传统的神经网络就没办法用前面事件的信息和理解来推断后面事件的类型。

循环神经网络克服了这个问题。网络结构中存在着环路,允许信息得以保存。

上面图中神经网络A,查看当前时刻的输入xtx_txt​,以及上一时刻传递过来的信息,产生输出hth_tht​。另外ttt时刻网络A的信息传递到下一时刻的网络A。

以上的循环神经网络开展后,相当于下图右侧的网络结构:

从右侧展开后的网络结构可以看出,这样的网络结构与数据的顺序结构紧密相关,天生适合处理顺序结构数据。

在过去的几年里,RNN在很多领域获得了非常显著的效果,包括语音识别,语言模型,机器翻译,图片描述,等等。Andrej Karpathy在文章The Unreasonalble Effectiveness of Recurrent Neural Networks里讨论了RNN的很多炫酷的特性,这里就不展开了。不过它们确实非常令人惊奇。

RNN在上述的领域内取得的成功,离不开一种称为LSTM循环神经网络,在很多任务上,它的效果远远好于普通的循环网络。本文将重点讨论LSTM的结构和特性。

长期依赖的问题

RNN的呼声来自于这样一个思想:RNN可能会将前面的信息传递到当前的任务,比如利用电影里前面画面的信息来理解当前画面。如果能做到这点,那将非常有用。RNN能做到吗?结果是得具体情况具体分析。

有时我们在预测当前任务的时候只需要查看最近的信息。例如,考虑这样一个语言模型:基于前置单词来预测当前单词。如果我们需要预测语句"the clouds are in the sky"的最后一个单词"sky",我们不需要更多的上下文信息了,依据前面的"the clouds are in the"很明显可以预测出最后一个单词是"sky".这种情况下,信息与信息需要使用的地方的间隔比较小,RNN可以学习到过去的信息。

但是也存在这样的情况:我们需要更多的上下文信息。我们考虑这样一句话"I grew up in France,…,I speak fluent French".同样我们还是预测最后一个单词"French".最近的上文信息提示我们,最后一个单词可能是一种语言。但是要确定具体是哪种语言,我们需要更加靠前的上文信息,“France”。也就是,相关信息出现的点与需要信息的点,可能相隔的较大。

不幸的是,随着间隔的增大,RNN学习难度也在增大。

理论上,RNN是绝对可以处理这种"长期依赖"的问题。比如可以通过人工挑选参数的方式处理例子中的问题。但是实际当中,RNN不太能自动学习到这些参数。Hochreiter和Bengio曾深入的研究过此问题,发现了一些造成学习困难的基本层面的原因。

幸好,LSTM没有这个问题。

LSTM

长短期记忆网络,是一种特殊的RNN,能够学习到长期的依赖信息。由Hochreiter & Schmidhuber提出,之后很多人进行了修改和改进。在很多问题上表现很好,广泛被使用。

普通是循环神经网络都由一种网络的链式结构组成,其中的网络结构比较简单,比如就是一个tanh层,如下图:

LSTM也是这种链式结构的,但是其中重复的网络结构不一样,结构比较复杂:

不用担心网络结构的细节,接下来我会一一讲解。讲解之前,我们来先来熟悉一下一些符号的含义:

LSTM核心思想

LSTM的关键点在于网络状态,被称为细胞状态(cell state),横向贯穿整个网络的一条线,表示细胞状态的传递和变化。细胞状态就像一条传送带,贯穿整个网络,并且只有较少的线性交互。信息很容易通过这条传送带传输下去。

通过一种称为门的网络结构,LSTM可以往细胞状态里添加和移除信息。

门是一种控制信息通过的方法。它由sigmoid网络层的输出和点乘操作组成。


sigmoid的输出在0到1之间,控制信息的通过量。0表示不让信息信息通过,1表示让全部信息通过。

LSTM有三种门,控制细胞状态的变化和传递。

LSTM结构

LSTM的第一个步就是决定从细胞状态里丢弃掉哪些信息。这步通过"遗忘门"来实现。遗忘门输入为ht−1h_{t-1}ht−1​和xtx_txt​,为细胞状态Ct−1C_{t-1}Ct−1​的每个数输出一个0到1之间的数,1表示保留全部信息,0表示全部丢弃。

回到我们的语言模型的例子:预测一句话中的最后一个单词。这个问题中,细胞状态可能会包含当前主语性别的信息。当遇到一个新主语的时候,我们需要遗忘掉旧主语的性别信息。

第二步是要决定往细胞状态里添加哪些信息。通过两步计算废除,首先称为输入门的sigmoid网络决定更新哪些信息。然后,tanh层输出一个新的候选值C~t\tilde C_tC~t​。最后结合二者输出一个更新值。

现在是时候更新旧的细胞状态Ct−1C_{t-1}Ct−1​了,我们将旧的状态Ct−1C_{t-1}Ct−1​乘以ftf_tft​,遗忘掉需要遗忘的信息。然后加上it∗C~ti_t*\tilde C_tit​∗C~t​,这是新的候选细胞状态,乘以需要更新的量。

最后,我们需要决定输出什么。输出基于当前的细胞状态,但是细胞状态值要经过一次过滤。首先通过一个sigmoid网络学习细胞状态的哪些部分需要输出,然后我们让细胞状态通过tanh网络层(使得输出在-1到1之间)之后,与sigmoid网络输出进行点乘运算。

回到语言模型的例子:预测语句最后一个单词的例子,我们可能需要输出主语关于谓词的相关信息。比如需要输出主语是单数还是复数的信息,决定谓词用单数形式还是复数形式:

##LSTM的变体网络

目前为止我描述的都是普通的LSTM。并不是所有的LSTM都跟上文书描述的结构一模一样的。实际上,所有涉及LSTM的论文中,都对LSTM做了写改动。差别不是很大,但是也很值得一提。

Ger & Schmidhuber提出的一种LSTM的变体,是比较流行的变体之一。与普通LSTM相比,添加了偷窥连接(peehole connections).也就是让遗忘门、输入门、输出门看到细胞状态:

一些论文里也会只给其中某几个门添加偷窥连接,而不是全部添加。

另一个变体是使用成对的遗忘和输入门。一起决定遗忘和输入门的值,而不是分开决定。我们只遗忘需要添加的信息,我们只添加需要遗忘的信息:

另一个引人注目的变体是GRU(Gated Recurrent Unit),由Cho 2014年提出。将遗忘门和输入门结合到一起,称为更新门。并且结合了细胞状态和输出状态值。最后的模型比标准的LSTM简单:

以上是少数最著名的LSTM变体。还有很多其他变体,并且还有很多其他克服长期依赖问题的模型。

哪种模型最好呢?他们之间的差异关键吗?Greff 2015年对流行的变体做了一个比较,发现他们效果相差无几。Jozefowicz 2015测试了超过1万种RNN的结构,发现在特征的任务上某些模型优于LSTM模型。

深度模型(一):LSTM相关推荐

  1. 浅谈深度学习:LSTM对股票的收益进行预测(Sequential 序贯模型,Keras实现)

    浅谈深度学习:LSTM对股票的收益进行预测(Sequential 序贯模型,Keras实现) 总包含文章: 一个完整的机器学习模型的流程 浅谈深度学习:了解RNN和构建并预测 浅谈深度学习:基于对LS ...

  2. 多种深度模型实现手写字母MNIST的识别(CNN,RNN,DNN,逻辑回归,CRNN,LSTM/Bi-LSTM,GRU/Bi-GRU)

    多种深度模型实现手写字母MNIST的识别(CNN,RNN,DNN,逻辑回归,CRNN,LSTM/Bi-LSTM,GRU/Bi-GRU 1.CNN模型 1.1 代码 1.2 运行结果 2.RNN模型 2 ...

  3. 【深度学习】LSTM神经网络解决COVID-19预测问题(二)

    [深度学习]LSTM神经网络解决COVID-19预测问题(二) 文章目录 1 概述 2 模型求解和检验 3 模型代码 4 模型评价与推广 5 参考 1 概述 建立一个普适性较高的模型来有效预测疫情的达 ...

  4. 【深度学习】LSTM神经网络解决COVID-19预测问题(一)

    [深度学习]LSTM神经网络解决COVID-19预测问题 文章目录 1 概述 2 数据分析 3 SIR模型和LSTM网络的对比 4 LSTM神经网络的建立 5 参考 1 概述 我们将SIR传播模型和L ...

  5. 【深度学习】深度学习之LSTM

    LSTM是深度学习领域一个非常受欢迎的模型,它被用以解决各种各样的问题.在交通领域,LSTM被广泛应用于道路.航空.铁路等各个方面的研究,例如基于LSTM建立车辆跟驰模型,利用LSTM进行短期交通流预 ...

  6. 从DSSM语义匹配到Google的双塔深度模型召回和广告场景中的双塔模型思考

    ▼ 相关推荐 ▼ 1.基于DNN的推荐算法介绍 2.传统机器学习和前沿深度学习推荐模型演化关系 3.论文|AGREE-基于注意力机制的群组推荐(附代码) 4.论文|被"玩烂"了的协 ...

  7. 深度模型框架(持续更新)

    文章目录 1.翻译 1.1.快照 1.2.详解 2.reading comprehension 快照 详解 展望 在各个领域,在一项技术渐于成熟的时候,就会摒弃掉一些底层枯燥的东西,一步步抽象出更加高 ...

  8. 深度模型的日志异常检测,还有谁不会?

    摘要:日志异常检测的核心是借助AI算法自动分析网络设备日志来发现并定位故障,根据送入检测模型的数据格式,日志异常检测算法模型分为序列模型和频率模型,其中序列模型又可以分为深度模型和聚类模型. AIOp ...

  9. 深度学习之LSTM案例分析(三)

    #背景 来自GitHub上<tensorflow_cookbook>[https://github.com/nfmcclure/tensorflow_cookbook/tree/maste ...

最新文章

  1. AI 一分钟 | 谷歌发布72量子比特处理器,或将为机器学习应用提供加速;百度已经发起对景驰撤诉,但不会对王劲撤诉
  2. 窗体的扩展样式GWL_EXSTYLE: 用于SetWindowLong
  3. OpenCV 色彩空间的改变
  4. [转载]input[type=file]在移动端各浏览器无法适配打开相机的问题。
  5. android 中开启线程的方法,android中开启的循环线程
  6. 读书笔记之《The Art of Readable Code》Part 2
  7. 厉害了!这里藏着通关学霸的秘籍
  8. Java实现复数Complex的加减乘除运算、取模、求幅角角度
  9. mysql l日志分析,MySQL的截取与分析日志文件
  10. QWidget::size()和QResizeEvent::size()不一定相同!
  11. window服务器上搭建git服务,window server git!!!
  12. AI来袭程序猿是否该学习Python了
  13. 个人学习机器学习笔记--
  14. 查看linux的ubuntu版本,查看Ubuntu版本
  15. html日志网页,以HTML为表现的日志记录组件
  16. MAC 常用终端命令
  17. 我国有关信息方面的法律法规
  18. 任正非最新讲话:18年华为没有1项原创发明
  19. GoJS-FlowChart样例代码分析
  20. 【编程珠玑】陪着奶猫看看书--《编程珠玑》第一章

热门文章

  1. Golang观察者设计模式(十九)
  2. Redis容量预估工具
  3. Java位运算优化:位域、位图棋盘等
  4. 采访UI设计师Kiro
  5. STM32共阳数码管编程分享
  6. 任正非创业期间得抑郁症:研发失败我就跳楼
  7. 观察者模式Observer -- 深入理解
  8. 将服务器的EDT(美国时间)或者EST(英国时间)修改为CST(中国时间)
  9. c语言棋盘光标怎么删除,删除光标前的字符按什么键
  10. Jetson nano串口的使用——UART