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

Python015

传说中的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

机器学习中谈论的神经网络是指“神经网络学习”,或者说,是机器学习和神经网络这两个学科领域的交叉部分[1]。

在这里,神经网络更多的是指计算机科学家模拟人类大脑结构和智能行为,发明的一类算法的统称。

神经网络是众多优秀仿生算法中的一种,读书时曾接触过蚁群优化算法,曾惊讶于其强大之处,但神经网络的强大,显然蚁群优化还不能望其项背。

A、起源与第一次高潮。有人认为,神经网络的最早讨论,源于现代计算机科学的先驱——阿兰.图灵在1948年的论文中描述的“B型组织机器”[2]。二十世纪50年代出现了以感知机、Adaling为代表的一系列成功,这是神经网络发展的第一个高潮[1]。

B、第一次低谷。1969年,马文.明斯基出版《感知机》一书,书中论断直接将神经网络打入冷宫,导致神经网络十多年的“冰河期”。值得一提的是,在这期间的1974年,哈佛大学Paul Webos发明BP算法,但当时未受到应有的重视[1]。

C、第二次高潮。1983年,加州理工学院的物理学家John Hopfield利用神经网络,在旅行商问题上获得当时最好结果,引起轰动;Rumelhart等人重新发明了BP算法,BP算法迅速走红,掀起神经网络第二次高潮[1]。

D、第二次低谷。二十世纪90年代中期,统计学习理论和支持向量机兴起,较之于这些算法,神经网络的理论基础不清晰等缺点更加凸显,神经网络研究进入第二次低谷[1]。

E、深度学习的崛起。2010年前后,随着计算能力的提升和大数据的涌现,以神经网络为基础的“深度学习”崛起,科技巨头公司谷歌、Facebook、百度投入巨资研发,神经网络迎来第三次高潮[1]。2016年3月9日至15日,Google人工智能程序AlphaGo对阵韩国围棋世界冠军李世乭,以4:1大比分获胜,比众多专家预言早了十年。这次比赛,迅速在全世界经济、科研、计算机产业各领域掀起人工智能和深度学习的热烈讨论。

F、展望。从几个方面讨论一下。

1)、近期在Google AlphaGo掀起的热潮中,民众的热情与期待最大,甚至有少许恐慌情绪;计算机产业和互联网产业热情也非常巨大,对未来充满期待,各大巨头公司对其投入大量资源;学术界的反应倒是比较冷静的。学术界的冷静,是因为神经网络和深度神经网络的理论基础还没有出现长足的进步,其缺点还没有根本改善。这也从另一个角度说明了深度神经网络理论进步的空间很大。

2)、"当代神经网络是基于我们上世纪六十年代掌握的脑知识。"关于人类大脑的科学与知识正在爆炸式增长。[3]世界上很多学术团队正在基于大脑机制新的认知建立新的模型[3]。我个人对此报乐观态度,从以往的仿生算法来看,经过亿万年进化的自然界对科技发展的促进从来没有停止过。

3)、还说AlphaGo,它并不是理论和算法的突破,而是基于已有算法的工程精品。AlhphaGo的工作,为深度学习的应用提供了非常广阔的想象空间。分布式技术提供了巨大而廉价的计算能力,巨量数据的积累提供了丰富的训练样本,深度学习开始腾飞,这才刚刚开始。

一直沿用至今的,是McChlloch和Pitts在1943年依据脑神经信号传输结构抽象出的简单模型,所以也被称作”M-P神经元模型“。

其中,

f函数像一般形如下图的函数,既考虑阶跃性,又考虑光滑可导性。

实际常用如下公式,因形如S,故被称作sigmoid函数。

把很多个这样的神经元按一定层次连接起来,就得到了神经网络。

两层神经元组成,输入层接收外界输入信号,输出层是M-P神经元(只有输出层是)。

感知机的数学模型和单个M-P神经元的数学模型是一样的,如因为输入层只需接收输入信号,不是M-P神经元。

感知机只有输出层神经元是B-P神经元,学习能力非常有限。对于现行可分问题,可以证明学习过程一定会收敛。而对于非线性问题,感知机是无能为力的。

BP神经网络全称叫作误差逆传播(Error Propagation)神经网络,一般是指基于误差逆传播算法的多层前馈神经网络。这里为了不占篇幅,BP神经网络将起篇另述。

BP算法是迄今最为成功的神经网络学习算法,也是最有代表性的神经网络学习算法。BP算法不仅用于多层前馈神经网络,还用于其他类型神经网络的训练。

RBF网络全程径向基函数(Radial Basis Function)网络,是一种单隐层前馈神经网络,其与BP网络最大的不同是采用径向基函数作为隐层神经元激活函数。

卷积神经网络(Convolutional neural networks,简称CNNs)是一种深度学习的前馈神经网络,在大型图片处理中取得巨大成功。卷积神经网络将起篇另述。

循环神经网络(Recurrent Neural Networks,RNNs)与传统的FNNs不同,RNNs引入定向循环,能够处理那些输入之间前后关联的问题。RNNs已经在众多自然语言处理(Natural Language Processing, NLP)中取得了巨大成功以及广泛应用[5]。RNNs将起篇另述。[5]

[1]、《机器学习》,周志华著

[2]、《模式识别(第二版)》,Richard O.Duda等著,李宏东等译

[3]、《揭秘IARPA项目:解码大脑算法或将彻底改变机器学习》,Emily Singerz著,机器之心编译出品

[4]、图片来源于互联网

[5]、 循环神经网络(RNN, Recurrent Neural Networks)介绍

递归神经网络(RNNs)是一类常用的序列数据人工神经网络。三种最常见的递归神经网络类型分别是:

要指出的一点是,我将使用"RNNS"来统称本质上是递归神经网络结构,"vanilla RNN"来指代在图一所展示的最简单的循环神经网络结构.

有很多关于递归神经网络的图解.

我个人最喜欢的一个是Michael Nguyen发表在《走向数据科学》(Towards Data Science)的这篇文章,因为他不仅给我们提供了对这些模型的直觉,更重要的是这些漂亮的插图,使我们更容易理解。但我发表这篇文章的动机是为了更好地理解这些单元中发生了什么,节点是如何共享的,以及它们是如何转换为输出节点。这里,我也受到了Michael的动画启发。

本文研究了vanilla RNN、LSTM和GRU单元。这是一个简短的概述,是为那些读过关于这些主题的文章的人准备的。(我建议在阅读本文之前先阅读Michael的文章),需要注意的是,以下动画是按顺序引导的,但在向量化的机器计算过程中并不反映时间上的顺序。

下面是我用来做说明的图例:

图0:动画图例

在我的动画中,我使用了大小为3(绿色)的输入和2个隐藏单元(红色),批量大小为1。

让我们开始吧!

图1:vanilla RNN 示意动画

图2:LSTM 示意动画

注意,单元状态的维度与隐藏状态的维度相同。

图3:GRU 示意动画

希望这些动画能以某种方式帮助你!以下是静态图像中的概况:

图4:Vanilla RNN 单元

图5:LSTM 单元

图6:GRU 单元

一个提醒:我使用Google绘图来创建的这些示意图。

想要继续查看该篇文章相关链接和参考文献?雷锋网雷锋网雷锋网

点击【从动图中理解 RNN,LSTM 和 GRU】即可访问!

今日资源推荐: CCF-GAIR | 张大鹏教授演讲 PPT:生物特征识别的新进展 - 纪念中国人工智能40年

非常高兴受邀参加本次会议,让我有机会汇报我的最新工作。今天我的讲题是“纪念中国人工智能40周年”,而我本人是中国学位法公布后首届入学的研究生,也是哈工大毕业的首个计算机博士,从 1980 年入学开始算起,我基本见证了中国人工智能这 40 年的发展历程。

这是我研究生期间所能找到最早的一篇论文,选题与指纹识别有关。 1984 年,陈光熙教授是我的博士生导师,图片展示的是当年哈工大进行博士学位论文答辩的场景。

点击链接获取:https://ai.yanxishe.com/page/resourceDetail/905