人工智能算法深度学习(nolearn是一个Python软件包它提供了几种机器学习算法的抽象)

(nolearn是一个Python软件包它提供了几种机器学习算法的抽象)

https://m.toutiao.com/is/dxBg8Eg/?=人工智能算法

深度学习是神经网络编程中相对较新的进展,它代表了一种训练深度神经网络的方法。本质上,任何具有两层以上的神经网络都是深度神经网络。自从Pitts(1943)引入多层感知机(multilayer perceptron)以来,我们就已经具备创建深度神经网络的能力。但是,直到Hinton(1984)成为第一个成功训练这些复杂神经网络的研究者之后,我们才能够有效地训练神经网络。

9.1 深度学习的组成部分

深度学习由许多不同的技术组成,本章概述了这些技术。后文将包含有关这些技术的更多信息。深度学习通常包括以下特征:

  • 部分标记的数据;
  • 修正线性单元;
  • 卷积神经网络;
  • 神经元Dropout。

以下各节概述了这些技术。

9.2 部分标记的数据

大多数学习算法是有监督的或无监督的。有监督的训练数据集为每个数据项提供了预期的结果;无监督的训练数据集不提供预期的结果。预期的结果称为标记。学习的问题在于大多数数据集是带标记的和未带标记的数据项的混合。

要理解标记和未标记数据之间的区别,请考虑以下真实世界的例子。当你还是小孩子的时候,在成长过程中可能会看到许多车辆。在生命的早期,你不知道自己在看轿车、卡车,还是货车,只知道看到的是某种车辆。你可以将这种接触看成车辆学习过程中无监督的部分。那时,你学习了这些车辆之间的共同特征。

在学习过程的后期,你将获得标记。当你遇到不同的车辆时,一位成年人告诉你,你看的是汽车、卡车或货车。无监督的训练为你奠定了基础,而你会以这些知识为基础获得标记。如你所见,有监督和无监督的学习在现实生活中非常普遍。深度学习用它自己的方式,结合无监督和有监督的学习数据,很好地完成了工作。

一些深度学习架构使用不带结果的整个训练集,来处理部分标记的数据,并初始化权重。你可以在没有标记的情况下,独立训练各个层。因为你可以并行训练这些层,所以这个过程是可伸缩的。一旦无监督阶段初始化了这些权重,监督阶段就可以对其进行调整。

9.3 修正线性单元

修正线性单元(ReLU)已成为深度神经网络隐藏层的标准激活函数,而受限玻尔兹曼机是深度置信神经网络的标准。除了用于隐藏层的ReLU激活函数外,深度神经网络还将对输出层使用线性或Softmax激活函数,具体取决于神经网络是支持回归,还是分类。我们在第1章“神经网络基础”中介绍了ReLU,并在第6章“反向传播训练”中扩展了相关信息。

9.4 卷积神经网络

卷积是一项经常与深度学习结合的重要技术。Hinton(2014)引入了卷积,以使图像识别神经网络的工作方式类似于生物系统,并获得了更准确的结果。卷积的一种方法是稀疏连接,即不会产生所有可能的权重连接。图9-1展示了稀疏连接。

图9-1 稀疏连接

常规前馈神经网络通常会在两层之间创建所有可能的权重连接。在深度学习术语中,我们将这些层称为“稠密层”(dense layer)。卷积神经网络不表示所有可能的权重,但其会共享权重,如图9-2所示。

图9-2 共享权重

如图9-2所示,神经元只是共享3个独立的权重。红线(实线)、黑线(虚线)和蓝线(虚线)表示各个权重。权重共享使程序可以存储复杂的结构,同时保持内存使用和计算的效率。

本节概述了卷积神经网络。第10章“卷积神经网络”将用一整章讨论这种神经网络。

9.5 神经元Dropout

Dropout是一种正则化算法,对深度学习有很多好处。和大多数正则化算法一样,Dropout可以防止过拟合。你也可以和卷积一样,以逐层的方式将Dropout应用于神经网络。你必须将一个层指定为Dropout层。实际上,在神经网络中,你可以将这些Dropout层与常规层和卷积层混合使用。切勿将Dropout层和卷积层混合在单个层中。

Hinton(2012)引入了Dropout,将其作为一种简单有效的正则化算法,以减少过拟合。Dropout通过移除Dropout层中的特定神经元来发挥作用。丢弃这些神经元的行为可防止其他神经元过度依赖于被丢弃的神经元。程序将删除这些选定的神经元及其所有连接。图9-3说明了这个过程。

图9-3 Dropout层

图9-3所示的神经网络从上至下包含一个输入层、一个Dropout层和一个输出层。Dropout层已删除了几个神经元。虚线圆圈表示Dropout算法删除的神经元,虚线连接线表示Dropout算法删除神经元时删除的权重。

Dropout和其他形式的正则化都是神经网络领域广泛讨论的主题。第12章“Dropout和正则化”将介绍正则化,尤其侧重于介绍Dropout。该章还包含有关L1和L2正则化算法的解释。L1和L2不鼓励神经网络使用过多的权重,也不鼓励神经网络包含某些不相关的输入。本质上,单个神经网络通常使用Dropout以及其他正则化算法。

9.6 GPU训练

Hinton(1987)提出了一种非常新颖的算法,来有效地训练深度信念神经网络。在后文,我们将研究该算法和深度信念神经网络。如前所述,深度神经网络几乎与神经网络存在的时间一样长。但是,在Hinton的算法被提出之前,没有有效的算法来训练深度神经网络。反向传播算法非常慢,梯度消失问题阻碍了训练。

GPU,即计算机中负责图形显示的部分,是研究人员解决前馈神经网络训练问题的一种方法。由于现代视频、游戏使用了3D图形,因此我们大多数人都熟悉GPU。渲染这些图形、图像在数学上运算量大,而且为了执行这些操作,早期的计算机依靠CPU。但是,这种方法效率不高。现代视频、游戏中的图形系统处理需要专用电路,这种电路集成到了GPU或视频卡上。本质上,现代GPU是在计算机中运行的计算机。

研究人员发现,根据GPU的处理能力可以将其用于密集的数学任务,如神经网络训练。除了计算机图形学之外,我们将用于一般计算任务的GPU称为通用GPU(General-Purpose use of GPU,GPGPU)。当应用于深度学习时,GPU的表现异常出色。将它与ReLU激活函数、正则化和常规反向传播算法相结合,可以产生惊人的结果。

但是,GPGPU可能难以使用,因为为GPU编写的程序必须使用名为C99的编程语言。该语言与常规C语言非常相似,但在许多方面,GPU所需的C99比常规C语言困难得多。此外,GPU仅擅长特定的任务,即使是对GPU有利的任务,也因为优化C99代码而变得具有挑战性。GPU必须平衡几类内存、寄存器,以及数百个处理器内核的同步。此外,GPU处理有两种相互竞争的标准:CUDA和OpenCL。两种标准为程序员学习制造了更多的困难。

幸运的是,你无须学习GPU编程,也可以利用它的处理能力。除非你愿意花费大量的精力,来学习一个复杂且不断发展的领域的细枝末节,否则我们不建议你学习GPU编程,因为它与CPU编程完全不同。产生有效的、基于CPU程序的好技术,通常会产生极其低效的GPU程序,反之亦然。如果你想使用GPU,就应该使用支持它的、已有的软件包。如果你的需求不适合深度学习软件包,则可以考虑使用线性代数软件包,如CUBLAS,其中包含许多高度优化的算法,以及针对机器学习通常需要的线性代数。

高度优化的深度学习框架和快速GPU的处理能力可能是惊人的。GPU可以凭借强大的处理能力获得出色的结果。2010年,瑞士AI实验室IDSIA证明,尽管有梯度消失问题,但GPU的出色处理能力,使得反向传播对深度前馈神经网络来说是可行的[1]。在著名的MNIST手写数字识别问题上,该方法胜过了所有其他机器学习技术。

9.7 深度学习工具

深度学习的主要挑战之一,是训练神经网络所需的处理时间。我们经常运行训练算法数小时,甚至数天,以寻找适合数据集的神经网络。我们在研究和预测模型中使用了几种框架。本书的示例也利用了这些框架,我们将详细介绍所有这些框架,以供你创建自己的实现。但是,除非你的目标是进行研究以增强深度学习方法本身,否则使用较为有名的框架将最适合你。这些框架中的大多数都经过了调整,可以非常快速地进行训练。

我们可以将本书中的示例分为两种。第一种示例向你展示如何实现神经网络或训练算法。本书中的大多数示例都是基于算法的,我们将在最低层面上探讨该算法。

应用示例是本书中包含的第二种示例。这些更高层面的示例说明了如何使用神经网络和深度学习算法。这些示例通常会使用本节中讨论的框架之一。通过这种方式,本书在理论和实际应用之间取得了平衡。

 9.7.1 H2O

H2O是一种机器学习框架,支持多种编程语言。尽管H2O是用Java实现的,但它被设计为一个Web服务。H2O可以与R、Python、Scala、Java以及可以与H2O的REST API通信的任何语言一起使用。

此外,H2O可以与Apache Spark一起用于大数据和云计算操作。Sparking Water软件包让H2O可以在跨计算机网络的内存中运行大型模型。

除了深度学习,H2O还支持其他多种机器学习模型,如对数概率回归、决策树和梯度提升(gradient boosting)。

 9.7.2 Theano

Theano是Python的数学软件包,类似于广泛使用的Python软件包NumPy[2]。与NumPy一样,Theano主要关注数学。尽管Theano并未直接实现深度神经网络,但它提供了程序员创建深度神经网络应用程序所需的所有数学工具。Theano还直接支持GPGPU。

 9.7.3 Lasagne和nolearn

由于Theano不直接支持深度学习,因此人们在Theano上构建了多个软件包,以便程序员可以轻松地实现深度学习。Lasagne和nolearn是经常一起使用的两个包。nolearn是一个Python软件包,它提供了几种机器学习算法的抽象。通过这种方式,nolearn类似于流行的框架scikit-learn。scikit-learn广泛关注机器学习,nolearn专门研究神经网络。Lasagne是nolearn支持的神经网络软件包之一,它提供了深度学习支持。

你可以在GitHub上找到nolearn软件包。

深度学习框架Lasagne的名称源自意大利美食千层面(lasagna)。拼写lasagne和lasagna均被视为这种意大利美食的有效拼写。在意大利语中,lasagne是单数形式,lasagna是复数形式。无论使用哪种拼写,用lasagna来形容深度学习框架都很形象。图9-4展示了千层面与深度神经网络一样,由许多层组成。

图9-4 千层面

 9.7.4 ConvNetJS

人们还为JavaScript创建了深度学习支持。ConvNetJS软件包实现了许多深度学习算法,尤其是在卷积神经网络领域。ConvNetJS的主要目标是在网站上创建深度学习示例。

9.8 深度信念神经网络

深度信念神经网络(DBNN)是深度学习的最早应用之一。DBNN就是具有多个层的常规信念神经网络。Neil在1992年提出的信念神经网络不同于常规的FFNN。Hinton(2007)将DBNN描述为“由多层随机的潜在变量组成的概率生成式模型。”由于这个技术描述起来很复杂,因此我们要定义一些术语。

  • 概率:DBNN用于分类,其输出是输入属于每个类别的概率。
  • 生成式:DBNN可以为输入生成合理的、随机创建的值。一些DBNN文献将这个特征称为“做梦”(dreaming)。
  • 多层:与神经网络一样,DBNN可以由多层组成。
  • 随机的潜在变量:DBNN由玻尔兹曼机组成,这些机器会产生一些无法直接观察到(潜在)的随机值。

DBNN和FFNN之间的主要区别总结如下。

  • DBNN的输入必须是二进制数,FFNN的输入必须是十进制数。
  • DBNN的输出是输入所属的分类,FFNN的输出可以是类(分类)或数字预测(回归)。
  • DBNN可以根据给定的结果生成合理的输入,FFNN不能像DBNN一样表现。

这些是DBNN和FFNN重要的差异。第一点是DBNN的最大限制因素之一。DBNN仅接收二进制输入,这一事实通常严重限制了它可以解决的问题类型。你还需要注意,DBNN只能用于分类,而不能用于回归。换言之,DBNN可以将股票分为购买、持有或出售等类别,但它无法提供有关库存的数字预测,如未来30天内可能达到的数量。如果需要这些特征中的任何一个,则应考虑使用常规的深度前馈神经网络。

与FFNN相比,DBNN最初似乎有些局限性。但是,它们确实具有根据给定输出生成合理的输入的能力。最早的DBNN实验之一是让DBNN使用手写样本将10个数字分类。这些数字来自MNIST手写数字数据集。用MNIST手写数字对DBNN进行训练,它就能产生每个数字的新表示,如图9-5所示。

图9-5 DBNN生成的数字

以上数字摘自Hinton(2006)的深度学习论文。第一行显示了DBNN从其训练数据生成的各种不同的0。

RBM是DBNN的中心。提供给DBNN的输入通过一系列堆叠的RBM传递,它们构成了神经网络的各层。创建附加的RBM层会导致DBNN更深。尽管我们没有对RBM进行监督,但是希望对最终的DBNN进行监督。为了完成监督,我们添加了一个最终的对数概率回归层,以区分类别。对于Hinton的实验(见图9-6),类别是10个数字。

图9-6 DBNN

图9-6展示了一个DBNN,使用的超参数与Hinton的实验相同。超参数指定了神经网络的架构,如层数、隐藏的神经元计数和其他设置。呈现给DBNN的每个数字图像大小均为28×28(即784)维的向量。这些图像是单色的(即黑白的),每个像素都可以用一个比特来表示,与DBNN的所有输入均为二进制的要求兼容。上面的神经网络具有三层堆叠的RBM,分别包含500个神经元、500个神经元和2 000个神经元。

以下各小节讨论用于实现DBNN的多种算法。

 9.8.1 受限玻尔兹曼机

第3章“霍普菲尔德神经网络和玻尔兹曼机”包含了对玻尔兹曼机的讨论,这里不赘述。本章介绍玻尔兹曼机的受限版本——RBM,并堆叠这些RBM以获得深度。第3章的图3-4展示了RBM。RBM与玻尔兹曼机的主要区别在于,RBM可见(输入)神经元和隐藏(输出)神经元具有仅有的连接。在堆叠RBM的情况下,隐藏神经元将成为下一层的输出。图9-7展示了如何将两台RBM堆叠在一起。

图9-7 堆叠的RBM

我们可以计算RBM的输出,可以利用第3章“霍普菲尔德神经网络和玻尔兹曼机”中的公式3-6进行计算。唯一的区别在于,现在我们有两台RBM堆叠在一起。RBM1接收传递到其可见神经元的3个输入;隐藏神经元将其输出直接传递到RBM2的两个输入(可见神经元)。请注意,两个RBM之间没有权重,RBM1中H1和H2神经元的输出直接从RBM2传递给I1和I2。

 9.8.2 训练DBNN

训练DBNN的过程需要许多步骤。尽管这个过程背后的数学原理可能有些复杂,但是你无须了解训练DBNN的每个细节也可以使用它们。你只需要了解以下要点。

  • DBNN接受有监督和无监督训练。
  • 在无监督部分,DBNN使用训练数据而没有标记,这使DBNN可以混合使用监督数据和无监督数据。
  • 在有监督部分,仅使用带有标记的训练数据。
  • 在无监督部分,每个DBNN层都经过独立训练。
  • 可以在无监督部分(通过线程)训练DBNN层。
  • 在无监督部分完成之后,通过有监督对数概率回归来优化层的输出。
  • 顶层对数概率回归层预测输入所属的分类。

有了这些知识,你就可以跳到本章9.8.8小节的深度信念应用。如果你想了解DBNN训练的具体细节,请继续阅读。

图9-8总结了DBNN训练的步骤。

图9-8 DBNN训练

 9.8.3 逐层采样

在单层上执行无监督训练时,第一步是计算直到该层的DBNN的所有值。你将针对每个训练集进行这种计算,DBNN将为你提供当前正在训练的层的采样值。采样是指神经网络根据概率随机选择一个真/假值。

你需要理解,抽样使用随机数为你提供结果。由于这种随机性,你不会总是获得相同的结果。如果DBNN确定隐藏神经元为真的概率为0.75,那么有75%的时间你将获得真值。逐层采样与第3章“霍普菲尔德神经网络和玻尔兹曼机”中用于计算玻尔兹曼机的输出的方法非常相似。我们将使用第3章中的公式3-6来计算概率。唯一的不同是,我们将使用公式3-6给出的概率来生成随机样本。

逐层采样的目的是产生一个二进制向量,提供给对比散度算法(contrastive divergence algorithm)。在训练每个RBM时,我们总是将前一个RBM的输出作为当前RBM的输入。如果我们要训练第一个RBM(最接近输入),只需将训练输入向量用于对比散度。该过程允许对每个RBM进行训练。DBNN的最终Softmax层在无监督阶段未受训练,最后的对数概率回归阶段将训练Softmax层。

 9.8.4 计算正梯度

一旦逐层训练完了每个RBM层,我们就可以利用“上下算法”(up-down algorithm)或对比散度算法。完整的算法包括以下步骤,这些步骤将在后文中介绍。

  • 计算正梯度;
  • 吉布斯采样;
  • 更新权重和偏置;
  • 有监督的反向传播。

和第6章“反向传播训练”中介绍的许多基于梯度下降的算法一样,对比散度算法也基于梯度下降。它使用函数的导数来寻找让该函数产生最小输出的函数输入。在对比散度过程中估计了几个不同的梯度,我们可以使用这些估计值代替实际梯度计算,因为实际梯度太复杂而无法计算。对于机器学习,采用估计值通常就足够了。

另外,我们必须通过将可见神经元传播到隐藏神经元来计算隐藏神经元的平均概率。该计算是上下算法中的“向上”部分。公式9-1执行以下计算:

(9-1)

公式9-1计算每个隐藏神经元的平均概率(

)。

上方的短横表示它是一个平均值,正号标记表示我们正在计算算法中正向(即“向上”)部分的平均值。偏置会添加到所有可见神经元的加权和的S型激活函数值中。

接下来,必须为每个隐藏神经元采样一个值。利用刚计算出的平均概率,该值将随机分配为true(1)或false(0)。公式9-2完成了这种采样:

(9-2)

公式9-2假设

是0~1的一个均匀随机数。均匀随机数意味着该范围内的每个可能的数字都有相等的被选择概率。

 9.8.5 吉布斯采样

负梯度的计算是上下算法的“向下”阶段。为了完成这种计算,该算法使用吉布斯采样来估计负梯度的平均值。Geman D.和Geman S.(1984)引入了吉布斯采样,并以物理学家Josiah Willard Gibbs命名。该技术通过循环迭代

次来完成,以提高估计的质量。每次迭代执行两个步骤:

(1)采样可见神经元提供给隐藏神经元;

(2)采样隐藏神经元提供给可见神经元。

对于吉布斯采样的第一次迭代,我们从9.8.4小节获得的正隐藏神经元样本开始。我们将从采样可见神经元的平均概率[即步骤(1)]。接下来,我们将利用这些可见的隐藏神经元,对隐藏的神经元进行采样[即步骤(2)]。这些新的隐藏概率是负梯度。对于下一次迭代,我们将使用负梯度代替正梯度。这个过程在每次迭代中重复,并产生更好的负梯度。公式9-3完成了对可见神经元的采样:

(9-3)

公式9-3实质上是公式9-1取反的结果。在这里,我们使用隐藏值确定可见平均值。然后,正如对正梯度所做的,我们使用公式9-4采样一个负概率:

(9-4)

公式9-4假设

是0~1的一个均匀随机数。

公式9-3和公式9-4只是吉布斯采样步骤的一半。这些方程式实现了步骤(1),它们在给定隐藏神经元的情况下对可见神经元进行了采样。接下来,我们必须完成步骤(2)。给定可见的神经元,我们必须对隐藏神经元进行采样。这个过程与9.8.4小节“计算正梯度”非常相似。但这一次,我们要计算负梯度。

刚刚计算出的可见神经元的样本可以获得隐藏平均值,如公式9-5所示:

(9-5)

和以前一样,平均概率可以采样一个实际值。在这种情况下,我们使用隐藏平均值来采样一个隐藏值,如公式9-6所示:

(9-6)

吉布斯采样过程继续进行。负的隐藏样本可以在每次迭代中进行处理。一旦计算完成,你将拥有以下6个向量:

  • 隐藏神经元的正平均概率;
  • 隐藏神经元的正采样值;
  • 可见神经元的负平均概率;
  • 可见神经元的负采样值;
  • 隐藏神经元的负平均概率;
  • 隐藏神经元的负采样值。

这些值将更新神经网络的权重和偏置。

 9.8.6 更新权重和偏置

所有神经网络训练的目的都是更新权重和偏置。这种调整使神经网络能够学习执行希望它执行的任务。这是DBNN训练过程中无监督部分的最后一步。在这个步骤中,将更新单层(玻尔兹曼机)的权重和偏置。如前所述,各个玻尔兹曼层是独立训练的。

权重和偏置会独立更新。公式9-7展示了如何更新权重:

(9-7)

学习率(ε)指定应该采用计算出的变化的比率。较高的学习率将使学习速度更快,但它们可能会跳过一组最佳权重。较低的学习率将使学习速度更慢,但结果的质量可能更高。值

代表当前训练集元素。因为

是向量(数组),所以

用“|| ||”标识其长度。公式9-7还使用了正平均隐藏概率、负平均隐藏概率和负采样值。

公式9-8以类似的方式计算偏置:

(9-8)

公式9-8使用了来自正向阶段的采样隐藏值、来自负向阶段的平均隐藏值,以及输入向量。权重和偏置更新后,训练的无监督部分就完成了。

 9.8.7 DBNN反向传播

到目前为止,DBNN训练一直侧重于无监督训练。DBNN仅使用训练集输入(

值),即使数据集提供了预期的输出(

值),无监督的训练也没有使用它。现在,使用预期的输出来训练DBNN。在最后阶段,我们仅使用数据集中包含预期输出的数据项。这个步骤允许程序将DBNN与数据集一起使用,而其中每个数据项不一定具有预期的输出。我们将该数据称为部分标记的数据集。

DBNN的最后一层就是针对每个分类的神经元。这些神经元具有前一个RBM层输出的权重。这些输出神经元都使用S型激活函数和Softmax层。Softmax层确保每个类的输出总和为1。

采用常规的反向传播训练最后一层。最后一层实质上是前馈神经网络的输出层,前馈神经网络从顶层RBM接收其输入。第6章“反向传播训练”包含了对反向传播的讨论,因此不赘述。DBNN的主要思想是,层次结构允许每一层解释下一层的数据。这种层次结构使学习可以遍及各个层。较高的层学习更多的抽象概念,而较低的层由输入数据形成。在实践中,与常规的反向传播训练前馈神经网络相比,DBNN可以处理更复杂的模式。

 9.8.8 深度信念应用

本小节介绍一个简单的DBNN示例。这个示例就是接受一系列输入模式及其所属的分类。输入模式如下所示:

[[1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 0, 1], [0, 0, 0, 0, 1, 1, 1, 0]]

我们提供每个训练集元素的预期输出。这些信息指定了上述每个元素所属的分类,如下所示:

[[1, 0], [1, 0], [1, 0], [0, 1], [0, 1], [0, 1]]

本书示例中提供的程序将创建具有以下配置的DBNN。

  • 输入层的大小:8。
  • 隐藏的第1层:2。
  • 隐藏的第2层:3。
  • 输出层的大小:2。

首先,我们训练每个隐藏层。然后,我们在输出层执行对数概率回归。该程序的输出如下所示:

Training Hidden Layer #0Training Hidden Layer #1Iteration: 1, Supervised training: error = 0.2478464544753616Iteration: 2, Supervised training: error = 0.23501688281192523Iteration: 3, Supervised training: error = 0.2228704042138232...Iteration: 287, Supervised training: error = 0.001080510032410002Iteration: 288, Supervised training: error = 7.821742124428358E-4[0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0] -> [0.9649828726012807, 0.03501712739871941][1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0] -> [0.9649830045627616, 0.035016995437238435][0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0] -> [0.03413161595489315, 0.9658683840451069][0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0] -> [0.03413137188719462, 0.9658686281128055]

如你所见,该程序首先训练了隐藏层,然后进行了288次回归迭代。在迭代过程中,误差水平显著下降。最后,样本数据查询了神经网络。神经网络响应是在我们上面指定的两个类别中输入样本出现在每个类别中的概率。

如神经网络报告了以下元素:

[0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0]

其中,元素属于1类的概率约为96%,而属于2类的概率只有约4%。针对每个分类报告的两个概率之和必须为100%。

本文摘自:《人工智能算法(卷3):深度学习和神经网络》

自早期以来,神经网络就一直是人工智能(Artificial Intelligence,AI)的支柱。现在,令人兴奋的新技术(如深度学习和卷积)正在将神经网络带入一个全新的方向。本书将演示各种现实世界任务中的神经网络,如图像识别和数据科学。我们研究了当前的神经网络技术,包括ReLU激活、随机梯度下降、交叉熵、正则化、Dropout及可视化等。

本书适合作为人工智能入门读者以及对人工智能算法感兴趣的读者阅读参考。

(0)

相关推荐