AlphaGo如何战胜人类围棋大师:智能硬件TensorFlow实践(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-09 14:47:43

点击下载

作者:陈震,郑文勋

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

AlphaGo如何战胜人类围棋大师:智能硬件TensorFlow实践

AlphaGo如何战胜人类围棋大师:智能硬件TensorFlow实践试读:

前言

信息技术日新月异,机器智能更是一个快速发展的领域,其所引发的社会变化和带来的社会影响也是巨大的。围绕这一领域的热点技术,如深度学习和强化学习,涉及一些基础数学知识,包括微积分、线性代数和优化理论等。机器智能作为计算机科学的一个应用,虽然涉及计算机体系结构、分布式系统、软硬件协同设计、算法与数据管理等诸多计算机理论知识,但其核心内容还是算法与数据。

AlphaGo战胜人类围棋大师,其实就是人类所创造的智能工具能力的胜利,是科学理性的胜利。AlphaGo的成功,证明了基于深度强化学习和蒙特卡洛树搜索方法的机器智能,在很多规则清晰的场景下完全可以比人类做得更好。

机器智能的领域不断扩大,遇到的问题也越来越多,需要人们不断创新,不断深入探究。近些年来的教学实践表明,对于一个新的知识领域,在具备一定的基础知识后,本科生完全有能力投入这一领域前沿技术的研究工作中。本书的目的就是要通过系统整理机器智能领域知识点,帮助本科同学迅速了解全貌,从而快速深入技术细节,为进一步的科研工作打下基础。

大凡与机器智能相关的技术,都需要训练有素的头脑,快速分析问题与解决问题的能力。所以,本科同学要想进入这个领域,除了解、掌握本书中的知识和实践操作外,还需要不断地训练自己思考问题和解决问题的能力。

本书的编写离不开清华大学iCenter智能系统实验室教师团队的协助,他们是马晓东、章屹松、王蓓和高英。本书在本科生课程“大数据智能”与“智能硬件”的实践教学中,根据反馈意见已经做了多次修订。实验室学生郑文勋、王亦凡、常嘉辉、吴垠鋆、冯杰、宋丹丹、钱鹏等多次担任课程或单元的助教,为本书的完善做出很大贡献。实验室SRT学生的多次学术活动,也为本书提供了有益的参考资料。

同时,我们也得到微软公司ETG团队的大力支持,他们是杨滔、章艳、刘士君、闫伟。微软公司除了提供云计算与机器学习服务支持外,还连续三届为清华iCenter——人工智能挑战赛提供了支持,极大方便了我们的课程教学和实验工作。

最后,感谢所有参与我们课程及挑战单元的同学们。他们朝气蓬勃,锐意进取,对未知领域充满好奇并进行着不知疲倦的探索。我们坚信,他们是学术和产业的希望及未来。

书中代码可从清华大学出版社网站www.tup.com.cn下载。作者2018年1月第1章机器智能的发展1.1 机器智能1.1.1 机器智能的定义

通俗地说,机器智能就是用机器(如计算机)完成人类需要用大脑完成的任务,代替人脑的工作,例如下棋、开车、阅读理解等。

机器智能是指计算机系统体现的智能的能力,如从听、说、读、写到搜索、推理、决策和回答问题等,同时也指如何设计实现计算机系统和软件,使其具有智能的行为。1.1.2 机器智能的分类

目前,机器智能一般分为机器感知和机器认知两个层面,如图1-1所示。

机器感知:包括语音识别、视觉识别、运动控制和眼手协同等。

机器认知:包括机器学习、自动推理、人工意识和知识表示等。图1-1 机器智能示意图1.2 深度学习1.2.1 机器智能的神经网络方法

人脑含有约860亿个神经元,还有大致850亿个非神经细胞。在大脑皮层(Cortex)约有160亿个神经元,小脑有690亿个神经元。人脑的神经元一般只与周围几千个神经元相连接,彼此能够传导电信号。

要让机器代替人脑工作,最直观的方法就是用机器来模拟人脑的工作行为。但是要模拟这些人脑工作的原理有难度。

首先,人脑作为一个系统,太复杂,涉及生物学、生理学、化学等学科知识;其次,至今人们还未彻底理解人脑的各个功能的工作机理。当然,确实有研究人员是沿着这个思路去实现机器智能的。

那是否还有别的思路呢?其实思路也挺多的,这里有一种称为人工神经网络(Artificial Neural Networks)的方法,最近在实践中被证明是有效的方法。这种方法又称为连接主义(Connectionism),其核心思想是通过大量简单计算单元连接起来的网络来实现复杂的智能行为。

这种方法首先是用数学方法来抽象出单个神经元(Neuron)的功能,构建出单个人工神经元的模型。其次,在单个神经元建模的基础上,参考人脑中神经元的连接方式,构建人工神经网络。最后,通过输入数据样本给神经网络训练,调整神经网络的参数,使其完成具有某些智能的任务(如眼睛看、耳朵听等)。1.2.2 人工神经元与人工神经网络

对于单个神经元的活动原理,目前已经有比较深入的研究。不论何种神经元,从功能上可以分为接收区域(Receptive Zone)、触发区域(Trigger Zone)、传导区域(Conducting Zone)和输出区域(Output Zone)。

这里给出人工神经元的数学抽象模型,也称为逻辑斯提回归单元(Logistics Regression Unit)。人工神经元模型如图1-2所示,这种结构又称为McCulloch-Pitts神经元。它将n个输入加权求和后,经过变换f(x)输出。逻辑斯提回归单元的f()函数就是逻辑斯提函数(Logistics Function)。

将这些单个人工神经元联网,形成复杂的人工神经网络结构,并可以不断扩大网络的层数(又称为深度)和人工神经元的数目,如图1-3所示。图1-2 人工神经元模型图1-3 多层神经网络

以上架构人工智能的神经网络方法,就是典型的连接主义的方法,现在称为深度学习的方法,在有大量的训练数据和超大计算能力的情况下,在工业实践中被证明是有效的。

这里需要注意:深度学习使用的神经网络,本质上是一个函数变换的数学模型,和生物中的神经元与神经网络已经没有什么关系了。

基于人工神经网络的人工智能技术的发展,并非一帆风顺。过去经历了两次高潮和两次低谷。

随着1957年罗森布赖特提出了感知机(Perceptron)的概念,掀起了第一次人工神经网络的热潮。由于受当时计算机的计算能力限制,20世纪70年代进入了低谷。

1986年,随着霍普菲尔德神经网络与BP算法的提出,掀起了第二次人工神经网络的热潮。这次由于人工智能计算机的研制失败,20世纪90年代再次进入了低谷。

2006年,多伦多大学的Geoffrey Hinton提出了深度神经网络和训练方法。

2011年,深度神经网络在TIMIT语音识别上实现了突破。

2013年,深度神经网络在图像识别上取得了重大进展。

2013年,深度学习被列为《麻省理工学院技术评论》的十大突破性技术之首。

目前,人工神经网络正进入第三次热潮。回顾过去,人们发现主要原因是当时的计算机的计算能力不够,用于训练的数据样本量不足,造成期望与实际效果之间有较大差别。随着计算硬件技术的进步,云计算和网络所支持的计算能力的大规模提升,再加上基于大数据的机器学习的算法进步,基于神经网络的人工智能方法得到复兴。1.2.3 神经网络的复兴

深度学习(Deep Learning)是深度神经网络(Deep Neural Networks)的另一个名称。深度学习的核心是深度神经网络的设计与训练,采用层级更深、参数规模更大的神经网络。

深度神经网络的兴起在于三位领军人物的不懈追求。他们是Geoffrey Hinton(多伦多大学教授)、Yoshua Bengio(蒙特利尔大学教授)和Yann LeCun(纽约大学教授),见图1-4。Geoffrey Hinton参与提出了反向传播算法BP,Yoshua Bengio提出了Autoencoder和机器翻译的GRU等方法,Yann LeCun提出了用卷积网络识别手写体的方法。图1-4 三位领军人物

这次深度学习普及的引发点始于2012年,由Geoffrey Hinton指导博士生Alex Krizhevsky和Ilya Sutskever采用深度卷积网络(AlexNet),在ILSVRC-2012图像分类(Image Classification)挑战赛的突破性的成绩,使准确率大幅度提升。1.3 机器学习1.3.1 机器学习的基本原理

深度神经网络是机器学习(Machine Learning)的一个分支。为了深入理解深度学习,我们有必要对机器学习的背景进行介绍。

机器学习的一个基本定义:给定一个计算机任务T和一个对任务T的性能度量P,在给出经验集E的前提下,计算机任务T在性能度量P上有所提升。这个利用经验集E提升任务T的性能P的方法就是机器学习。

一般机器学习的原理如图1-5所示。机器学习是用数据训练模型,用模型进行预测,根据反馈产生数据,更新模型和数据。所以,机器学习包括数据、模型与算法3个方面。图1-5 机器学习的原理

自2012年以来,基于深度学习的图像分类方法AlexNet在ILSVRC 2012比赛中的突破性表现,引起了各方关注,使人工智能得到新的发展。

在过去的几年里,深度学习在解决语音识别与图像处理等机器感知问题方面,表现优越,甚至超过人类的水平。目前,深度学习还在尝试解决自然语言理解、推理、注意和记忆(RAM)等机器认知相关的问题。

现在的业界认为实现通用人工智能(强人工智能)的一种途径是深度学习和深度增强学习。1.3.2 机器学习泛化能力

广义上讲,机器学习的成功依赖于它的泛化能力(Generalization)。通过在训练数据上的学习,然后能够推广到新的数据集上的能力称为泛化。

泛化后与正确的分类结果产生的误差称为泛化误差(Generalization Error,GE)。用数学公式表示为GE=AE+EE+OE

其中,逼近误差(Approximation Error,AE)是指由于模型规模方面而产生的误差,要想减少这部分误差,需要扩大模型规模。

估计误差(Estimation Error,EE)是指由于数据集规模而产生的误差,要想减少这部分误差,需要增加可用数据的规模。

优化误差(Optimization Error,OE)是指由于算法设计而产生的误差,要降低这部分误差,需要设计更优的算法。1.3.3 大数据是深度学习的基础

传统机器学习方法主要涉及数据、模型和算法3个方面。传统机器学习方法多采用手工或人为的特征选取,随着训练数据规模的提高,这种方法的提升效果就不明显了。而以深度学习为代表的方法,随着训练数据规模的扩大,提升效果显著,大大超过了传统机器学习方法。这种差异在语音识别、图像分类等机器感知类的任务上的体现尤其显著,如图1-6所示。

神经网络通过扩展网络结构的深度,扩大规模,甚至可以不断扩展下去,而且扩展之后所带来的效果是稳步提升的。通过规模的扩展,或者是提升网络的深度,是改进深度学习效果的途径。图1-6 机器学习效果与数据规模之间的关系参考文献

[1] Human B[EB/OL]. https://en.wikipedia.org/wiki/Brain.

[2] Deep Learning[EB/OL]. https://en.wikipedia.org/wiki/Deep_learning.

[3] Li Deng. Deep Learning for AI-from Machine Perception to Machine Cognition[C]. Keynote ICASSP 2016.

[4] Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Neural Networks[C]//International Conference on Neural Information Processing Systems. Curran Associates Inc. 2012: 1097-1105.

[5] Silver D, Huang A, Maddison C J, et al. Mastering the game of Go with Deep Neural Networks and Tree Search[J]. Nature, 2016, 529(7587): 484.

[6] Temam O. The Rebirth of Neural Networks[C]//International Symposium on Computer Architecture. ACM, 2010: 349-349.

[7] Russakovsky O, Deng J, Su H, et al. ImageNet Large Scale Visual Recognition Challenge[J]. International Journal of Computer Vision, 2015, 115(3): 211-252.

[8] 李航.统计学习方法[M].北京:清华大学出版社,2012.

[9] 周志华.机器学习[M].北京:清华大学出版社,2016.

[10] McCulloch W S, Pitts W. A Logical Calculus of Ideas Immanent in Nervous Activity[J]. Bulletin of Mathematical Biophysics, 1943, 5(13): 115-133.

[11] Ian Goodfellow, et al. Deep learning[M]. Cambridge: The MIT Press, 2016.第2章深度学习2.1 深度学习的原理

深度学习(Deep Learning)是深度神经网络(Deep Neural Networks)的另一个名称。深度学习的核心是深度神经网络的设计与训练,采用层级更深、参数规模更大的神经网络。

神经网络可以看作是对人脑的智能原理的一个数学抽象,包括神经元的结构和神经元的连接结构。其中,神经元的一个建模是逻辑回归单元。

深度学习通过单一的算法学习特征表示。逻辑回归是最常用的分类算法,也是深度学习的基本组成单元。2.1.1 人工神经元

人工神经元可以理解为一组输入加权叠加,再经过一个连续可导的非线性变换进行输出。为了叙述方便,以下人工神经元简称神经元。

1.逻辑斯提回归单元

逻辑斯提回归单元(Logistic Regression Unit)是最简单的人工神经元结构。单个逻辑斯提回归单元可以进行二类分类,多个逻辑斯提回归单元的组合,就可以完成复杂的分类工作。多层逻辑斯提回归单元在实际中表现出更好的性能。

单个逻辑斯提回归单元的数学表达式如下:其中,w与x分别为权重与输入,y为输出结果。f()函数采用逻辑斯提ii函数或逻辑曲线(Logistic Function)。f()函数的数学表达式和形状(见图2-1)如下:图2-1 f()函数的形状

其图形是一条S形曲线(Sigmoid Curve)。逻辑函数因其曲线形状为S形,所以,也被称为S()函数或Sigmoid()函数。Sigmoid()函数的取值为(0,1)。

2.激活函数

f()函数也称为人工神经元的激活函数(Activation Function or Trigger Function)。当f()函数采用逻辑斯提函数时,则人工神经元就是逻辑斯提回归单元。除了逻辑斯提回归单元的形式,人工神经元还有其他形式。例如,f()函数可以是tanh()函数、Softmax()函数和ReLU()函数(Rectified Linear Units)等。

双曲正切函数tanh(),其数学表达式如下:

tanh()函数和Sigmoid()函数是同类的,只是取值变为(-1,1)。

ReLU()函数的数学表达式如下:ReLU(x)=max(x,0)

ReLU()还有其推广形式,称为PReLU(Parametric ReLU)。PReLU()的数学表达式如下,其中α≈0.01:

Softmax()函数(又称为归一化指数函数)多用于输出一个识别对象的概率分布。Softmax()函数的数学表达式如下:2.1.2 多层人工神经网络

将多个人工神经元排列连接起来,就形成了多层人工神经网络。图2-2给出了一个二层神经网络结构的例子。图2-2 二层神经网络

该神经网络分为输入层、隐藏层和输出层。输入层有3个输入(x,0x,x),中间有一个隐藏层,输出层有2个输出(y,y),共有5个神1212经元。

该网络的连接结构采用多层全连接(Fully Connected Network,FCN)的模式,是人工神经网络中最简单的连接方式。

为了叙述方便,以下人工神经网络简称神经网络。2.1.3 神经网络训练

如果激活函数f(x)是一个连续可导函数,如Sigmoid()函数,那么神经网络本质上是一个由输入和内部权重作为变量的连续可导函数。

神经网络的训练过程属于机器学习的监督学习(Supervise Learning),即训练数据上都有相应的标签(Label)。神经网络对具有标签的训练样本进行学习,从而确定网络的权重参数,然后用训练得到网络,对训练样本集外的数据进行标签的预测。

神经网络训练的本质,就是找到相应的内部权重,使得在训练数据(样本)输入到网络后,网络的实际输出与预期输出(即标签)之间差异最小。

1.损失函数最小化

神经网络的输出结果会与实际所对应的标签之间存在差别,可以引入相似度度量函数,来表示这种差异,称为损失函数(Loss())、成本函数(Cost())或代价函数。

神经网络训练的目标是使损失函数最小,所以,训练过程是损失函数的求最小化过程。损失函数可以通过交叉熵的方式,来计算损失。其他的损失函数形式还有均方求和、均方根等度量函数,但是这类函数作为损失函数的缺点是它们属于非凸函数,存在很多极小值点。

交叉熵形式的损失函数表示如下:其中,y′表示训练样本对应的标签,y表示神经网络的输出。

实际中还会在损失函数中加上一些正则项(Regularizer)或惩罚项(Penalty Term),该过程称为正则化(Regularization)。目的是为了防止过学习(Over-fitting)。常见的惩罚项是。

2.反向传播算法

这里给出多层神经网络的一种更加抽象表示,这种表示抽象了每层的基本特征,如图2-3所示。

根据损失函数的性质和链式求导法则,可以反向逐层计算损失函数对权重的导数,调整权重最小化损失函数。这个方法称为反向传播算法(Back-Propagation Algorithm)。多层神经网络的反向传播的过程如图2-4所示。图2-3 多层神经网络图2-4 多层神经网络的反向传播方法

3.随机梯度下降法

随机梯度下降方法(Stochastic Gradient Descent,SGD)是最常用的权重调节方法,基本方法如下。

步骤1:随机初始化每个神经元的输入权重和偏差(Weights and Bias)。

步骤2:选取一个随机样本(Samples)。

步骤3:根据神经网络的输出结果,从最后一层开始,逐层计算每层权重的偏导数。

步骤4:逐层调整每层的权重,产生新的权重值。

返回到步骤2,继续随机选取下一个样本。

4.实际训练过程

多层神经网络的实际训练过程是将样本数据“分批训练”,同时采用随机梯度下降法和反向传播方法,逐层调整权重参数。

训练过程中的一些术语解释如下。(1)先将整个训练集分成多个同样大小的子集,每个子集称为一个批次(Batch),子集的大小(即样本数目)由参数批次大小(Batch Size)控制。(2)使用随机梯度下降法,其中每一步可以使用不止一个样本,这称为迷你批次(Minibatch)。每次迭代所用的样本数目称为迷你批次大小(Minibatch Size)。当迷你批次大小为1时,就是普通的随机梯度下降。(3)每个批次的数据被依次送入网络进行训练,训练完一个批次,被称为一次迭代(Iteration)。(4)训练集的所有训练样本都被送入网络训练,完成一次训练的过程,称为一个时代(Epoch)。(5)时代记录了整个训练集被反复训练的次数,而迭代记录网络权重参数的调整次数。

迭代和时代之间的数量关系由批次大小和训练集大小决定。

5.自编码器

1)自编码器初始化权重

自编码器(Autoencoder)主要用于多层神经网络参数的初始化。采用随机化网络参数的方法,会导致网络收敛慢的问题。而采用自编码器方法,在一些训练过程中证明是有效的。自编码器的结构如图2-5所示。图2-5 自编码器的结构

自编码器的功能是神经网络的输出尽可能地还原输入的特征。这样可以对多层神经网络的每一层逐层去构造自编码器,用训练出来的权重作为多层神经网络每一层的初始权重。

自编码器初始化多层神经网络的参数方法描述如下。(1)预训练:使用无监督的数据,对每一层进行预训练。(2)微调步骤1:对最后的输出层用监督学习的标记数据,进行训练。(3)微调步骤2:使用标记数据,对整个网络进行反向传播训练。

2)降噪自编码器

降噪自编码器(Denoising Autoencoder,DA)的原理是人工破坏或者屏蔽部分输入,输入到自编码器进行训练,让自编码器学到数据间的关联性。实际操作中,屏蔽是随机进行的,所以,神经网络最终学到的是通过部分数据联想到缺失数据的能力。

举个例子,输入一个9维的数据,通过屏蔽最后一维,比如将第9维数据(置零),得到一个8维+0的9维数据。将此数据经过一个9-3-9的神经网络处理,得到新的9维数据。训练要求新的9维数据和没被屏蔽前的输入数据一样。这样,自编码器至少完成了这样一件事:给定前8维,推测最后一维。

这种推测不是简单的“线性插值”,因为神经网络的每层输出,都要通过激活函数,进行了一次非线性函数变化。所以,这种推测肯定不是线性插值的,而是一种更复杂的数值插值方法。

具体参考链接http://deeplearning.net/tutorial/dA.html。

6.训练的小技巧

这些神经网络训练调试的小技巧源于Le Quoc V的教程。因为当时还没有完整成熟的深度学习框架,很多情况下需要自己去调整优化。有了成熟的框架后,有些问题就不用太关心了。(1)用数值近似的方法检查反向传播算法的梯度计算的正确性(依赖选择的框架)。(2)随机初始化参数是很重要的。一个好的方法是参数初始化采用高斯分布或均匀分布。有时调整一下初始化的协方差又会有帮助(依赖选择的框架)。(3)确保随机初始化不要“饱和”网络。这意味着绝大多数时间,神经元的输出为0.2~0.8。如果神经元输出太多的0或1,梯度值会比较小,训练时间会比较长。(4)能够有效地监控训练过程(依赖选择的框架)。(5)选取好的学习率。建议学习率为0.1或0.0 1。学习率过大,参数值改变过于激进;学习率过小,参数值改变过于保守。(6)选取好的超参数(如层数、每层神经元数目)是一个当前研究的问题。一种好的方法是采用交叉验证(Cross Validation)。选取一个验证集,与训练集完全无关。如果超参数在训练集上表现好,而在验证集上表现不佳,这个模型就是过拟合(Overfits):模型有太多的自由度并记住了训练集的特征,但是无法推广。如果模型的超参数在训练集上表现极差,这就是欠拟合(Underfits):模型没有足够的自由度,应该增加隐藏层数或者神经元的数目。另外,在训练集上表现不佳,也可能是学习率选取不好(比较重要)。(7)选取好的超参数,也可以使用Gridsearch方法,随机搜索或贝叶斯优化。在Gridsearch方法中,所有的组合都会尝试,并用验证集进行交叉检验。如果Gridsearch成本太高,可以用随机搜索来产生配置。贝叶斯优化检查先前的超参数的网络组合,找出一个拟合函数,然后选择一个最大化效用函数的超参数组合。(8)神经网络需要长时间训练,需要花费时间去优化代码速度。例如,用快速矩阵矢量库、后向传播算法的矢量化版本(依赖选择的框架)。(9)可以采用单精度而不是用双精度来存放参数。这可以减少一半的存储空间,而不会损害神经网络的性能。缺点是用数值近似做梯度正确性的检查会复杂些。(10)神经网络的一个不方便之处是目标函数一般不是非凸函数。这意味着我们获得的最小值,很可能是局部最小而非全局最小。所以,神经网络对随机初始化比较敏感。学习过程的其他随机化方面也会影响结果。例如,学习率的选择,迭代样本的不同顺序会产生不同的优化参数。(11)在许多情况中,使用较大的迷你批次是一个好方法,因为可以降低样本的噪声(计算多个样本的平均值的例子)。另外,速度更快,因为矩阵向量库用更大的矩阵工作会更好。2.2 典型的神经网络架构

经过不断的实验测试,人们发现不同的神经网络架构适合处理不同的任务。卷积神经网络适用于图像处理,因为这种网络结构适合图像处理的不变性,例如猫的图像,平移旋转处理后依然是猫。循环神经网络适合进行序列预测的任务,如语音识别、诗词填空等语音语言的处理。因为长短期记忆循环网络训练快,已经在语音识别中大规模应用。2.2.1 卷积神经网络

对于高维数据如图像(200×200像素),如果第一层是全连接的话,这意味着第一个隐藏层的每个神经元都有40 000个输入权重。为了效率更高,可以强制神经元的输入权重的数量,强制输入只和局部的神经元有连接。这样形成的网络又称为局部网络,或者局部连接网络。

权重共享(Weight Sharing)是一种简单的局部网络形成方法,如图2-6所示。这种权重共享等效于信号处理领域中的卷积运算(Convolution)。图2-6 权重共享

实际中,每一个卷积层后紧跟着一个下采样层,例如采用最大池化(Max-pooling)方法完成下采样。最大池化层的操作,就是在过滤器之后(卷积之后),计算出卷积层神经元输出的最大值。最大池化的操作原理如图2-7所示。图2-7 最大池化操作

卷积操作就是在输入信号上使用过滤器(Filter),而过滤器的参数就是一组权重值。所以,这种局部区域的权重共享的神经网络,又称为卷积神经网络(Convolutional Neural Network,CNN)。一个卷积神经网络的工作原理如图2-8所示。图2-8 卷积神经网络

最新CNN进展还包括LCN(Local Contrast Normalization)。LCN操作在最大池化层之后,其目标是减去平均值,除以标准差。这个操作允许亮度不变性,对于图像识别用处很大。2.2.2 循环神经网络

对于时间序列的预测是一个重要问题。循环神经网络(Recurrent Neural Network,RNN)的每一个时间步处理时,权重共享。一个单向RNN如图2-9所示。图2-9 单向RNN

RNN会在时间域上进行反馈操作,具体来说,有两种反馈方式:一种是上一时刻或前面若干时刻的输出会被作为输入的一部分与真正的输入一起构成总的输入量,即前向方式;另一种是后面若干时刻的输出会被作为输入的一部分与真正的输入一起构成总输入量,即后向方式。如果前向方式和后向方式都存在,那么就被称为双向模式。一个双向RNN如图2-10所示。

双向网络这样的做法,就是采用两个单向网络结构,这样做增加了复杂性,但是充分利用了输入的前后相关性,识别的准确率也提高了。单向RNN的优点是结构简单,可以完成实时的处理功能。图2-10 双向RNN2.2.3 长短时记忆循环网络

长短时记忆循环网络(Long-Short Term Memory Recurrent Network,LSTM)是RNN的一个改进。相比于RNN,LSTM增加了一个主输入单元和其他3个辅助的门限输入单元:输入门(Input Gate)、记忆单元(Memory Cell)、遗忘门(Forget Gate)及输出门(Output Gate)。

输入门、遗忘门、输出门和记忆单元组合起来,大大提升了RNN处理远距离依赖问题的能力,解决了RNN的梯度值消失问题(Vanishing Gradient Problem),无法学习长程的相关性问题。

典型的LSTM结构是一个主输入单元和其他3个辅助的门限输入单元。3个辅助的门限输入单元分别控制网络是否输入,是否存储输入以及是否输出。这样一来就可以寄存时间序列的输入。在训练过程中会利用后向传播的方式进行。

如图2-11所示,其中,输入门控制是否输入,遗忘门控制是否存储,输出门控制是否输出。

假设在t时刻的输入是x,m是m和f的线性组合。ttt-1图2-11 长短时记忆单元

在t时刻的隐含层的状态h,计算如下:t其中,h和m会在下一个时间步继续使用。α、β、γ形式如下:ttα(t)=g(x,h,m)1tt-1t-1β(t)=g(x,h,m)2tt-1t-1γ(t)=g(x,h,m)3tt-1t其中,α、β、γ也被称为输入门、记忆门和输出门,分别控制了输入、记忆和输出到下一个时间。

LSTM最早是由Sepp Hochreiter和Jürgen Schmidhub er提出。2.2.4 门控循环单元循环网络

门控循环单元(Gated Recursive Unit,GRU)是由Cho等人在LSTM的基础上提出的简化版本,也是RNN的一种扩展。GRU的结构如图2-12所示。

GRU单元只有两个门,即重置门和更新门。(1)重置门(Reset Gate):如果重置门关闭,会忽略掉历史信息,即历史不相干的信息不会影响未来的输出。重置门:图2-12 GRU的结构r=σ(W•[h,x ])ttt-1t其中,σ为Sigmoid()函数。(2)更新门(Update Gate):将LSTM的输入门和遗忘门合并,用于控制历史信息对当前时刻隐层输出的影响。如果更新门接近1,会把历史信息传递下去。更新门:z=σ(W•[h,x ])ttt-1t

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载