传说中的RNN到底是何方神圣?(后附作者及相关信息)

Python016

传说中的RNN到底是何方神圣?(后附作者及相关信息),第1张

假设你已经知道最基本的人工神经网络模型(也就是全连接的前馈神经网络),那么希望本文可以帮助你理解RNN,也就是传说中的循环神经网络。严格来说,本文是综合了(或翻译了)网上若干最容易理解、写得最棒的文章而成的。但问题在于网上的文章龙蛇混杂,水平参差不齐。而且拙劣者远远多于(甚至已经稀释了)优秀的文章。所以本文的意义就在于令初学者免于陷入“垃圾”文章之海洋的窘境。当然,如果你觉得本文看得还不过瘾,那么详阅文末给出的各篇经典文献也是非常值得推荐的。

如你所知的,一个前馈(全连接)神经网络如下图所示,由输入层、隐藏层和输出层构成。如果你想从零开始前馈神经网络,那么参考文献【1】和【2】就是最佳的教程!现在假设你已经掌握了基本的前馈神经网络,那么下面这幅图可能跟你在一般教科书上见到它时的样子稍微有点不一样,是的,它是将通常的画法逆时针旋转90度得到的。这样做的目的,主要是为了与后续的RNN图示进行无缝衔接。

如同人类的大脑一样,当我们看到(接收到)熊(的图像时),经过一系列隐藏层的逐层传递(以及其内部极其复杂的计算过程),最终在输出层上,我们得到“熊”这个结果。

但是由前馈神经网络所反映(或者完成)的过程往往是相对静态的。人类的大脑还具有处理时序数据的能力。也就是说,大脑得到的某个结果不仅跟当前的输入有关,还跟上一时刻的输出有关。

例如,我们在读一篇文章时,有这样一句话:“灰太狼悄悄地藏在喜羊羊家的门口,等待猎物自己上钩。”显然,当我们读到“猎物”一词时,你马上回反映到它具体指代的应该是喜羊羊,而等待猎物的则是灰太狼。这种程度的理解显然仅仅依靠当前的输入(例如当前的句子或者词汇)是无法实现的。上一阶段(或时刻)的输出(即对上一个句子的理解)也非常重要。

可见,From one moment to the next, our brain operates as a function: it accepts inputs from our senses (external) and our thoughts (internal) and produces outputs in the form of actions (external) and new thoughts (internal).

Our brain runs repeatedly through time. We see a bear, then think “bear”, then think “run”. Importantly, the very same function that transforms the image of a bear into the thought “bear” also transforms the thought “bear” into the thought “run”. It is a recurring function, which we can model with a recurrent neural network (RNN).

An RNN is a composition of identical feedforward neural networks, one for each moment, or step in time, which we will refer to as “RNN cells”.

In the above diagram, a chunk of neural network, A, looks at some input xt and outputs a value ht. A loop allows information to be passed from one step of the network to the next.

这里的 a chunk of NN 其实就相当于前馈神经网络中的隐藏层,也就是多层传递的NN结构。而其中的循环输入,其实向下一个状态进行输入,所以上图中其实隐含地表示需要一个延迟器。

如果你对上面这种循环“输入→输出”的结构感到困惑,如果你还在为这种自循环感到不解,其实你只要把这个结构“拉开”,便会一目了然。 A recurrent neural network can be thought of as multiple copies of the same network, each passing a message to a successor. Consider what happens if we unroll the loop:

或者

另外一种常见的图示如下(A RNN and the unfolding in time of the computation involved in its forward computation),但其实都是万变不离其宗的同一个套路.

或者表示成下面这样的按时间展开的循环神经网络:

循环神经网络可以应用到很多不同类型的机器学习任务。根据这些任务的 特点可以分为以下几种模式:

序列到类别模式:这种模式就是序列数据的分类问题。输入为序列,输出为类别。比如在文本分类中,输入数据为单词的序列,输出为该文本的类 别。

序列到序列模式:这类任务的输入和输出都为序列。具体又可以分为两种情况:

同步的序列到序列模式:这种模式就是机器学习中的序列标注(Sequence Labeling)任务,即每一时刻都有输入和输出,输入序列和输出序列的长度相同。比如词性标注(Part-of-Speech Tagging)中,每 一个单词都需要标注其对应的词性标签。

异步的序列到序列模式:这种模式也称为编码器-解码器(EncoderDecoder)模型,即输入和输出不需要有严格的对应关系,也不需要保持相同的长度。比如在机器翻译中,输入为源语言的单词序列,输出为目标语言的单词序列。

首先,我们来看下序列到类别的应用模式。假设一个样本X={x1,⋯,xT }为一个长度为 T 的序列,输出为一个类别y∈{1,⋯,C}。我们可以将样本X按不同时刻输入到循环神经网络中,并得到不同时刻的隐藏状态h1,⋯,hT 。我们可以将hT看作整个序列的最终表示(或特征),并输入给分类器g(·),

此处g(·)可以是简单的线性分类器(比如Logistic回归)或复杂的分类器(比如多层前馈神经网络)。

除了将最后时刻的隐藏状态作为序列表示(如图a)之外,我们还可以对整个序列的所有隐藏状态进行平均,并用这个平均状态来作为整个序列的表示(如图b)。

在同步的序列到序列模式中(如下图所示),输入为一个长度为 T 的序列X={x1,⋯,xT },输出为序列Y={y1,⋯,yT }。样本X按不同时刻输入到循环神经网络中,并得到不同时刻的隐状态h1,⋯,hT 。每个时刻的隐状态 hT 代 表了当前时刻和历史的信息,并输入给分类器g(·)得到当前时刻的标签。

在异步的序列到序列模式中(如下图所示),输入为一个长度为T 的序列X={x1,⋯,xT },输出为序列Y={y1,⋯,yM }。样本X按不同时刻输入到循环神经网络中,并得到不同时刻的隐状态h1,⋯,hT 。然后RNN cell再执行M次,此时,每个RNN Cell的输入仅为上一时刻的隐状态,对于每个时刻的隐状态 hT,t∈[T+1,T+M],并输入给分类器g(·)得到当前时刻的标签。

参考文献

【1】 左飞,R语言实战:机器学习与数据分析,电子工业出版社,第15章

【2】 Michael Nielsen,http://neuralnetworksanddeeplearning.com/

【3】 邱锡鹏,循环神经网络,《神经网络与深度学习》 

【4】 DennyBritz, RecurrentNeural Networks Tutorial, Part 1 – Introduction to RNNs

【5】 Christopher Olah,UnderstandingLSTM Networks(http://colah.github.io/posts/2015-08-Understanding-LSTMs/)——这是网上写的最好的关于LSTM的通俗讲解

-----------------------------------------------------------------------------------------------------------------

原文:https://blog.csdn.net/baimafujinji/article/details/78279746

人工神经网络有很多模型,但是日前应用最广、基本思想最直观、最容易被理解的是多层前馈神经网络及误差逆传播学习算法(Error Back-Prooaeation),简称为BP网络。

在1986年以Rumelhart和McCelland为首的科学家出版的《Parallel Distributed Processing》一书中,完整地提出了误差逆传播学习算法,并被广泛接受。多层感知网络是一种具有三层或三层以上的阶层型神经网络。典型的多层感知网络是三层、前馈的阶层网络(图4.1),即:输入层、隐含层(也称中间层)、输出层,具体如下:

图4.1 三层BP网络结构

(1)输入层

输入层是网络与外部交互的接口。一般输入层只是输入矢量的存储层,它并不对输入矢量作任何加工和处理。输入层的神经元数目可以根据需要求解的问题和数据表示的方式来确定。一般而言,如果输入矢量为图像,则输入层的神经元数目可以为图像的像素数,也可以是经过处理后的图像特征数。

(2)隐含层

1989年,Robert Hecht Nielsno证明了对于任何在闭区间内的一个连续函数都可以用一个隐层的BP网络来逼近,因而一个三层的BP网络可以完成任意的n维到m维的映射。增加隐含层数虽然可以更进一步的降低误差、提高精度,但是也使网络复杂化,从而增加了网络权值的训练时间。误差精度的提高也可以通过增加隐含层中的神经元数目来实现,其训练效果也比增加隐含层数更容易观察和调整,所以一般情况应优先考虑增加隐含层的神经元个数,再根据具体情况选择合适的隐含层数。

(3)输出层

输出层输出网络训练的结果矢量,输出矢量的维数应根据具体的应用要求来设计,在设计时,应尽可能减少系统的规模,使系统的复杂性减少。如果网络用作识别器,则识别的类别神经元接近1,而其它神经元输出接近0。

以上三层网络的相邻层之间的各神经元实现全连接,即下一层的每一个神经元与上一层的每个神经元都实现全连接,而且每层各神经元之间无连接,连接强度构成网络的权值矩阵W。

BP网络是以一种有教师示教的方式进行学习的。首先由教师对每一种输入模式设定一个期望输出值。然后对网络输入实际的学习记忆模式,并由输入层经中间层向输出层传播(称为“模式顺传播”)。实际输出与期望输出的差即是误差。按照误差平方最小这一规则,由输出层往中间层逐层修正连接权值,此过程称为“误差逆传播”(陈正昌,2005)。所以误差逆传播神经网络也简称BP(Back Propagation)网。随着“模式顺传播”和“误差逆传播”过程的交替反复进行。网络的实际输出逐渐向各自所对应的期望输出逼近,网络对输入模式的响应的正确率也不断上升。通过此学习过程,确定下各层间的连接权值后。典型三层BP神经网络学习及程序运行过程如下(标志渊,2006):

(1)首先,对各符号的形式及意义进行说明:

网络输入向量Pk=(a1,a2,...,an);

网络目标向量Tk=(y1,y2,...,yn);

中间层单元输入向量Sk=(s1,s2,...,sp),输出向量Bk=(b1,b2,...,bp);

输出层单元输入向量Lk=(l1,l2,...,lq),输出向量Ck=(c1,c2,...,cq);

输入层至中间层的连接权wij,i=1,2,...,n,j=1,2,...p;

中间层至输出层的连接权vjt,j=1,2,...,p,t=1,2,...,p;

中间层各单元的输出阈值θj,j=1,2,...,p;

输出层各单元的输出阈值γj,j=1,2,...,p;

参数k=1,2,...,m。

(2)初始化。给每个连接权值wij、vjt、阈值θj与γj赋予区间(-1,1)内的随机值。

(3)随机选取一组输入和目标样本

提供给网络。

(4)用输入样本

、连接权wij和阈值θj计算中间层各单元的输入sj,然后用sj通过传递函数计算中间层各单元的输出bj。

基坑降水工程的环境效应与评价方法

bj=f(sj) j=1,2,...,p (4.5)

(5)利用中间层的输出bj、连接权vjt和阈值γt计算输出层各单元的输出Lt,然后通过传递函数计算输出层各单元的响应Ct。

基坑降水工程的环境效应与评价方法

Ct=f(Lt) t=1,2,...,q (4.7)

(6)利用网络目标向量

,网络的实际输出Ct,计算输出层的各单元一般化误差

基坑降水工程的环境效应与评价方法

(7)利用连接权vjt、输出层的一般化误差dt和中间层的输出bj计算中间层各单元的一般化误差

基坑降水工程的环境效应与评价方法

(8)利用输出层各单元的一般化误差

与中间层各单元的输出bj来修正连接权vjt和阈值γt。

基坑降水工程的环境效应与评价方法

(9)利用中间层各单元的一般化误差

,输入层各单元的输入Pk=(a1,a2,...,an)来修正连接权wij和阈值θj。

基坑降水工程的环境效应与评价方法

(10)随机选取下一个学习样本向量提供给网络,返回到步骤(3),直到m个训练样本训练完毕。

(11)重新从m个学习样本中随机选取一组输入和目标样本,返回步骤(3),直到网路全局误差E小于预先设定的一个极小值,即网络收敛。如果学习次数大于预先设定的值,网络就无法收敛。

(12)学习结束。

可以看出,在以上学习步骤中,(8)、(9)步为网络误差的“逆传播过程”,(10)、(11)步则用于完成训练和收敛过程。

通常,经过训练的网络还应该进行性能测试。测试的方法就是选择测试样本向量,将其提供给网络,检验网络对其分类的正确性。测试样本向量中应该包含今后网络应用过程中可能遇到的主要典型模式(宋大奇,2006)。这些样本可以直接测取得到,也可以通过仿真得到,在样本数据较少或者较难得到时,也可以通过对学习样本加上适当的噪声或按照一定规则插值得到。为了更好地验证网络的泛化能力,一个良好的测试样本集中不应该包含和学习样本完全相同的模式(董军,2007)。

BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成;正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差作为调整信号逐层反向回传,对神经元之间的连接权矩阵做出处理,使误差减小。经反复学习,最终使误差减小到可接受的范围。具体步骤如下:

1、从训练集中取出某一样本,把信息输入网络中。

2、通过各节点间的连接情况正向逐层处理后,得到神经网络的实际输出。

3、计算网络实际输出与期望输出的误差。

4、将误差逐层反向回传至之前各层,并按一定原则将误差信号加载到连接权值上,使整个神经网络的连接权值向误差减小的方向转化。

5、対训练集中每一个输入—输出样本对重复以上步骤,直到整个训练样本集的误差减小到符合要求为止。