购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 神经网络

本书的两位作者都有多年的编程经验,一路走来都经历了一些精彩的时刻。Greg最开始在Apple IIe环境下学会了Basic编程。在学习PEEK、POKE和CALL命令之前,他已经编了一年左右的程序了。当第一次成功使用这些唤醒命令并运行程序,他坐下来思考并感叹:“哇!”。从那以后,他一直在以这种或那种形式编写程序。Greg和Paul编写他们第一个深度学习程序时也都有这种感觉。我们只能这么说:“哇!”

我们来谈谈深度学习及其含义。

传统的编程遵循简单、预定义的逻辑。如果(if)满足这个条件,则(THEN)执行另一个动作10次。它是如此强大,我们可以模拟美丽的风景、创造游戏,这些游戏将我们带到神奇、想象的世界。但它对语言翻译之类的任务几乎无能为力。想象一下把英语翻译成韩语的程序。这个程序需要为单词、短语、否定、语法、方言、标点符号等设置条件。很难想象把所有这些都放到线性逻辑中。随之而来的是机器学习。现在你输入一组英语文本和它们对应的韩语翻译。你可以通过给定的输入和预期输出来训练模型。你拥有的数据越多,训练的模型性能就越好。最后,输入一组没有韩语翻译的英文文本,它会按照所学的方法进行翻译。

这本身就很了不起,但它会变得更好。谷歌在2016年构建了一个深度学习算法,它能将英语翻译成韩语、韩语翻译成英语、日语翻译成英语、英语翻译成日语。这本身就很不可思议——但这还不是最令人惊奇的地方。这个神经网络能够将日语翻译成韩语,并将韩语翻译成日语,根本不需先翻译成英语。让他们来了解一下。网络中到底发生了什么,让这样的事情发生呢?这个网络学会了一种“元语言”——一种超越简单一对一语言翻译的语言映射。

当从日语翻译成韩语时,人们觉得模型首先会转换成英语(如图2-11中的曲线所示)。毕竟,模型并没有经过日语到韩语的训练。然而,模型并没有这样做。它直接将日语转换成了韩语(如图中虚线所示)。真是太神奇了!实际上有点诡异。

图2-11:谷歌语言翻译器

谷歌翻译器利用的就是一种神经网络。让我们来看看几个基本的神经网络架构。这是对神经网络和深度学习的简单介绍。我们希望它能激起你的好奇心,让你有足够的兴趣去深入了解。在此基础上,神经网络是一系列相互连接的处理模块,它们共同工作,接收输入并根据给定的输出进行求解。它们的灵感来自大脑中神经元和突触处理信息的方式,在解决从图像分类 到语言翻译等问题中发挥了重要作用。我们将在第9章对此进行更深入的讨论。

神经网络有三个基本层:

输入层

这是数据输入到网络的地方。

隐藏层

这一层执行基本计算,然后将权重传递给下一层。下一层可以是另一个隐藏层或输出层。

输出层

这是网络的终点,也是模型输出结果的地方。

神经网络有六个基本概念,下面将进行详细介绍。

前向传播

数据(权重和偏向)向前流经网络,从输入层经过各个隐藏层,最后流向输出层,如图2-12所示。

图2-12:前向传播

反向传播

当数据通过网络向前传播后,误差(期望值减去得到的值)再通过网络向后反馈,以调整权重和偏差,目的是减少误差,如图2-13所示。

图2-13:反向传播

梯度下降

一种试图找到函数最小值的优化函数。换句话说,梯度下降的目标是使代价函数(cost function)最小化(如图2-14所示)。当达到这个目标时,网络就被优化了。我们经常拿一个下山的人做比喻。它每一步都想向下走,直到到达最低点为止,这就是代价函数最小的地方。当达到这一点时,模型的精度最高。

图2-14:梯度下降

学习率

学习率是为了达到梯度下降的最小值(山底)而选择的步长大小。如果学习率太高,它错过最小值,并且有可能失去控制。如果学习率太低,这个过程将花费太长时间,如图2-15所示。

图2-15:学习率

神经元

神经元是神经网络的基础。它接受一个或多个输入,将一个函数应用到这些输入,并给出一个输出。它大体上基于人类神经元,如图2-16所示。

图2-16:神经元

函数

函数是一个神经元内的数学方程,它接受输入值并决定是否激活或触发。激活函数有很多种,以下几个是神经网络中最常见的激活函数。

Sigmoid

接收输入值,并将其映射到0到1的区间范围,如图2-17所示。

图2-17:Sigmoid激活函数

Tanh

接收输入值,并将其映射到-1到1的区间范围,如图2-18所示。

图2-18:Tanh激活函数

ReLU

修正线性单元(ReLU)将输入数值映射到0到∞。它使所有的负值变为0,如图2-19所示。

图2-19:修正线性单元

Leaky ReLU

接收输入值,并将其映射到非常小的负值到无穷大,如图2-20所示。

图2-20:带泄露修正线性单元

Softmax

接收输入值,并在一定的概率集合上预测结果。例如,在数字识别中,softmax函数返回10种可能的结果,分别对应数字0-9的概率。如果你有5种不同的苏打水,它将返回5种表示每种苏打水概率的结果,如图2-21所示。

图2-21:Softmax函数

ReLU有一个“死亡”问题——输入为负的时候输出总是0,因此容易卡死。使用Leaky ReLU在负值区域的微小斜率可以解决这个问题,同时可以降低学习率。

作为业务分析师,我们建议你对机器学习(特别是神经网络)要有一个高层次的认识。在这里,你可以深入了解sigmoid和tanh激活函数的确切区别,或者如何准确地使用梯度下降方法。你可以深入研究这个问题的数学原理,甚至可以就此写很多篇博士论文。本概述的目标是向SAP业务分析师深入讲解这门美丽的科学。此外,对这门科学的基本理解,将使你能够利用它获得实际的结果。

现在我们已经有了一些基础知识,在实践中用到的基本的神经网络有哪些呢?

单层感知器

单层感知器是神经网络的最简单形式(见图2-22)。它没有隐藏层,只有一个输入层和输出层。你可能认为图2-22中有两层,但是输入层不是真正的一层,因为它不进行计算。单层感知器接收多个输入信号,对它们进行求和,如果结果大于预先设定的阈值,它就会触发。因为它们要么有一个值,要么什么也没有,它们只能分辨两个线性可分的类。有什么大不了的?就其本身而言,单层感知器是相当有限的。然而,它们能组成其他神经网络。想象一下:人类大脑平均有1000亿个神经元。每个神经元都有一个简单的函数,就像单层感知器一样简单的函数。正是这些神经元在我们大脑中的合奏,才构成了我们是谁的音乐。

图2-22:单层感知器

多层感知器

多层感知器是由多个层组成的(见图2-23),它们通常相互连接。第一个隐藏层中的节点与输入层中的节点相连。在隐藏层中可以添加一个不与输入层相连的偏置节点。偏置节点增加了网络拟合数据的灵活性,其值通常设置为1。在更高级的神经网络中,批归一化过程执行此功能。

图2-23:多层感知器

卷积神经网络

卷积神经网络(CNN)是一个多层网络(见图2-24),它在各个层之间来回传递权重和偏差。CNN假设输入是图像,因此这些网络有特殊的层和编码。为什么不用多层感知器进行图像分类?好吧,图像数据很大,它不会很好地扩展。CNN使用由宽度、高度和深度组成的三维张量作为输入。

图2-24:卷积神经网络层

卷积神经网络由三种单独的网络层构成:

卷积层

卷积层的主要目的是从输入图像中提取特征。每一幅图像都是像素值的矩阵,使用滤波器在图像上滑动,计算滤波器与对应像素的点积,将其转换为特征。

池化层

池化层有时也称为下采样或子采样层。它通过使用最大值、平均值或总和来减少卷积层所获得特征的维度。

全连接层

类似于多层感知器,它使用SoftMax激活函数向输出层传递一个概率分布。

CNN可以变得非常复杂,查看一下谷歌的Inception模型,如图2-25所示。

图2-25:谷歌的Inception模型

神经网络领域正经历着迅速而激动人心的变化。杰出的人才正努力推动这个领域以令人难以置信的速度向前发展。研究人员Sara Sabour、Nicholas Frost和Geoffrey Hinton提出了名为CapsNet(胶囊网络)的建议(Hinton是这个领域的标志性人物,当论文中有他的署名时,一定要阅读它)。在多层神经网络中,可以根据需要添加越来越多的层。在胶囊网络中,你在神经网络的一层中又添加了一个神经网络。

正如Hinton所说,“卷积神经网络中的池化操作是一个很大的错误,而事实上它的效果如此之好,这是一场灾难。”

胶囊网络的精彩之处在于,它和人们进行图像处理的方式一样,不考虑图像的方向性。当孩子看到一只狗,狗的方向不会影响他对图像的感知。

胶囊网络现在还非常新,如果它们持续获得关注,我们将在本书的未来版本中更全面地讨论它们。

递归神经网络

递归神经网络是利用时间序列或序列数据的多层网络。它们的性能非常好,通常是自然语言处理(NLP)任务和时间序列数据的首选模型。我们将在第9章中看到它们的作用。在其他神经网络中,一旦数据传递到下一层,前一层就会被遗忘。然而,当你试图对序列数据进行预测时,记住之前发生的事情是很重要的。这些神经网络是递归的,因为它们会折回去查看之前的输入。在某种意义上说,它们有了记忆。

图2-26中循环的箭头表示RNN中的递归(图中似乎没有这样的结构,见参考图RNN结构)。可以看到,这个递归过程很短,它只在同一层上循环。从本质上说,它只有短期记忆。在网络中引入长短期记忆(LSTM)能够克服这个问题。

图2-26:前馈和递归神经网络

LSTM允许网络在很长的时间周期内进行学习。它有三种门:输入门、输出门和遗忘门。输入门决定哪些数据能够进来。输出门决定哪些数据用来输出。遗忘门决定哪些数据应该被遗忘。它们的架构对于初学者来说可能很难,所以只需要记住LSTM能让网络有长期记忆就够了。如果你有兴趣深入了解它们,请阅读这篇博客:http://bit.ly/2kjzC8A。

时间网络

时间卷积网络(TCN)是一种多层网络,具有卷积神经网络的优点,同时也考虑了位置信息。

一般来说,卷积神经网络非常擅长图像识别和语言分类。然而,它们并不关心位置的问题。例如,CNN想知道图像中是否包含尾巴、棕色的纽扣鼻和耷拉着的耳朵。然后,它将该图像分类为狗。它并不关心图像的位置信息。在语言分类中,CNN想要知道是否存在某些关键词,这些关键词将表明它看到的是法律文件、漫画书还是海明威的小说。同样,关键词的位置并不重要。如果要处理位置很重要的数据(比如时间序列数据),你该怎么办呢?时间序列数据只是时间轴上带有日期或时间戳的数据集。正如我们前面提到的,行业内处理这类任务的首选模型是RNN。然而,就像数据科学中的许多事情一样,这个模型最近被强大的TCN取代了。

与RNN相比,TCN的优势在于计算成本较低,使用的架构也更简单。RNN需要资源,也就是LSTM层来记忆。TCN使用的输入步长和输出步长相同,一层的输出又作为下一层的输入(见图2-27)。TCN将前一层的结果馈送到下一层,而不是使用递归。

图2-27:时间卷积网络

第6章我们将进行简单的销量预测。TCN似乎是完成这类任务的合适模型,我们尝试使用它来预测SAP系统中特定产品的销量。

自动编码器

简单来说,自动编码器是一种只进行前向传播的神经网络。它接收输入数据,并试图将其复制为输出。它由两部分组成:

编码器

解析输入数据。

译码器

重构输出数据。

这种网络最常见的用途是图像去噪和图像生成。自动编码器的真正价值不在于输出,尽管输出是其他神经网络真正关心的事情。它真正的价值是以压缩数据的形式对神经网络输出进行表示。为了进一步阐明这一点,模型在其最压缩的状态下学习到了对象的显著特征。假设它在看一只狗的图像(见图2-28)最显著的特征是耳朵、眼睛、嘴巴、长鼻子、类似狗的鼻子等。如果模型压缩得太狠,该网络可能会认为唯一突出的特征是眼睛,因而无法区分狗和其他动物。如果模型压缩得不够,以至于它识别的特征太多(比如颜色和脸型),那么它就只能识别一种狗。自动编码器模型的要点是懂得平衡。概括地说,该神经网络的优化目标不是使输出更接近输入,而是使输出在保留输入主要特征的同时,数据被尽可能地压缩。

自动编码器的关键概念是输出维度必须小于输入维度,这样网络才能学到最相关的特征。

图2-28:自动编码器

自动编码器通常用于数据降维和特征学习。它们通常是另一个神经网络的一部分,用来帮助降低特征维数。

生成式对抗网络

生成式对抗网络(GAN)是一种神经网络架构,坦率地说,有两个网络在进行对抗。这就是对抗(adversarial)一词的由来。这两个网络称为生成器和判别器。想象一下这个常用的场景:GAN想要伪造货币。生成器创造了一张钞票,并将其发送给判别器进行测试。然而,判别器知道钞票是什么样子的,因为它通过一组真实的图像进行了学习。生成器的第一次尝试很糟糕,它失败了,并从失败中得到了反馈。然后它不停地尝试,直到能够生成一张判别器认为是真的钞票。然后就轮到判别器学习了。它发现自己错了,并学会不再接受那张假钞票。这样的对抗来来回回,直到两个网络的失败和成功相对平均,双方都不再进行任何学习了。如图2-29所示。

图2-29:生成式对抗网络

你可能想知道如何使用GAN。GAN喜欢模拟数据。因此,它们常用来模拟艺术、音乐、图像,甚至是诗歌。它们被训练在图像中合并概念。例如,你用戴帽子的男人和不戴帽子的女人图像来训练网络,要求GAN生成戴帽子的女人图像,它能做得很好。这听起来很不错,但是在我们的商业场景中又有什么用呢?其实,GAN已经用于检测数据异常,在其他网络可用的数据有限时,为它们生成训练数据。在这里提供的神经网络介绍中,如果不提GAN,那就太失职了。然而,我们承认将它们应用到商业应用中是比较困难的。在这里介绍它们,是为了展示我们的目标,就是在SAP业务分析师社区中培养公民数据科学家。请记住包括GAN在内的所有概念,也许你会发现一个可以使用GAN的业务场景。 GnDo6qydmebFeIlKjhY0+nGzDvydhuCTofU6WWzrrZRQNriXeiJLOUGejasIh/9K

点击中间区域
呼出菜单
上一章
目录
下一章
×