返回 登录
0

基于Keras/Python的深度学习:递归神经网络速成大法

原文:Crash Course in Recurrent Neural Networks for Deep Learning
作者:Jason Brownlee
编译:GawainGao 校审:KK4SBB
责编:周建丁(zhoujd@csdn.net)

正在统治诸如输入序列等机器学习难题的一种神经网络类型,是递归神经网络(Recurrent Neural Networks)。

随着时间的推移,递归神经网络已经拥有包含循环、增加反馈和记忆网络的连接。记忆可以使这种类型的网络能够学习和归纳输入序列而不是单个模式。

递归神经网络中有一类强大的类别——长短期记忆网络(LSTM),目前被证实在一个深度结构中进行堆操作是特别有效的,在从语言翻译到自动识别图片及视频字幕的多样矢量化问题中取得最先进的成果。

通过这篇文章,你将学习到关于深度学习的递归神经网络速成课程,并在基于Keras使用Python编写LSTM网络方面获得足够多的知识。

读完这篇文章,你就会了解:

  • 多层感知器的局限性被递归神经网络解决。
  • 一些问题必须被解决以使递归神经网络更有效。
  • 应用于深度学习的长短期记忆网络的细节。

让我们开始吧。

神经网络对序列的支持

有一些包含序列输入和序列输出的最优框架问题。

例如,考虑一个单变量时间序列问题,就像考虑一个随着时间推移的股票价格。此数据集可以被设计成一个可预知问题,这个问题可以通过定义一个窗口大小(例如大小为5的窗口)并训练网络去学习对固定大小的窗口输入的数据进行短期预测,来实现一个传统的前馈多层感知网络。

这是可行的,但效果非常有限。输入窗口需要为这个问题增加内存,但这仅限于一个固定数量的点,而且被选择的这些点还必须与该问题有足够紧密的联系。一个单纯的窗口在经过几分钟,几小时或几天后,不可能获取到更广泛的趋势来做预测。从一个预测到下一个,该网络只知道它所提供的特定输入。

单变量时间序列预测很重要,但涉及序列还有更有趣的问题。

考虑到如下分类的序列问题需要从一个输入映射到一个输出(出自Andrej Karpathy)。

  • 一对多:用于图像字幕的序列输出
  • 多对一:用于情感类分类的序列输入
  • 多对多:用于机器翻译的序列输入和输出
  • 同步多对多:用于视频分类的同步序列输入和输出

我们还可以看到,输入到输出的一对一的例子,是像图像分类的预测任务的一个经典的前馈神经网络的例子。

神经网络对序列的支持是一类重要的问题,深度学习领域近来显示出了不俗的成果,最先进的专为序列问题设计的网络就是递归神经网络。

递归神经网络

递归神经网络(RNNs)是一种专门为序列问题设计的神经网络类型。

给定一个标准的前馈多层感知网络和递归神经网络,可以将其看作是结构上的相加回路。例如,在一个给定的层,每个神经元除了转发信息之外,还可以传递其最近的信号(侧向)到下一层。该网络的输出可以作为网络的下一轮输入矢量。 以此类推。

递归连接可以在网络上添加状态和记忆,并允许它从输入序列中学习更广泛的抽象结果。

递归神经网络领域现在已经可以用流行的方法很好地建立起来。要想让这些技术在实际问题上也同样有效,需要解决两个对网络有用的主要问题。

  1. 如何用反向传播算法训练网络
  2. 如何在训练过程中避免梯度消失(gradient vanishing)和梯度膨胀(gradient explosion)

如何训练递归神经网络

训练前馈神经网络的主要技术就是反向传播算法和更新网络权重。由于递归和loop连接,递归神经网络中的反向传播算法被打破了。这已经被改良过的反向传播算法技术Backpropagation Through Time(BPTT)所解决。

代替上述在递归网络中进行反向传播的算法在网络结构中是展开的,并创建具有复发性的连接神经元副本。例如单个的神经元用自身中的连接(A->A)可以表示为两个具有相同权重值的神经元(A->B)。

这允许递归神经网络的循环图转变为像一个典型的前馈神经网络的非循环图像,并可以将反向传播算法用于其中。

如何在训练中保持一个稳定的梯度

当反向传播算法在深度神经网络中和展开的递归神经网络中使用的时候,为了更新权重值计算的梯度就会变得不稳定。

他们可以变成非常大的数,这种数被称为exploding gradients,也可以变成非常小的数,称为vanishing gradient问题。这些大量的梯度值被轮流用来更新网络中的权重,使得训练变得不稳定,网络变得不可靠。

这个问题在深度多层感知器网络中有所缓解,通过使用Rectifier传递函数,甚至更奇特的非主流方法,使用的是无监督的预训练层。

在递归神经网络结构中,这个问题在采用了新型的长短期记忆网络架构后已经有所缓解,使深度递归网络可以被训练。

长短期记忆网络

长短期记忆网络(LSTMs)是一种递归神经网络,采用BPTT训练并克服梯度消失的问题。

由于它可以用于创建大的(栈式)递归网络,所以反过来它也可以用来解决在机器学习中困难的序列问题并实现最先进的成果。

LSTM网络在层与层的连接中用记忆模块(memory blocks)来代替神经元。

A block has components that make it smarter than a classical neuron and a memory for recent sequences. A block contains gates that manage the block’s state and output. A unit operates upon an input sequence and each gate within a unit uses the sigmoid activation function to control whether they are triggered or not, making the change of state and addition of information flowing through the unit conditional.

一个模块具有比传统神经元和最近序列的记忆更聪明的组件。模块包含管理模块的状态和输出的门(gates)。一个单元的操作取决于输入序列,各个门使用sigmoid激活函数控制它们触发与否,使得状态和额外流经单元的条件信息发生变化。

单元内有三种类型的门:

  • Forget Gate:有条件地决定丢弃某些信息。
  • Input Gate:有条件地决定哪些输入值可以更新到记忆状态中。
  • Output Gate:有条件决定输出基于输入和记忆单元中的某些内容。

每个单元就像是一个小型的状态机,单元的门的权重值在训练过程中都会被学习。

你可以看到如何从LSTMs的层实现复杂的学习和记忆,而且不难想象高阶抽象可以以多个这样的层进行分层。

学习资源

在这篇文章中我们已经涵盖了大量的内容。下面是一些可以用来更深入学习关于深度学习和递归神经网络的资源(注:以下资料均为英文)。

了解更多关于递归神经网络和LSTMs的资料:

关于实现LSTMs的流行教程:

关于LSTMs的主要资源:

关注为LSTMs做出突出贡献的几位大牛:

Python深度学习代码下载

想要入门深度学习吗?你可以通过短短几行Python代码来开发和评价深度学习模型。你需要:

  1. 免费下载本文作者提供的Python深度学习入门教程(英文)。
  2. 进行14天的自学过程和7个端到端项目,覆盖关于多层感知器、卷积神经网络、物体识别等方面的知识。

图片描述

不过,后续的学习资料售价47美刀,包含如下内容,链接就不贴了。

  • 256 Page PDF Ebook.
  • 66 Python Recipes.
  • 18 Step-by-Step Lessons.
  • 9 End-to-End Projects.
  • Code You Can Directly Use.

总结

在这篇文章中你会了解序列问题,而递归神经网络可以用来解决它们。

具体来说,你学会了:

  • 经典前馈神经网络的局限性以及递归神经网络如何克服这些问题。
  • 训练递归神经网络的实际问题以及如何克服这些问题。
  • LSTMs常常用于创建深度递归神经网络。

如果你有关于深度递归神经网络、LSTMs或者这篇文章的任何问题,都可以在评论里写出来,我将尽力解答。

作者简介:

Jason Brownlee,MachineLearningMastery.com总编辑。一位好丈夫,值得骄傲的父亲,学术研究者,作家,专业开发者和机器学习实践者。他获得了人工智能的硕士和博士学位,出版过机器学习方面的书籍,写过运行于生产环境的实操代码。


CCAI 2016中国人工智能大会将于8月26-27日在京举行,AAAI主席,多位院士,MIT、微软、大疆、百度、滴滴专家领衔全球技术领袖和产业先锋打造国内人工智能前沿平台,6+重磅大主题报告,4大专题论坛,1000+高质量参会嘉宾,探讨人机交互、机器学习、模式识别及产业实战。门票限时六折优惠中

图片描述

评论