订阅业界RSS CSDN首页> 业界

深度学习架构

发表于2019-01-28 18:16| 来源IBM| 作者M. Tim Jones

摘要: 连接机制架构早在 70 多年前就已经出现,但新架构和图形处理装置 (GPU) 的出现,让这些架构再次走在了人工智能领域的前沿。

 连接机制架构早在 70 多年前就已经出现,但新架构和图形处理装置 (GPU) 的出现,让这些架构再次走在了人工智能领域的前沿。最近二十年来,深度学习架构开始出现,这种架构极大地拓展了神经网络能够解决的问题的数量和类型。本文介绍了五种最热门的深度学习架构,包括循环神经网络 (RNN)、长短期记忆 (LSTM)/门控循环单元 (GRU)、卷积神经网络 (CNN)、深度信念网络 (DBN) 和深度堆栈网络 (DSN),本文还探讨了深度学习的开源软件选项。

深度学习并非一种单一的方法,而是一类算法和拓扑结构,可用于解决多种问题。虽然深度学习的确不是什么新事物,但它正呈现出爆炸性增长趋势,原因在于深层神经网络的交织和用 GPU 来加速其执行。此外,大数据也推动了这一增长。由于深度学习依赖于监督型学习算法(即用示例数据训练神经网络并基于成效予以赋分的算法),因而数据越多就越有利于构建相应的深度学习结构。

深度学习与 GPU 的兴起

深度学习包含有拓扑各异的深度网络。虽说神经网络的存在已非朝夕,但多层次网络(每一层都提供一些功能,比如特征提取)的发展使其更便于使用。添加层意味着提升层之间和层内的连通性和权重。这正是 GPU 有益于深度学习之处,即实现对深度网络(原始处理器效率不高)的训练和执行。

GPU 与传统多核处理器有几大关键差异。首先,传统处理器可能包含 4-24 个通用 CPU,但 GPU 可能包含 1,000-4,000 个专用数据处理内核。

深度学习架构

用于深度学习的架构和算法数量各不相同、丰富多样。本节将探讨近 20 年来的五种深度学习架构。值得注意的是,LSTM 和 CNN 是其中最古老的两种方法,也是在各种应用中最常用的两种方法。

这些架构应用于各种情境中,但下表仅列出了其部分典型应用。

架构

应用

RNN

语音识别、手写识别

LSTM/GRU 网络

自然语言文本压缩、手写识别、语音识别、手势识别、图像字幕处理

CNN

图像识别、视频分析、自然语言处理

DBN

图像识别、信息检索、自然语言理解、故障预测

DSN

信息检索、连续语音识别

下面,我们来分析一下这些架构及其训练方法。

循环神经网络

RNN 是构建其他深度学习架构的基础网络架构之一。典型多层网络和循环网络的主要区别在于,循环网络可能具备反馈到先前层(或同一层)的连接,而非完全前馈连接。此反馈支持 RNN 及时留存先前输入和模型问题的内存。

RNN 包含有一组丰富的架构(下面,我们将讨论一种称为 LSTM 的热门拓扑)。关键的区别在于网络内反馈,其表现形式可以是隐藏层、输出层或一些组合。

RNN 可以在时间上展开,通过标准反向传播或一种称为时间反向传播 (BPTT) 的反向传播变体进行训练。

LSTM/GRU 网络

虽说 LSTM 由 Hochreiter 和 Schimdhuber 于 1997 年创建,但近年来作为各种应用 RNN 架构的呼声越来越高。您可以在每天使用的产品中找到 LSTM,比如智能手机。IBM 将 LSTM 用于 IBM Watson®,实现了里程碑式的会话语音识别。

LSTM 脱离了典型的基于神经元的神经网络结构,引入了内存单元的概念。内存单元可以将其值作为输入函数保留较短或较长时间,以支持内存单元记住重要的内容,而不仅仅是最后计算的值。

LSTM 内存单元包含三个门,用于控制信息如何从内存单元流入或流出。输入门控制新信息何时流入内存。忘记门要控制在现有信息被忘记的情况下,允许内存单元记住新的数据。最后,输出门控制单元中包含的信息何时用于内存单元的输出。该单元还包含有控制每个门的权重。训练算法(通常是 BPTT)一般根据产生的网络输出错误来优化这些权重。

2014 年,LSTM 的精简形式引入,即门控循环单元。该模型有两个门,去掉了 LSTM 模型中的输出门。对于很多应用来说,GRU 的性能与 LSTM 相似,但要更简单,所以权重更小、执行速度更快。

GRU 包含有两个门:更新门和重置门。更新门会提示要维护的上一单元内容量。重置门定义了如何合并新输入的内容和之前的单元内容。GRU 只需将重置门设置为 1,将更新门设置为 0,便可为标准 RNN 建模。

GRU 比 LSTM 简单,可以更快地进行训练,并且可以更高效地执行。不过,LSTM 可以更具表现力,而且在有更多数据的情况下,可以得到更优秀的结果。

卷积神经网络

CNN 是一个多层神经网络,从生物学上来说是受动物视觉皮层的启发。该架构尤适用于图像处理应用。第一个 CNN 由 Yann Lecun 创建;当时,该架构以手写字符识别为重点,比如邮政编码解释。作为一个深度网络,早期层识别特征(比如边缘),后期层将这些特征重新组合成输入的高级属性。

LeNet CNN 架构由若干层组成,这些层实现特征提取,然后进行分类(见下图)。图像被分为接收字段,接收字段馈入卷积层,然后卷积层从输入图像中提取特征。下一步是池,不仅减少了提取特征的维数(通过向下采样),还保留了最重要的信息(通常通过最大池)。再就是执行另一个卷积和汇集步骤,将数据输入到完全连接的多层感知器中。此种网络的最后一个输出层是一组节点,能够标识图像的特征(在本例中,每个标识的数字对应一个节点)。您可以通过运用反向传播来训练网络。

对于深度学习神经网络的各种新应用来说,深层处理、卷积、池和完全连接分类层的运用可以说是一大突破口。除图像处理外,CNN 还成功地运用于视频识别和自然语言处理范畴内的各种任务中。

在 CNN 和 LSTM 新应用的带动下,图像和视频字幕处理系统应运而生,其中图像或视频以自然语言为依托。CNN 执行图像或视频处理,LSTM 经过训练将 CNN 输出转换为自然语言。

深度信念网络

DBN 是一种典型的网络架构,但包含有一种新的训练算法。DBN 是一种多层网络(通常是深度网络,包含有多个隐藏层),其中每对连接层都是一个受限的 Boltzmann 机器 (RBM)。在此方式下,DBN 代表了一个 RBM 堆栈。

就 DBN 而言,输入层代表原始感官输入,每个隐藏层会学习该输入的抽象表示。输出层的处理方式与其他层略有不同,因其实现了网络分类。训练分两步进行:无监督的预训练和有监督的微调。

在无监督的预训练中,每个 RBM 的训练目的均为输入重构(例如,第一个 RBM 将输入层重构为第一个隐藏层)。对下一个 RBM 进行类似的训练,但将第一个隐藏层视为输入(或可见)层,并将第一个隐藏层的输出作为输入对 RBM 进行训练。该流程将一直持续到每一层完成预训练。预训练完成后,开始微调。在这个阶段,输出节点通过应用标签来赋予意义(即其在网络情境中表示的内容)。然后利用降阶学习或反向传播的方法进行全网络训练,以便完成整个训练流程。

深度堆栈网络

最后的架构是 DSN,也称为深凸网络。DSN 不同于传统的深度学习框架,因为尽管它由一个深度网络构成,但实际上它是一组深度独立的网络集,每个网络都有自己的隐藏层。这种架构旨在应对深度学习的一个问题:训练的复杂性。深度学习架构的每一层均以指数形式增加了训练的复杂性,因此 DSN 将训练视为一个单独的问题,而不是一组单独的训练问题。

DSN 包含有一组模块,每个模块都是 DSN 整体层次结构中的子网络。在此架构的一个实例中,针对 DSN 创建了三个模块。每个模块包含有一个输入层、一个隐藏层和一个输出层。各个模块层堆叠到一起,模块的输入层由前一输出层和原始输入向量组成。此种分层允许整个网络学习比单个模块更复杂的分类。

DSN 支持单独训练各个模块,以确保其在并行训练下的有效性。监督训练的实现形式在于每个模块的反向传播,而非整个网络的反向传播。就诸多问题而言,DSN 在执行上优于典型的 DBN,因而成为了一种广受认可的高效网络架构。

开源框架

虽说我们完全有可能实现上述深度学习架构,但是从头开始可能很耗时,而且还有考虑优化和成熟的时间。幸运的是,您可以通过利用多个开放源码框架来轻松实施和部署深度学习算法。这些框架支持的语言包括 Python、C/C++、Java® 语言等等。下面,我们来探讨三个最热门的框架及其优缺点。

Caffe

最热门的一个深度学习框架是 Caffe。最初,Caffe 是博士论文的开发项目之一,但现如今已在 Berkeley Software Distribution 下发布。Caffe 支持多种深度学习架构,包括 CNN 和 LSTM,但显然不支持 RBMS 或 DBMS(尽管即将发布的 Caffe2 将包含有此类支持)。

Caffe 已用于图像分类及其他视觉应用,支持基于 GPU 的加速度和 NVIDIA CUDA 深度神经网络库。Caffe 支持开放式多处理 (OpenMP),用于在系统集群上并行深层学习算法。Caffe 和 Caffe2 用 C++ 编写,可提供用于深度学习和执行的 Python 和 MATLAB 接口。

Deeplearning4j

Deeplearning4j 是一种热门的深度学习框架,虽以 Java 技术为核心,但包含了其他语言的应用编程接口,比如 Scala、Python 和 Clojure。该框架在 Apache 许可下发布,可提供 RBM、DBN、CNN 和 RNN 等方面的支持。此外,Deeplearning4j 还包含有配合 Apache Hadoop 和 Spark(大数据处理框架)使用的分布式并行版本。

Deeplearning4j 已用于解决多种问题,包括金融领域的欺诈检测、推荐系统、图像识别和网络安全(网络入侵检测)。该框架与 CUDA 集成,不仅可优化 GPU,还可与 OpenMP 或 Hadoop 一同分发。

TensorFlow

TensorFlow 是由 Google 开发的一个开放源代码库,是封闭源 DistBelief 的产物。您可以使用 TensorFlow 来训练和部署各种神经网络(CNN、RBM、DBN 和 RNN),并根据 Apache2.0 许可来发布。TensorFlow 已用于解决多种问题,比如图像字幕处理、恶意软件检测、语音识别、信息检索等等。最近发布了一个以 Android 为中心的堆栈 TensorFlow Lite。

您可以在 TensorFlow、Python、C++、Java 语言、RISE 或 GO(Python 最稳定)中开发应用,并用 Hadoop 分发它们的执行。除专用硬件接口之外,TensorFlow 还支持 CUDA。

分布式深度学习

IBM 分布式深度学习 (DDL) 堪称“深度学习的喷气式引擎”,是一个链接到主要框架(比如 Caffe、TensorFlow)的库。DDL 可用于加速服务器集群和数百个 GPU 上的深度学习算法。DDL 通过定义结果数据在 GPU 之间必须采用的最佳路径来优化神经元计算的通信。它解决了深度学习集群的瓶颈,击败了 Microsoft 最近设置的一项前期图像识别任务。

未来展望

深度学习体现在一系列架构上,这些架构可以针对多种问题领域构建解决方案。这些解决方案可以是以前馈为重点的网络或循环网络,而且支持考虑先前的输入。尽管构建此类深层架构可能很复杂,但是各种开放源码解决方案(比如 Caffe、Deeplearning4j、TensorFlow、DDL)均可帮助您快速实现启动和运行。

通过本循环神经网络 developerWorks 教程,深入了解神经网络s。