传统的神经网络层采用的是全连接的方式。如果采样数据层数较多,输入是高维数据,可以减少参数个数。是一个天文数字。例如训练一个1000×1000像素的灰度图像,输入节点数为1000×1000,若隐含层节点数为100,则输入层与隐含层之间的权重矩阵为1000000×100!如果要加上隐藏层,进行反向传播,结果可想而知。不仅如此,使用全连接方式很容易导致过拟合。因此,为了更有效地处理图片、视频、音频、自然语言等数据信息,就需要另辟蹊径。经过多年的不懈努力,人们终于找到了一些行之有效的方法和工具。其中,卷积神经网络就是一个典型代表。01卷积网络的一般结构卷积神经网络(CNN)是一种前馈神经网络,最早于1986年在BP算法中被提出。1989年,LeCun将其应用于多层神经网络,但直到1998年LeCun提出LeNet-5模型,神经网络的雏形才基本成型。在接下来的十年里,卷积神经网络的研究一直处于低潮,原因有二:首先,研究人员意识到多层神经网络在BP训练时计算量巨大,而当时完全是无法实现硬件的计算能力;二是包括SVM在内的浅层机器学习算法也开始出现。2006年,Hinton一炮而红,在《科学》上发表了一篇名为ReducingtheDimensionalityofDatawithNeuralNetworks的文章。CNN再次觉醒,取得了长足的进步。2012年,CNN赢得了ImageNet竞赛。2014年,谷歌开发了一个20层的VGG模型。同年,DeepFace和DeepID模型横空出世,直接将LFW数据库上的人脸识别和人脸认证正确率提高到99.75%,超过了人类的平均水平。卷积神经网络由一个或多个卷积层和最上面的全连接层(对应经典神经网络),以及相关的权重和池化层(PoolingLayer)组成。与其他深度学习架构相比,卷积神经网络能够在图像和语音识别方面提供更好的结果。该模型也可以使用反向传播算法进行训练。与其他深度前馈神经网络相比,卷积神经网络可以用更少的参数实现更高的性能。图3-1是一个简单的卷积神经网络架构。▲图3-1卷积神经网络示意图如图3-1所示。该架构包括卷积神经网络的常用层,如卷积层、池化层、全连接层和输出层;有时还包括其他的Layer,比如regularizationlayers,advancedlayers等,接下来我们将详细描述每一层的结构和原理。图3-1是一个比较简单的手写输入数据分类卷积神经网络的示意图,它由卷积层、池化层和全连接层组成。下面我们先用代码来定义这个卷积神经网络,然后介绍各部分的定义和实现原理。02添加通道的魅力添加通道其实就是添加卷积核,它是整个卷积过程的核心。较简单的卷积核或滤波器包括垂直滤波器(VerticalFilter)、水平边缘滤波器(Horizo??ntalFilter)、索贝尔滤波器(SobelFilter)等。这些滤波器可以检测图像的垂直边缘、水平边缘,增强中心区域的权重图像等。下面我们用一些图来简单演示一下这些滤镜的具体作用。1.垂直边缘检测垂直边缘滤波器是一个3×3的矩阵(注意滤波器一般是奇数阶矩阵)。数据的垂直边缘,如图3-2所示。▲图3-2滤波器垂直边缘检测2.水平边缘检测水平边缘滤波器也是一个3×3的矩阵,其特点是值为第1、3行,第2行为0,可以用于检测原始数据的水平边缘,如图3-3所示。▲图3-3滤波器检测水平边缘上述两种滤波器对图像进行水平边缘检测和垂直边缘检测的效果图如图3-4所示。▲图3-4滤波器对图像水平边缘检测和垂直边缘检测的影响其他边缘特征。那么,如何确定过滤器呢?该滤波器类似于标准神经网络中的权重矩阵W。W需要通过梯度下降算法的反复迭代得到。因此,在深度学习中,过滤器也需要通过模型训练得到。卷积神经网络计算这些滤波器的值,实现了对图片所有边缘特征的检测。03加深网络的动机加深网络的好处包括减少参数数量和扩大感受野(ReceptiveField,一种对神经元施加变化的局部空间区域)。感受野是指卷积神经网络各层输出的特征图(FeatureMap)上的像素映射到输入图像上的区域大小。通俗地说,感受野就是输入图上对应特征图上每个点的区域,如图3-5所示。▲图3-5增加网络层数扩大感受野示意图从图3-5可以看出,经过几个卷积层后,一个特征所代表的信息量在增加,一个s3代表x1,x2,x3,x4,x5信息。此外,叠加层进一步增强了网络的表现力。这是因为它在网络中加入了一个基于激活函数的“非线性”表达,通过非线性函数的叠加可以表达更复杂的内容。不同层提取的图像特征是不同的。层数越高,特征越复杂,如图3-6所示。▲图3-6不同的层表现出不同的特征从图3-6可以看出前面层提取的特征比较简单,比如一些颜色和边缘特征。越往前,提取的特征越复杂,都是一些复杂的几何形状。这符合我们设计卷积神经网络的初衷,即通过多层卷积完成图像的逐层特征提取和抽象。类似的情况也存在于ELMo预训练模型中,如图3-7所示,随着层数的增加,它所代表的内容也变得更加复杂和抽象。▲图3-7ELMoModel04增加了残差连接网络层数。根据导数的链式法则,容易出现梯度消散或爆炸等问题。例如,如果每个网络层的激活函数的导数都比较小,经过多次乘法后梯度可能会越来越小,这就是常说的梯度耗散。对于深层网络,传到浅层的时候,梯度几乎没有了。在解决这类问题时,除了使用合适的激活函数外,还有一个重要的技巧,那就是使用残差连接。图3-8是一个简单的残差连接示意图。▲图3-8残差连接示意图如图3-8所示。图中每个导数都加上一个恒等项1,dh/dx=d(f+x)/dx=1+df/dx。这时候即使原导数df/dx很小,仍然可以有效地反向传播误差,这也是residualconnection的核心思想。作者简介:吴茂贵,资深大数据与人工智能技术专家,在BI、数据挖掘与分析、数据仓库、机器学习等领域工作20余年。在基于Spark、TensorFlow、PyTorch、Keras等的机器学习和深度学习方面有大量工程实践,对Embedding有深入研究。王红星,高级数据科学家,就职于博世(中国)投资有限公司苏州分公司,负责博世数据湖、数据分析和人工智能相关产品和服务的设计与开发。在大数据、机器学习、人工智能等领域具有丰富的实践经验。本文节选自《深入浅出Embedding:原理解析与应用实践》,经发布者授权发布。
