循环神经网络(RNN, Recurrent Neural Networks)学习笔记:基础理论

原创 2016年11月12日 23:00:35
      RNN(Recurrent Neuron Network)是一种对序列数据建模的神经网络。继Bengio提出基于神经网络的概率语言模型并获得成功之后,Mikolov2010年提出利用RNN建模语言模型,2012Sundermeyer提出RNN的改进版本--LSTM。近两年,RNN开始在自然语言处理、图像识别、语音识别等领域迅速得到大量应用。因项目需要,近期重点学习研究了这几类学习模型,DNN、RNN、LSTM等,后面会陆续把学习总结记录并发布出来,首先为了自己加深印象,其次如果能对他人提供些许帮助就更好了。

  循环神经网络(Recurrent Neural Networks,RNNs)已经在众多自然语言处理(Natural Language Processing, NLP)中取得了巨大成功以及广泛应用,因此搜rnn能搜到大把资料,所以本文就仅从自己理解的角度简单介绍RNNs的原理以及如何实现,后面会专门再发一篇blog结合实际源码进行分析学习:

1. RNN的基本原理及推导

2. RNN神牛简介


1. RNN的基本原理及推导

        (1)什么是RNNs

  RNNs的目的使用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNNs之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNNs能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关,下图便是一个典型的RNNs:

有别于传统的机器学习模型中隐层单元彼此间是完全对等的,RNN中间的隐层从左向右是有时序的(阿拉伯人看是从右向左有时序,哈哈),因此隐层单元之间是要讲究先来后到的。再来一张局部特写照片:

        (2)RNNs是怎么工作的

       RNNs包含输入单元(Input units),输入集标记为{x0 ,x1 ,...,xt ,xt+1 ,...} ,用向量表示为X(t),而输出单元(Output units)的输出集则被标记为{y0 ,y1 ,...,yt ,yt+1 .,..} ,表示成向量形式为Y(t)。RNNs还包含隐藏单元(Hidden units),我们将其输出集标记为{ s0,s1 ,...,st ,st+1 ,...} ,表示成向量形式为S(t),这些隐藏单元完成了最为主要的工作。你会发现,在图中:有一条单向流动的信息流是从输入单元到达隐藏单元的,与此同时另一条单向流动的信息流从隐藏单元到达输出单元。在某些情况下,RNNs会打破后者的限制,引导信息从输出单元返回隐藏单元,这些被称为“Back Projections”,并且隐藏层的输入还包括上一隐藏层的状态,即隐藏层内的节点可以自连也可以互连。
  上图将循环神经网络进行展开成一个全神经网络。例如,对一个包含5个单词的语句,那么展开的网络便是一个五层的神经网络,每一层代表一个单词。对于该网络的计算过程如下:
       step1: x(t)表示第t时刻(t=1,2,3... )的输入,比如,x1为当前输入句子中第二个词的Vow(vector-of-word)向量; PS:使用计算机对自然语言进行处理,便需要将自然语言处理成为机器能够识别的符号,加上在机器学习过程中,需要将其进行数值化。而词是自然语言理解与处理的基础,因此需要对词进行数值化,词向量(Word Representation,Word embeding)[1]便是一种可行又有效的方法。何为词向量,即使用一个指定长度的实数向量v来表示一个词。有一种种最简单的表示方法,就是使用One-hot vector表示单词,即根据单词的数量|V|生成一个|V| * 1的向量,当某一位为一的时候其他位都为零,然后这个向量就代表一个单词。所以,训练之前要先建立词典(工作量也不小),于是出现了 一种更加有效的词向量模式,该模式是通过神经网或者深度学习对词进行训练,输出一个指定维度的向量,该向量便是输入词的表达。如word2vec(同样是神牛Mikolov在google时的成果)。
       step2:  s(t)为隐藏层的第t时刻的状态,它是网络的记忆单元。s(t)根据当前输入层的输出与上一步隐藏层的状态进行计算。s(t) =f(U*x(t) +W*s(t−1)),其中f()一般是非线性的激活函数,如tanh或ReLU或Sigmoid,在计算s(0)时,即第一个单词的隐藏层状态,需要用到s(−1),在实现中一般置为0向量即可;
       step3:o(t)是t时刻的输出,即下个单词的向量表示,o(t) =softmax(V*s(t)).
需要注意的是:可以认为隐藏层状态s(t)是网络的记忆单元,包含了前面所有步的隐藏层状态。而输出层的输出o(t)只与当前步的s(t)有关,在实践中,为了降低网络的复杂度,往往s(t)只包含前面若干步而不是所有步的隐藏层状态;在传统神经网络中,每一个网络层的参数是不共享的。而在RNNs中,每输入一步,每一层各自都共享参数U,V,W U,V,W。其反应者RNNs中的每一步都在做相同的事,只是输入不同,因此大大地降低了网络中需要学习的参数。

       (3)再讲一遍RNN是怎么工作的(详细推导)(这部分摘自神牛的ppt,感觉是各版本中最容易理解的,还是一手的信息最有价值)

  • Input layer w and output layer y have the same dimensionality as the vocabulary (10K - 200K);
  • Hidden layer s is orders of magnitude smaller (50 - 1000 neurons);
  • U is the matrix of weights between input and hidden layer, V is thematrix of weights between hidden and output layer
  • Without the recurrent weightsW, this model would be a bigram neuralnetwork language model。

上图里左上角的输入信号,在下面推导中用x(t)来表示,以免弄混。

        隐层的输出为s(t), s(t) = f (U*w(t) + W*s(t-1))                                                         (1)

        输出层的输出为y(t), y(t) = g (V*s(t))                                                                       (2)

其中,f(z) and g(z) are sigmoid and softmax activation,

                                    

训练的过程采用随机梯度下降(SGD),U、V、W每输入一个词就更新一次,更新采用反向传播算法,误差(这里称为交叉熵)的公式为式(4):

                                           

where d(t) is a target vector that represents the word w(t + 1)(encoded as 1-of-V vector)

系数矩阵V的更新:

                            

输出层梯度误差向隐层的传播为:

                             

where the error vector is obtained using function dh() that isapplied element-wise:

                             注:这里的x不是输入信号

系数矩阵U的更新,注意,这里的w(t)应为输入信号x(t):

                      

RNN还可以继续展开成上面的递归结构,相应地,隐层的误差传播函数也可以写成递归形式如下:

                            

权系数W的更新写成递归形式:

                                               

2.  RNN神牛简介(另附他在 SIGIR 2016 大会中神经信息检索研讨会(Neu-IR Workshop)上的演讲解说)

        学习RNN,不得不先提一下Tomas Mikolov,他是RNN建模语言模型的提出者(不是RNN的创造者),这位老兄应该是先在google做自然语言处理的研究, 作为Google Brain 团队的一员,参与了 word2vec 项目的开发2014年又去了facebook人工智能实验室担任研究科学家,他的 Facebook 个人页面上写到他的长期研究目标是「开发能够使用自然语言进行学习和与人类交流的智能机器」,有兴趣的同学可以在fb上加他为好友一起聊聊:-)

他在 SIGIR 2016 大会中神经信息检索研讨会(Neu-IR Workshop)上的演讲解说http://chuansong.me/n/464503442191

循环神经网络(RNN, Recurrent Neural Networks)介绍

循环神经网络(RNN, Recurrent Neural Networks)介绍   这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neura...
  • heyongluoyao8
  • heyongluoyao8
  • 2015年09月23日 13:24
  • 275867

递归神经网络(RNN)简介

在此之前,我们已经学习了前馈网络的两种结构——多层感知器和卷积神经网络,这两种结构有一个特点,就是假设输入是一个独立的没有上下文联系的单位,比如输入是一张图片,网络识别是狗还是猫。但是对于一些有明显的...
  • aws3217150
  • aws3217150
  • 2016年03月02日 17:27
  • 22444

循环神经网络与LSTM

1. 循环神经网络 ①基本结构 在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预...
  • u010089444
  • u010089444
  • 2017年02月21日 17:46
  • 10799

能模仿韩寒小四写作的神奇循环神经网络

我们在深度学习与计算机视觉专栏中看过计算机通过卷积神经网络学会了识别图片的内容——模仿人类的看,而工业界大量的应用也证明了神经网络能让计算机学会听(比如百度的语音识别),于是大量的精力开始投向NLP领...
  • yaoqiang2011
  • yaoqiang2011
  • 2016年04月26日 19:32
  • 44285

循环神经网络——介绍

递归神经网络递归神经网络的讨论分为三部分 介绍:描述递归网络和前馈网络的差别和优劣 实现:梯度消失和梯度爆炸问题,及解决问题的LSTM和GRU 代码:用tensorflow实际演示一个任务的训练和使用...
  • u010751535
  • u010751535
  • 2017年01月05日 00:42
  • 1240

CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)概念区分理解

1、相关知识从广义上来说,NN(或是更美的DNN)确实可以认为包含了CNN、RNN这些具体的变种形式。有很多人认为,它们并没有可比性,或是根本没必要放在一起比较。在实际应用中,所谓的深度神经网络DNN...
  • Eddy_zheng
  • Eddy_zheng
  • 2016年02月29日 10:21
  • 44315

从循环神经网络(RNN)到LSTM网络

从循环神经网络(RNN)到LSTM网络  通常,数据的存在形式有语音、文本、图像、视频等。因为我的研究方向主要是图像识别,所以很少用有“记忆性”的深度网络。怀着对循环神经网络的兴趣,在看懂了有关它的理...
  • diligent_321
  • diligent_321
  • 2016年11月27日 17:35
  • 5192

循环神经网络(一般RNN)推导

本文章的例子来自于WILDMLvanillaRNN是相比于LSTMs和GRUs简单的循环神经网络,可以说是最简单的RNN。RNN结构RNN的一个特点是所有的隐层共享参数(U,V,W)(U, V, W)...
  • dchen1993
  • dchen1993
  • 2016年12月26日 13:42
  • 3613

深度学习(Deep Learning)读书思考六:循环神经网络一(RNN)

概述 循环神经网络(RNN-Recurrent Neural Network)是神经网络家族中的一员,擅长于解决序列化相关问题。包括不限于序列化标注问题、NER、POS、语音识别等。RNN内容比较多...
  • fangqingan_java
  • fangqingan_java
  • 2016年11月20日 11:28
  • 4733

循环神经网络——实现LSTM/GRU

循环神经网络——实现gitbook阅读地址 知乎阅读地址梯度消失和梯度爆炸网络回忆:在《循环神经网络——介绍》中提到循环神经网络用相同的方式处理每个时刻的数据。 * 动态图: 数学公式:ht=ϕ(...
  • u010751535
  • u010751535
  • 2017年03月02日 16:01
  • 2011
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:循环神经网络(RNN, Recurrent Neural Networks)学习笔记:基础理论
举报原因:
原因补充:

(最多只允许输入30个字)