Python Deep Learning 简明教程

Deep Neural Networks

深度神经网络(DNN)是在输入层和输出层之间具有多个隐藏层的 ANN。与浅层 ANN 类似,DNN 可以对复杂的非线性关系建模。

神经网络的主要目的是接收一组输入,对它们执行渐进的复杂计算,并提供输出以解决现实世界的问题,例如分类。我们限制自己使用前馈神经网络。

我们在深度网络中有一个输入、一个输出和一个顺序数据流。

deep network

神经网络广泛用于监督学习和强化学习问题。这些网络基于连接在一起的一组层。

在深度学习中,隐藏层的数量(大多是非线性的)可以很大;比如大约 1000 层。

DL 模型产生的结果比普通 ML 网络好得多。

我们主要使用梯度下降法优化网络并最小化损失函数。

我们可以使用 Imagenet ,这是数百万张数字图像的存储库,将数据集分类到猫和狗等类别中。除静态图像外,DL 网络越来越多地用于动态图像以及时间序列和文本分析。

训练数据集是深度学习模型的重要组成部分。此外,反向传播是训练 DL 模型的主要算法。

DL 涉及训练具有复杂输入输出变换的大型神经网络。

DL 的一个示例是将照片映射到照片中的人名,就像他们在社交网络上所做的那样,用短语描述照片是 DL 的另一个最新应用。

dl mapping

神经网络是具有输入(如 x1、x2、x3……)的函数,这些输入在两个(浅层网络)或多个中间操作(也称为层,深度网络)中转换为输出(如 z1、z2、z3 等)。

权重和偏差逐层变化。“w”和“v”是神经网络层的权重或突触。

深度学习的最佳用例是监督学习问题。在这里,我们有一组具有所需输出集的大量数据输入。

backpropagation algorithm

在这里,我们应用反向传播算法以获得正确的输出预测。

深度学习最基本的数据集是 MNIST,它是一个手写数字数据集。

我们可以使用 Keras 训练卷积神经网络来对来自此数据集的手写数字图像进行分类。

神经网络分类器的激活或激活会产生一个分数。例如,为了将患者分类为患病和健康,我们考虑身高、体重、体温、血压等参数。

高分表示患者生病了,而低分表示患者健康。

输出和隐层中的每个节点都有自己的分类器。输入层接受输入,并将输入分数传递至下一隐层,以进一步激活,一直传递至输出。

这种从左向右从输入到输出的进行称之为 forward propagation.

神经网络中的信用分配路径 (CAP) 是从输入到输出的一系列转换。CAP 会详细说明输入和输出之间可能的因果关系。

对于给定的前馈神经网络的 CAP 深度,或者 CAP 深度就是隐藏层数加一,因为包括输出层。对于递归神经网络,其中一个信号可能会多次传播通过一个层,CAP 深度可能无穷大。

Deep Nets and Shallow Nets

深度学习和浅层学习之间没有明确的深度阈值区分;但大多数人都同意,对于具有多个非线性层的深度学习,CAP 必须大于 2。

神经网络中的基本节点是一个感知,模拟了生物神经网络中的神经元。然后我们得到多层感知器或 MLP。每组输入都会被一组权重和偏置修改;每条边都有一个唯一的权重,每个节点都有一个唯一的偏置。

神经网络的预测 accuracy 取决于其 weights and biases.

提高神经网络准确度的过程称为 training. 。从前馈传播网络输出与已知正确的该值进行比较。

cost function or the loss function 是生成输出与实际输出之间的差异。

训练的目的是使训练成本在数百万个训练示例中尽可能小。要做到这一点,网络会调整权重和偏置,直到预测值与正确输出值匹配。

经过充分训练后,神经网络有潜力每次都能进行准确预测。

当模式变得复杂,你想让你的计算机识别它们时,你必须使用神经网络。在这样复杂模式的场景中,神经网络优于所有其他竞争算法。

现在有 GPU 可以比以往任何时候都训练得更快。深度神经网络已经在彻底改变人工智能领域。

计算机已被证明擅长执行重复计算和遵循详细指令,但在识别复杂模式方面表现不佳。

如果存在识别简单模式的问题,支持向量机 (svm) 或逻辑回归分类器可以很好地完成这项工作,但是随着模式的复杂性的增加,除了使用深度神经网络别无他法。

因此,对于像人脸一样的复杂模式,浅层神经网络会失败,别无选择,只能转向具有更多层的深度神经网络。深度网络能够分解复杂的模式,将其分解为更简单的模式来完成任务。例如,人脸;深度网络将使用边来检测嘴唇、鼻子、眼睛、耳朵等部分,然后将这些部分重新组合在一起形成一张人脸。

正确预测的准确性变得如此之高,以至于最近在谷歌模式识别挑战赛中,深度网络击败了人类。

这种分层感知器的网络想法已经存在一段时间;在该领域,深度网络模仿人脑。但其中一个缺点是它们需要很长的时间来训练,这是一种硬件限制。

然而最近的高性能GPU已经能够在不到一周的时间内训练这样的深度网络;而快速 CPU 可能需要数周或数月才能完成同样的工作。

Choosing a Deep Net

如何选择深度网络?我们必须决定我们是要构建分类器,还是要尝试在数据中查找模式以及我们要使用无监督学习。为了从一组未标记的数据中提取模式,我们使用限制 Boltzmann 机或自动编码器。

在选择深度网络时考虑以下几点 −

  1. 对于文本处理、情绪分析、解析和命名实体识别,我们使用循环网络或递归神经张量网络或 RNTN;

  2. 对于在字符级别操作的任何语言模型,我们使用循环网络。

  3. 对于图像识别,我们使用深度信念网络 DBN 或卷积网络。

  4. 对于对象识别,我们使用 RNTN 或卷积网络。

  5. 对于语音识别,我们使用循环网络。

一般来说,带有整流线性单元或 RELU 的深度信念网络和多层感知器都是分类的不错选择。

针对时间序列分析,我们始终建议使用递归网络。

神经网络已经存在超过 50 年,但直到现在才渐渐为人熟知。原因在于其训练困难;当我们尝试使用称为反向传播的方法来对它们进行训练时,我们会遇到一个称为梯度消失或梯度爆炸的问题。当出现这个问题时,训练会花费更长时间,并且准确率会退居其次。在训练数据集时,我们不断计算成本函数,即预测输出和由一组标记训练数据形成的实际输出之间的差异。然后,通过调整权重和偏差值,最小化成本函数,直至获得最低值。训练过程使用梯度,即成本相对于权重或偏差值的改变而改变的速率。

Restricted Boltzman Networks or Autoencoders - RBNs

2006 年,解决梯度消失问题取得了一项突破。杰弗里·辛顿(Geoff Hinton)设计了一种新策略,导致了 Restricted Boltzman Machine - RBM 的开发,这是一种浅层的两层网络。

第一层为 visible 层,第二层为 hidden 层。可见层中的每个节点都连接到隐藏层中的每个节点。该网络被称为受限,因为同一层内的任意两层都不允许共享连接。

自动编码器是将输入数据编码为向量的网络。它们创建原始数据的隐藏或压缩表示。这些向量可用于降维;向量将原始数据压缩为更少的维度。自动编码器与解码器配对,这样就可以根据输入数据的隐藏表示来重建输入数据。

RBM 是双向翻译器的数学等价物。前向传递获取输入并将它们翻译成对输入进行编码的一组数字。与此同时,后向传递获取这组数字并将它们翻译回重建的输入。训练有素的网络以很高的精度执行反向传播。

在这两个步骤中,权重和偏差都起着至关重要的作用;它们帮助 RBM 解码输入之间的相互关系,并在确定哪些输入对检测模式至关重要方面做出决策。通过前向和后向传递,RBM 被训练为以不同的权重和偏差重新构建输入,直到输入及其重构建尽可能接近。RBM 的一个有趣方面是数据不需要加标签。这对于照片、视频、语音和传感器数据等实际世界数据集来说非常重要,所有这些数据往往都没有标签。RBM 不会通过人工对数据进行标记,而是自动对数据进行分类;通过正确调整权重和偏差,RBM 能够提取重要特征并重建输入。RBM 是特征提取神经网络家族的一部分,旨在识别数据中的固有模式。它们也被称为自动编码器,因为它们必须编码自己的结构。

rbm structure

Deep Belief Networks - DBNs

深度信念网络(DBN)是通过组合 RBM 和引入一种巧妙的训练方法而形成的。我们有一个新的模型,它最终解决了梯度消失的问题。杰弗里·辛顿发明了 RBM 和深度信念网络,作为反向传播的替代方案。

DBN 在结构上类似于 MLP(多层感知器),但其在训练时有很大的不同。正是训练使得 DBN 能够优于其浅层对应网络

DBN 可以视作 RBM 的堆栈,其中一个 RBM 的隐藏层是其上方 RBM 的可见层。第一个 RBM 被训练为尽可能准确地重建其输入。

第一个 RBM 的隐藏层被用作第二个 RBM 的可见层,而第二个 RBM 使用第一个 RBM 的输出进行训练。这一过程会重复执行,直至网络中的每一层都完成训练。

在一个 DBN 中,每个 RBM 学习整个输入。DBN 通过对整个输入进行微调,像照相机镜头缓慢对焦图片一样缓慢地改善模型,从而全局工作。一组 RBM 的性能超过单个 RBM,就像多层感知器 MLP 的性能超过单个感知器一样。

在这个阶段,RBM 检测到了数据中的固有模式,但没有任何名称或标签。为了完成 DBN 的训练,我们必须为模式引入标签,并使用监督学习对网络进行微调。

我们需要一组非常小的标记样本,以便将特征和模式与名称关联起来。这组小标记的数据用于训练。与原始数据集相比,这组标记的数据可以非常小。

权重和偏差会稍作改变,从而导致网络对模式的理解发生微小变化,而且总体准确性通常会有一个小幅提升。

还可以使用 GPU 在合理的时间内完成训练,与浅层网络相比可以获得非常准确的结果,并且我们也看到了对消失梯度问题的解决方案。

Generative Adversarial Networks - GANs

生成对抗网络是由两个网络构成的深度神经网络,它们相互竞争,因此得名“对抗”。

GAN 是由蒙特利尔大学的研究人员在 2014 年发表的一篇论文中引入的。Facebook 的人工智能专家 Yann LeCun 提到了 GAN,他称对抗训练“是过去 10 年机器学习中最有趣的想法”。

由于网络可以扫描并学习模仿任何数据分布,因此 GAN 的潜力巨大。可以教授 GAN 在任何领域(图像、音乐、语言、散文)创建与我们自己非常相似的平行世界。它们在某种程度上是机器人艺术家,并且其输出非常令人印象深刻。

在 GAN 中,称为生成器的其中一个神经网络生成新的数据实例,而称为鉴别器的另一个神经网络则评估它们以判断其真实性。

假设我们试图生成类似于 MNIST 数据集中发现的手写数字,该数据集来自现实世界。鉴别器的职责是对显示的来自真实 MNIST 数据集的实例进行识别并将它们识别为真实。

现在考虑 GAN 的以下步骤:

  1. 生成器网络以随机数的形式获取输入并返回图像。

  2. 将生成的图像连同从实际数据集中获取的图像流一起作为输入提供给鉴别器网络。

  3. 鉴别器获取真实图像和假图像并返回概率,为 0 到 1 之间的数字,其中 1 表示真品的预测,而 0 表示假货。

  4. 因此,你有一个双反馈回路——鉴别器与图像的真实性处于反馈回路中,这是我们已知的。生成器与鉴别器处于反馈回路中。

Recurrent Neural Networks - RNNs

RNN 是数据可以向任何方向流动的神经网络。这些网络用于语言建模或自然语言处理 (NLP) 等应用。

RNN 背后的基本概念是利用顺序信息。在正常神经网络中,假设所有输入和输出彼此独立。如果我们想预测句子中的下一个单词,我们必须知道它之前的单词。

RNN 被称为循环网络,因为它们对序列的每个元素重复相同的任务,而输出基于之前的计算。因此,可以说 RNN 具有“记忆”,该记忆可以捕获之前计算的信息。理论上,RNN 可以使用非常长序列中的信息,但实际上它们只能回溯几步。

recurrent neural networks

长短期记忆网络 (LSTM) 是最常用的 RNN。

RNN 已与卷积神经网络结合用于模型中,为未标记图像生成描述。令人惊讶的是,这种方式的效果非常好。

Convolutional Deep Neural Networks - CNNs

如果我们增加神经网络中的层数使其更深,就会增加网络的复杂性,并使我们能够对更复杂的功能进行建模。然而,权重和偏差的数量会呈指数增长。事实上,学习如此困难的问题对于普通神经网络来说可能是不可能的。这导致了一种解决方案,即卷积神经网络。

CNN 在计算机视觉中得到广泛使用;也已应用于用于自动语音识别的声学建模。

卷积神经网络背后的理念是“移动滤波器”,该滤波器会通过图像。该移动滤波器(或卷积)应用于特定邻近节点(例如像素),其中应用的滤波器为节点值 − 的 0.5 倍

著名研究员 Yann LeCun 开创了卷积神经网络。Facebook 使用这些网络作为面部识别软件。CNN 已成为机器视觉项目的首选解决方案。卷积网络有许多层。在 Imagenet 挑战赛中,一台机器在 2015 年的目标识别方面能够击败人类。

简而言之,卷积神经网络 (CNN) 是多层神经网络。这些层有时高达 17 层或更多,并且假设输入数据是图像。

convolutional neural networks

CNN 大大减少了需要调整的参数数量。因此,CNN 能有效地处理原始图像的高维度。