什么是RNN网络?

RNNs背后的主要目的是要使用序列本身的顺序信息。在传统的神经网络里,我们假设输入(输出)是条件独立的。但是,在许多任务里,这是个非常非常差的假设。如果你想预测一个序列中的下一个单词是什么,你最好知道它的前一个词是什么。RNNs被叫做循环神经网络是因为它对于序列中的每个元素都做相同的操作,输出会依赖于之前的计算。用另一种说法,RNNs拥有了一个能捕获到目前为止所有计算的结果的记忆单元。从理论上讲,RNNs能使用任意长度的序列信息,但是,在实践中RNNs被限制到只能回溯几步(稍后再讨论这个问题)。下面是一个典型的RNN。

\[A recurrent neural network and the unfolding in time of the computation involved in its forward\\computation. Source: Nature\]

上面的示意图展示了一个RNN展开为整个网络时的样子。通过展开图,我们简单的认为我们写出了全完序列的网络结构。举个例子,如果我们关心的序列是由5个词组成的句子,网络将被展开为一个5层的神经网络,每层表示一个词。计算RNN时的公式如下。

  • \(x_t\) 是第\(t\) 步时间下的输入。举个例子,\(x_1\) 可以是一个one-hot 编码的向量,相当于句子的第二个词。
  • \(x_t\) 第\(t\)步的隐藏状态,\(s_t\)是基于之前的隐藏状态和当前输入计算出来的:\(s_t=f(Ux_t + Ws_{t-1})\),f通常是一个非线性函数,例如:ReLU函数。\(s_{t-1}\)是需要计算的第一个隐藏状态,通常全部初始化为0.
  • \(o_t\)是第\(t\)步的输出。例如:如果我们想预测一个句子中的下一个词是什么,\(o_t\)将会是一个关于我们词典的概率向量。\(o_t=\mathrm{softmax}(Vs_t)\)

这里还有一些需要注意的点:

  • 你可以把隐藏状态\(s_t\)当做是网络的记忆单元。\(s_t\)捕获了当前步之前所产生的信息。输出\(o_t\)只是根据第\(t\)步的记忆单元来计算。如上面简要提到的,在实践是它(记忆单元)是比较复杂的,因为\(s_t\)通常无法捕获到很多步之前的信息。
  • RNN不像每层都使用不同参数的传统神经网络,RNN所有步共享相同的参数(上面的 U,V,W)。这反映了一个事实,每一步我们都做同样的任务,只有输入不同。这大大减少了我们需要学习的参数数量。
  • 上面的示意图每个步骤均有输出,但对于一些任务来说,这个也许不是必要的。例如,当我们预测一个句子的情感的时候,我们可能只关注最后的输出,而不是每个词的情感。相似的,我们也不需要在每个步骤都有输入。RNN的主要特征是捕获了一个序列一些信息的隐藏状态。

RNNs 能做什么?

RNNs 在很多自然语言处理的任务中取得了很大成功。在此刻我要提醒你,最常使用的RNNs是LSTMs,LSTMs相比于普通的RNNs能更好的捕获到长距离依赖。但是不要担心,LSTMs大体上与我们将要在这个课上开发的RNN是一样的,LSTMs只是用一个不同的方法来计算隐藏状态。我们在之后会发文中会包含LSTMs细节。下面是一些RNN在自然语言处理上的应用的例子。

未完待续。。。

本文是翻译自wildml的一篇RNN导读文章。本人英语水平有限,仅共参考学习。

RNNs的更多相关文章

  1. 开始学习深度学习和循环神经网络Some starting points for deep learning and RNNs

    Bengio, LeCun, Jordan, Hinton, Schmidhuber, Ng, de Freitas and OpenAI have done reddit AMA's.  These ...

  2. RNNs在股票价格预测的应用

    RNNs在股票价格预测的应用 前言 RNN和LSTMs在时态数据上表现特别好,这就是为什么他们在语音识别上是有效的.我们通过前25天的开高收低价格,去预测下一时刻的前收盘价.每个时间序列通过一个高斯分 ...

  3. PP: Shallow RNNs: a method for accurate time-series classification on tiny devices

    Problem: time series classification shallow RNNs: the first layer splits the input sequence and runs ...

  4. Recurrent Neural Network系列1--RNN(循环神经网络)概述

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

  5. CNN for NLP (CS224D)

    斯坦福课程CS224d: Deep Learning for Natural Language Processing lecture13:Convolutional neural networks - ...

  6. (转)The Neural Network Zoo

    转自:http://www.asimovinstitute.org/neural-network-zoo/ THE NEURAL NETWORK ZOO POSTED ON SEPTEMBER 14, ...

  7. (转)LSTM NEURAL NETWORK FOR TIME SERIES PREDICTION

    LSTM NEURAL NETWORK FOR TIME SERIES PREDICTION Wed 21st Dec 2016   Neural Networks these days are th ...

  8. (译) Conditional Variational Autoencoders 条件式变换自编码机

    Conditional Variational Autoencoders --- 条件式变换自编码机 Goal of a Variational Autoencoder: 一个 VAE(variati ...

  9. RNN 入门教程 Part 4 – 实现 RNN-LSTM 和 GRU 模型

    转载 - Recurrent Neural Network Tutorial, Part 4 – Implementing a GRU/LSTM RNN with Python and Theano ...

随机推荐

  1. Javascript中暂停功能的实现

    <script language="javascript"> /*Javascript中暂停功能的实现 Javascript本身没有暂停功能(sleep不能使用)同时 ...

  2. 【BZOJ】1030: [JSOI2007]文本生成器(递推+ac自动机)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1030 其实做了1009也不会感到很难了,无非将kmp变成了ac自动机. 设f[i,j]表示前i个串当 ...

  3. C语言0长度数组(柔性数组)

    0长度数组,又称为柔性数组(flexible array).通经常使用来实现变长数组.常见于TLV(type-length-value)的数据结构中. 在标准 C 和 C++ 中,不同意用 0 长度数 ...

  4. Invalid property 'driverClassName' of bean class [com.mchange.v2.c3p0.ComboPooledDataSource]

    spring配置文件中配置c3p0错误,错误原因在于c3p0连接池与DBCP连接池在驱动.连接.数据库用户名这些属性名称的差别

  5. PHP后台代码解决跨域问题

      在前端里面,解决跨域的时候总显得那么的恶心,什么jsonp啊,ajax啊,CORS啊什么的,总觉得是在钻空子进行跨域,其实在PHP文件里面只需要加一段代码就可以跨域了,前端你该怎么写还是怎么写,p ...

  6. c#基础 第二讲

    判断一个人的体重是否为标准体重 计算公式:男生:体重(kg)-身高+100=±3(在此范围内为标准体重) 女生:体重(kg)-身高+110=±3 using System; using System. ...

  7. java利用反射机制获取list中的某个字段并以list形式返回

    public static<T> List<Object> listToList(Collection<T> list,String fieldName) thro ...

  8. nvm-windows 安装后,node 命令报错

    下载地址: https://github.com/coreybutler/nvm-windows/releases 我是点下面这个直接安装的: 配置文件,我都是习惯在软件目录下建个 files 文件夹 ...

  9. Groovy操作符

    Groovy操作符 这一篇简单介绍一下Groovy中的操作符. 算数操作符 groovy支持java中的所有操作符,下面只列举一些groovy特有的: ** power运算符,也叫次方. assert ...

  10. Python全栈day18(三元运算,列表解析,生成器表达式)

    一,什么是生成器 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他数据类型需要调用自己内置的__iter__方法),所以生成器是可迭代对象. 二,生成器分类在python中的表现形式 1 ...