递归神经网络教程(1)-RNN介绍

Source: http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/

递归神经网络(RNNs)作为一种流行的模型,已经在NLP问题上显示巨大的应用前景。尽管最近很流行,但是对RNNs原理以及如何实施进行全面解释的资源却很少。因此就有了这个教程。这个教程将包含以下四个部分:

  1. RNNs介绍
  2. 使用Python和Theano实现RNN
  3. 理解BPTT算法和梯度消失问题
  4. GRU和LSTM的实现

作为本教程的一部分,我们将实现一个基于RNN的语言模型。这个语言模型的应用是双重的:首先,使用它我们可以基于现实可能性对任意句子评分。这也可以用来衡量句子语法与语义的正确性。这样的模型通常也是机器翻译系统的一部分。第二点,使用这个语言模型可以生成新的文本(这个应用会更酷)。比如说,我们使用莎士比亚作品训练模型将能生成与莎士比亚相似的文本。Andrej Karpathy的博客给出了基于RNNs的字符级语言模型可以实现的很多任务。

这里假定你已经对神经网络基础有一定了解。如果没有,你可以阅读我写的这个博客,这个博客给出了非递归网络的原理与实现。

RNNs是什么?

RNNs的背后原理是利用序列信息。在传统的神经网络中,我们假定所有的输入与输出都是相互独立的。但是对于很多问题,这是一个非常糟糕的想法。如果你想预测一个句子中的先一个单词,你最好知道它之前的单词。RNNs被称为递归神经网络是因为它对一个序列中的每个节点执行相同的任务,而且输出依赖于前面的计算。理解RNNs的另外一个方式是认为RNNs存在一个“记忆”,它能够捕获已经计算出的信息。理论上,RNNs可以利用任意长序列中的信息,但是实际上它们仅仅能够利用前面极少步的信息(后面会解释)。经典的RNNs如下所示:


递归神经网络以及它在时间步长上展开的前向计算图(来源:Nature)

上面的图将RNNs展开成一个全网络。通过展开,我们得到了全序列的网络。例如,如果我们研究的是5单词的句子序列,网络将被展开成5层神经网络,每一层对应一个单词。RNNs计算图中的公式如下:

  • xtx_t是在tt步的输入。例如,x1x_1对应是句子序列中的第二个单词的one-hot词向量。
  • sts_t是在tt步的隐含层状态。它是网络的“记忆”。sts_t通过上一步的隐含层状态与当前步的输入来进行计算:st=f(Uxt+Wst−1)s_t=f(Ux_t + Ws_{t-1})。函数ff通常是非线性的,比如tanh和ReLU。为了计算第一步的隐含层状态,必须要知道s−1s_{-1},通常它被全部初始化为0。
  • oto_t是在tt步的的输出。例如,如果我们想预测句子中的下一个单词,它将是词汇表上的一个概率向量:ot=softmax(Vst)o_t = \mathrm{softmax}(Vs_t)。

有几点需要注意:

  • 你可以将sts_t看做网络的记忆。sts_t捕获了所有前面步中的计算信息。而输出oto_t的计算仅仅利用在tt步的记忆。正如前面提及的那样,实际上处理sts_t有点复杂,因为通常它不能捕获很多前面时间步的信息。
  • 传统的深层网络每层的参数是不同的,但是RNNs所有时间步上共享相同的参数(U,V,WU, V, W)。这说明我们每个时间步执行相同的任务,仅仅是输入不同。这也大大减少了我们需要学习的参数总数。
  • 在上面的图中每个时间步都有输出,但是对于某些任务这可能不是必要的。例如,当做句子情感分析时,我们可能只关心最终的输出,而不是每个时间步的输出。同样,我们可能不需要在每个时间步都有输入。RNN的主要特征是它的隐含层状态能够捕获一个序列的一些信息。

RNNs可以做什么?

RNNs在NLP问题上已经取得了很大成功。此时,必须要说明的是最常用的RNNs模型是LSTMs,相比基本RNNs,它能够更好地捕获长期依赖。但是不要担心,LSTMs本质上与RNNs相同,在之后我们将会介绍,它们仅仅使用了一种计算隐含层状态的不同方法。后面的教程会详细介绍LSTMs。这里列出RNNs在NLP上的一些应用实例(并不是全部):

语言建模和生成文本

给定一个单词序列,我们想预测每个单词在给定前面的单词后的概率。语言模型允许我们衡量句子的可能性,这是机器翻译的一个重要输入(由于高概率的句子一般正确)。能预测下一个单词带来一个好处是我们可以得到一个生成模型,这允许我们可以通过输出概率进行抽样而生成新的文本。训练数据不同,我们可以得到各种各样的模型。语言建模的输入通常是单词序列(例如使用one-hot向量编码),输出是预测单词的概率。训练网络时,我们令ot=xt+1o_t=x_{t+1},因为我们希望每一步的输出恰好是实际的下一个单词。

语言建模和生成文本的相关论文如下:

  • Recurrent neural network based language model型
  • Extensions of Recurrent neural network based language model
  • Generating Text with Recurrent Neural Networks

机器翻译

机器翻译与语言建模的相同之处是源语言(比如德语)的输入也是单词序列。我们想要的输出是对应目标语言(比如英语)的单词序列。一个关键差别在于当我们看到了所有的输入后才开始输出,因为在翻译的句子中的第一个单词要依赖于从整个输入序列中捕获的信息。


递归神经网络用于机器翻译(来源:http://cs224d.stanford.edu/lectures/CS224d-Lecture8.pdf)

机器翻译的相关论文如下:

  • A Recursive Recurrent Neural Network for Statistical Machine Translation
  • Sequence to Sequence Learning with Neural Networks
  • Joint Language and Translation Modeling with Recurrent Neural Networks

语音识别

输入一个声波的声信号序列,我们可以预测一个语音序列以及它们的概率。

语音识别方面的相关论文如下:

  • Towards End-to-End Speech Recognition with Recurrent Neural Networks

生成图像描述

结合卷积神经网络,RNNs已经被用于无标记图像描述生成模型的一部分。很惊奇的是其实现的效果。组合模型甚至将生成的文字描述与图像中的特征对其。


用于生成图像描述的深层视觉语义对齐(来源:http://cs.stanford.edu/people/karpathy/deepimagesent/)

训练RNNs

训练RNNs与训练传统神经网络类似。我们同样使用反向传播算法(BP),但是需要一些变化。因为网络中的参数在所有的时间步上是共享的,每个输出的梯度不仅仅与当前时间步的计算相关,而且依赖于前面的时间步。比如,为了计算t=4t=4时的梯度我们必须反向传播到前面的33个时间步,然后总和这些梯度。这被成为通过时间的反向传播(BPTT)。如果这些介绍还很难理解,不用担心,后面会有一整篇文章详细介绍BPTT。现在,你要知道普通RNNs通过BPTT训练很难学习到长期依赖(比如在很远时间步间的依赖),这是由于梯度消失或者爆炸问题。存在一些方法来解决这些问题,还有些特定的RNNs(如LSTMs)是专门用来解决这类问题。

RNN扩展

多年来,研究人员开发了更复杂的RNN来处理普通 RNN模型的一些缺点。我们将在后面的文章中更详细地介绍这些内容,而这部分只作为简要概述,以便你熟悉这些模型的分类。

双向RNNs基于这样的创想,即在时间tt的输出不仅取决于序列中的先前元素,而且还取决于未来元素。例如,要预测序列中缺少的单词,你要了解上下文。双向RNNs非常简单。它们只是两个RNN相互堆积而成。然后基于两个RNN的隐含层状态计算输出。

深层双向RNNs与双向RNNs相似,只是每个时间步是多层网络。因此实际上,它将有更高的学习能力(但是你也需要更大的训练样本)

LSTM网络在最近很受欢迎,我们在前面简单地介绍过。 LSTM与RNN基本架构相同,但是它们使用不同的函数来计算隐含层状态。 LSTM中的记忆称为单元,你可以将它们视为黑箱,其输入是前一状态ht−1h_ {t-1}和当前输入xtx_t。内部的这些单元决定记忆中哪些部分保存与遗忘。然后,它们组合先前的状态,当前记忆和输入。事实证明,这些类型的单元在捕获长期依赖性方面非常有效。 LSTMs在刚开始接触时非常难懂,但如果你感兴趣,你可以从这篇文章中学习到更多。

结语

目前为止一切都很好。我希望你已经对RNNs是什么以及能做什么有一个基本的了解。在下一篇文章我们将使用Python和Theano实现RNN语言模型的第一个版本。请在评论里提问题!

递归神经网络教程(1)-RNN介绍相关推荐

  1. 机器人写诗项目——递归神经网络(RNN)

    传统神经网络与递归神经网络对比 传统神经网络 递归神经网络 等价于 RNN网络细节 xt表示第t=1,2,3-step的input st为隐藏层的第t step的state,它是网络的记忆单元 st= ...

  2. 深度学习之递归神经网络

    文章目录 一.递归神经网络 1.什么是递归神经网络 2.RNN 3 Elman递归神经网络 4 长短时记忆网络LSTM 5 GRU门控制递归单元网络 一.递归神经网络 1.什么是递归神经网络     ...

  3. 早期递归神经网络初探

    博客初衷 现在我们常用递归神经网络如普通RNN,LSTM和GRU来处理时序的数据,所以本人以前一直将递归神经网络理解成诞生伊始就是用来处理时序数据的,然而一翻开wikipedia上RNN的介绍,发现自 ...

  4. tensorrt轻松部署高性能dnn推理_实战教程:TensorRT中递归神经网络的介绍(中文字幕)...

    NVIDIA TensorRT是一个高性能的深度学习推理优化器和运行时,它提供低延迟和高吞吐量.TensorRT可以从每个深度学习框架导入经过训练的模型,从而轻松地创建可以集成到大型应用程序和服务中的 ...

  5. 循环神经网络教程-第一部分 RNN介绍

    循环神经网络教程-第一部分 RNN介绍 循环神经网络(RNN)是非常流行的模型,它在许多NLP任务上都表现出了巨大的潜力.虽然它很流行,但是详细介绍RNN以及如何实现RNN的文章却很少.这篇教程旨在解 ...

  6. 基于递归神经网络(RNN)的口语理解(SLU)

    在之前的教程中,我们介绍了卷积神经网络(CNN)和keras深度学习框架. 我们用它们解决了一个计算机视觉(CV)问题:交通标志识别. 今天,我们将用keras解决一个自然语言处理(NLP)问题. 问 ...

  7. 深度学习与自然语言处理教程(9) - 句法分析与树形递归神经网络(NLP通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://www.showmeai.tech/article-d ...

  8. 深度学习之递归神经网络(Recurrent Neural Network,RNN)

    为什么有bp神经网络.CNN.还需要RNN? BP神经网络和CNN的输入输出都是互相独立的:但是实际应用中有些场景输出内容和之前的内 容是有关联的. RNN引入"记忆"的概念:递归 ...

  9. 递归神经网络(Recursive Neural Network, RNN)

    信息往往还存在着诸如树结构.图结构等更复杂的结构.这就需要用到递归神经网络 (Recursive Neural Network, RNN),巧合的是递归神经网络的缩写和循环神经网络一样,也是RNN,递 ...

最新文章

  1. asp.net学习笔记·将数据库中的数据保存在EXCEL文件中
  2. linux系统挂载(卸载)U盘(文件系统)
  3. Struts2解析FreeMarker模板中变量的顺序
  4. 在线ocr文字识别_PandaOCR:最佳免费 OCR 文字识别工具
  5. 设计模式工厂方法模式
  6. 谁才是2019最火爆的编程语言,看这篇就够了
  7. redis集群linux安装教程,linux下redis集群的原生安装方式部署
  8. 4 谐波_谐波的基础知识
  9. mediarecorder路径设置为localsocket_PR学习之旅:pr怎么才能定位和修改视频保存路径,操作很简单...
  10. macos 升级后 从前的 apachectl 错误, php 错误
  11. 探索python--Robert J. Brunner
  12. 拓端tecdat|R语言可视化:ggplot2冲积/桑基图sankey分析大学录取情况、泰坦尼克幸存者数据
  13. Leetcode. 回文字符串的分割和最少分割数
  14. VS2015+WDK10+Win10 Win7以上系统驱动发开环境搭建
  15. 基于51单片机的温度检测监测报警系统设计
  16. bleeding edge是什么意思
  17. Excel实现行列转换的三种方式
  18. CF1312E Array Shrinking(区间dp模板)
  19. linux编译openssl报错,cargo编译musl报错openssl
  20. 获取UNIX主机当前时间的函数

热门文章

  1. java计算机毕业设计BS高校教师考勤系统MyBatis+系统+LW文档+源码+调试部署
  2. 大学物理:CH3-振动
  3. ROS运行调用摄像头无法显示的解决办法
  4. 最新QQ和微信去水印小程序源码及搭建教程!
  5. Blender图解教程:手把手教你做一个马里奥金币 之 高模烘焙法(附模型下载 4月23日更新)
  6. 卷积神经网络 权值共享 是什么 简单易懂版
  7. 应届生面试要点总结(10)操作系统相关
  8. python获取计算股票技术指标DIF/DEA/MACD
  9. 个人客户网上银行开户
  10. 最新《Laravel5.4电商实战项目-联想商城》