作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明。谢谢!

本文翻译自 RECURRENT NEURAL NETWORKS TUTORIAL, PART 1 – INTRODUCTION TO RNNS

Recurrent Neural Networks(RNNS) ,循环神经网络,是一个流行的模型,已经在许多NLP任务上显示出巨大的潜力。尽管它最近很流行,但是我发现能够解释RNN如何工作,以及如何实现RNN的资料很少。这个系列将会涵盖如下几个主题,

  • RNN概述
  • 利用Python,Theano实现RNN
  • 理解RNN的BPTT算法和梯度消失
  • 利用Python,Theano实现GRU或LSTM

我们将会实现一个 基于语言模型的循环神经网络 。语言模型有两个应用。第一,基于句子在真实世界中出现的可能性,语言模型可以让我们对任意的句子进行打分。这个就给予我们一种度量语法和语义正确性的方式。语言模型通常应用在机器翻译系统中。第二,语言模型允许我们生成新的文本(我认为这是一个更酷的应用)。在莎士比亚的作品上训练一个语言模型,允许我们生成莎士比亚风格的文本。Andrej Karpathy所写的 blog 显示了基于RNN的字符级的语言模型的能力。

我假设你已经在一定程度上熟悉基本的神经网络。如果你对基本的神经网络还不熟悉,你可以先看这篇blog IMPLEMENTING A NEURAL NETWORK FROM SCRATCH IN PYTHON – AN INTRODUCTION , 它将会让你理解非循环网络背后的思想和具体实现。

1 什么是循环神经网络?

循环神经网络背后的思想就是使用序列信息。在传统的神经网络中,我们认为所有的输入(和输出)彼此之间是互相独立的。但是对于很多任务而言,这个观点并不合适。如果你想预测句子中的下一个词,你最好需要知道它之前的词。循环神经网络之所以称之为循环,就是因为它们对于序列中每个元素都执行相同的任务,输出依赖于之前的计算。另一种思考循环神经网络的方法是,它们有一个记忆,记忆可以捕获迄今为止已经计算过的信息。理论上,循环神经网络可以利用任意长度序列的信息,但是,在实际中,它们仅能利用有限长步(具体原因会在后续解释)。下面就是一个典型的循环神经网络。

上图展示了一个循环神经网络展开为全网络。通过展开,我们简单的认为我们写出了全部的序列。例如,如果我们关心的序列是一个有5个词的句子,那么这个网络就会展开为5层的神经网络,一层对应一个词。循环神经网络中管理计算的公式如下所示,

  • \(x_{t}\) 是时刻t的输入。例如, \(x_{1}\) 可以是一个one-hot向量,对应句子中第二个词;
  • \(s_{t}\) 是时刻t的隐层状态。它是网络的记忆。\(s_{t}\) 基于前一时刻的隐层状态和当前时刻的输入进行计算, \(s_{t} = f(U x_{t} + W s_{t-1})\) 。函数f通常是非线性的,如tanh或者ReLU。\(s_{-1}\) 被要求为计算第一个隐藏状态,通常被初始化为全0;
  • \(o_{t}\) 是时刻t的输出。例如,如果我们想预测句子a的下一个词,它将会是一个词汇表中的概率向量,\(o_{t} = softmax(Vs_{t})\) ;

这里有一些注意事项,如下:

  • 你可以将隐层状态\(s_{t}\) 认为是网络的记忆。\(s_{t}\) 可以捕获之前所有时刻发生的信息。输出 \(o_{t}\) 的计算仅仅依赖于时刻t的记忆。上面已经简略提到,实际中这个过程有些复杂,因为 \(s_{t}\) 通常不能获取之前过长时刻的信息;
  • 不像传统的深度神经网络,在不同的层使用不同的参数,循环神经网络在所有步骤中共享参数(U、V、W)。这个反映一个事实,我们在每一步上执行相同的任务,仅仅是输入不同。这个机制极大减少了我们需要学习的参数的数量;
  • 上图在每一步都有输出,但是根据任务的不同,这个并不是必须的。例如,当预测一个句子的情感时,我们可能仅仅关注最后的输出,而不是每个词的情感。相似地,我们在每一步中可能也不需要输入。循环神经网络最大的特点就是隐层状态,它可以捕获一个序列的一些信息;

2 循环神经网络可以做什么?

循环神经网络在很多NLP任务中显示出巨大的成功。在这里,我需要提醒一下,大部分循环神经网络是 LSTM ,它比普通的循环神经网络可以更好的捕获长期依赖。不用担心,LSTM本质上依然是循环神经网络,它仅仅是在计算隐层状态时采用一种不同的方式,我们将会在后续的文章中详细介绍它。下面是一些循环神经网络应用到NLP的例子。

2.1 语言模型和文本生成

给定一个词序列,我们想要预测每个词在给定前面的词的条件概率。语言模型允许我们度量一个句子的可能性,这是机器翻译的重要输入(高概率的句子通常是正确的)。预测下一个词的副产品就是我们可以得到一个生成模型,这允许我们通过在输出概率中采样来生成下一个文本。依赖于我们的训练数据,我们可以生成 各种类型的文本 。在语言模型中,我们的输入通常是一个词序列(例如,编码为one-hot向量),输出就是待预测的词序列。当训练网络时,我们设置 \(o_{t} = x_{t+1}\) ,因为,我们想要时刻t的输出为正确的下一个词。

下面是一些关于语言模型和文本生成的文献,

Recurrent neural network based language model

Extensions of Recurrent neural network based language model

Generating Text with Recurrent Neural Networks

2.2 机器翻译

机器翻译类似于语言模型,输入是一个源语言的词序列(例如,德语)。我们想输出一个目标语言的词序列(例如,英语)。关键的区别就是我们的输出只能在我们已经看见整个输入之后开始,因为,我们翻译句子的第一个词可能需要从整个输入句子获取信息。

下面是一些关于机器翻译的文献,

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

2.3 语音识别

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

下面是一些关于语音识别的文献,

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

2.4 生成图像描述

结合卷积神经网络,循环神经网络也作为模型的一部分,用于对无标注图像 生成描述。让人惊讶的是它是如何工作的。组合模型甚至可以将生成的文字与图像上的特征进行对齐。


针对生成图像描述的深度图像-语义对齐,来源:http://cs.stanford.edu/people/karpathy/deepimagesent/

3 循环神经网络的训练

循环神经网络的训练类似于传统神经网络的训练。我们也使用反向传播算法,但是有所变化。因为循环神经网络在所有时刻的参数是共享的,但是每个输出的梯度不仅依赖当前时刻的计算,还依赖之前时刻的计算。例如,为了计算时刻 t = 4 的梯度,我们还需要反向传播3步,然后将梯度相加。这个被称为Backpropagation Through Time(BPTT)。如果你不能完全理解这个,不要担心,我们会在后面的文章详细地介绍它。现在,我们仅仅需要了解到利用BPTT算法训练出来的普通循环神经网络很难学习长期依赖(例如,距离很远的两步之间的依赖),原因就在于梯度消失/发散问题。目前已经有一些机制来解决这些问题,特定类型的循环神经网络(如LSTM)专门用于规避这些问题。

4 循环神经网络的扩展

近年来,研究者已经提出了更加复杂的循环神经网络,用以解决普通循环神经网络的缺陷。我们将会在后续的文章中详细介绍,但是,我想在这部分大致介绍一些,以便你们可以熟悉这些模型。

4.1 双向循环神经网络

Bidirectional RNNs(双向循环神经网络)基于这样一种思想,时刻t的输出不仅依赖序列中之前的元素,也依赖于后续的元素。例如,要预测序列中缺失的词,你会看一下左边和右边的上下文。双向循环神经网络非常简单。它们仅仅是两个循环神经网络堆在一起。输出是基于两个循环神经网络的隐层状态进行计算的。

双向循环神经网络的结构如下所示。

4.2 深度(双向)循环神经网络

Deep (Bidirectional) RNNs(深度(双向)循环神经网络)非常类似于双向循环神经网络,区别在于,每一时刻,网络有多层。实际上,这个可以让网络具备更强的学习能力(当然,也需要更多的训练数据)。

深度循环神经网络的结构如下所示。

4.3 LSTM

最近,LSTM网络非常流行,我们之前已经简单提到。LSTM在架构上与循环神经网络并没有本质的不同,但是它们计算隐层状态的函数会有所不同。LSTM中的记忆称为cell,你可以将它视为以之前的状态 \(h_{t-1}\) 和当前的输入 \(x_{t}\) 作为输入的一个黑盒。在内部,cell决定记忆中哪些保留(哪些删除)。然后,之前的状态,当前的记忆和输入进行组合。这类单元在捕获长期依赖上被证明是非常有效的。刚开始,LSTM会令人感到困惑,但是,如果你感兴趣,你可以看这篇博客 Understanding LSTM Networks

5 结论

到目前为止,我希望你已经对什么是循环神经网络以及它们能够做什么有一个基本的了解。在下一篇文章中,我们将会使用Python和Theano实现循环神经网络语言模型的第一个版本。

6 Reference

RECURRENT NEURAL NETWORKS TUTORIAL, PART 1 – INTRODUCTION TO RNNS

The Unreasonable Effectiveness of Recurrent Neural Networks

Recurrent Neural Network系列1--RNN(循环神经网络)概述的更多相关文章

  1. Recurrent Neural Network系列2--利用Python,Theano实现RNN

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  2. Recurrent Neural Network系列3--理解RNN的BPTT算法和梯度消失

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 这是RNN教程的第三部分. 在前面的教程中,我们从头实现了一个循环 ...

  3. Recurrent Neural Network系列4--利用Python,Theano实现GRU或LSTM

    yi作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORK ...

  4. Recurrent Neural Networks(RNN) 循环神经网络初探

    1. 针对机器学习/深度神经网络“记忆能力”的讨论 0x1:数据规律的本质是能代表此类数据的通用模式 - 数据挖掘的本质是在进行模式提取 数据的本质是存储信息的介质,而模式(pattern)是信息的一 ...

  5. 循环神经网络(Recurrent Neural Network,RNN)

    为什么使用序列模型(sequence model)?标准的全连接神经网络(fully connected neural network)处理序列会有两个问题:1)全连接神经网络输入层和输出层长度固定, ...

  6. 4.5 RNN循环神经网络(recurrent neural network)

     自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.1  RNN循环神经网络 ...

  7. Recurrent Neural Network(循环神经网络)

    Reference:   Alex Graves的[Supervised Sequence Labelling with RecurrentNeural Networks] Alex是RNN最著名变种 ...

  8. Recurrent Neural Network(递归神经网络)

    递归神经网络(RNN),是两种人工神经网络的总称,一种是时间递归神经网络(recurrent neural network),另一种是结构递归神经网络(recursive neural network ...

  9. Recurrent neural network (RNN) - Pytorch版

    import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms # ...

随机推荐

  1. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  2. SQL Server内存遭遇操作系统进程压榨案例

    场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁. 探索: 我决定来查一下,究竟是什么在作怪,我排查的 ...

  3. Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...

  4. JQuery 选择器

    选择器是JQuery的根基,在JQuery中,对事件的处理,遍历DOM和AJAX操作都依赖于选择器.如果能够熟练地使用选择器,不仅能简化代码,而且还可以事半功倍. JQuery选择器的优势 1.简洁的 ...

  5. WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目中有1000万条历史案卷,为某地方坐标系数据,我们的真实 ...

  6. 编写自己的PHP MVC框架笔记

    1.MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). ...

  7. C#~异步编程再续~await与async引起的w3wp.exe崩溃-问题友好的解决

    返回目录 关于死锁的原因 理解该死锁的原因在于理解await 处理contexts的方式,默认的,当一个未完成的Task 被await的时候,当前的上下文将在该Task完成的时候重新获得并继续执行剩余 ...

  8. BPM生产安全管理解决方案分享

    一.方案概述生产安全管理是企业生产管理的重要组成部分,组织实施好企业安全管理规划.指导.检查和决策,保证生产处于最佳安全状态是安全管理的重要内容和职责.H3 BPM企业生产安全管理解决方案是一套专门为 ...

  9. PostGIS(解压版)安装

    1.软件下载 postgresql-9.6.1-1-windows-x64-binaries.zip https://www.postgresql.org/download/windows/ post ...

  10. 免费公开课,讲解强大的文档集成组件Aspose,现在可报名

    课程①:Aspose.Total公开课内容:讲解全能型文档管理工具Aspose.Total主要功能及应用领域时间:2016-11-24 14:30 (暂定)报名地址:http://training.e ...