卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,[1]对于大型图像处理有出色表现。

卷积神经网络受生物过程的启发[2][3][4][5],神经元之间的连接模式类似于动物视觉皮层的组织。单个皮质神经元只在被称为感受野的视野受限区域对刺激做出反应。不同神经元的感受野部分重叠,从而覆盖整个视野。

卷积神经网络由一个或多个卷积层和顶端的全连接层(对应经典的神经网络)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网络在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网络,卷积神经网络需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构[6]

定义 编辑

“卷积神经网络”表示在网络采用称为卷积的数学运算。卷积是一种特殊的线性操作。卷积网络是一种特殊的神经网络,它们在至少一个层中使用卷积代替一般矩阵乘法。

卷积神经网络所使用的运算通常是互相关运算而非真正的卷积

设计 编辑

卷积神经网络由输入层和输出层以及多个隐藏层组成。CNN的隐藏层通常由一系列卷积层组成,这些卷积层与乘法或其他点积进行卷积。激活函数通常是ReLU层,随后是附加的卷积,例如池化层、全连接层和正则化层。因为它们的输入和输出被激活函数和最终卷积所掩盖,这些层被称为隐藏层。

尽管这些层被通俗地称为卷积,但这只是惯例。从数学上讲,它是一个滑动点积和互相关运算。这对于矩阵中元素的指标具有重要意义,因为它影响矩阵中的特定元素确定权重的方式。

卷积层 编辑

卷积层的输入是一个张量,有4个空间维度,为(图像数量)x(图像宽度)x(图像高度)x(图像深度)。然后在通过卷积层之后,图像被抽象成特征图,具有空间维度(图像数量)x(特征图宽度)x(特征图高度)x(特征图通道)。神经网络中的卷积层应该具有以下属性:

  • 卷积窗口大小为宽度x高度的卷积核。宽度和高度是超参数。
  • 输入通道和输出通道的数量。输出通道数是超参数。
  • 卷积核的输入通道数必须等于输入特征图的通道数。

卷积层对输入进行卷积,并将结果传递给下一层。这类似于视觉皮层的神经元对特定刺激的反应。每个卷积神经元只处理其感受野的数据。尽管全连接的前馈神经网络可以用于学习特征以及分类数据,但是将这种结构应用于图像是不实际的。由于与图像相关的输入尺寸非常大,其中每个像素都是相关的变量,因此即使在相当浅的架构中,也需要非常多的参数。例如,大小为100×100的(小)图像的全连接层对于第二层中的每个神经元具有10,000个权重。卷积运算解决了这个问题,因为它减少了自由参数的数量,允许网络用更少的参数更深。例如,不管图像大小如何,大小为5×5的平铺区域,每个区域具有相同的共享权重,只需要25个可学习的参数。这样就解决了传统多层神经网络训练中梯度消失或爆炸的问题。

输出通道为 1 的卷积层在所有输入通道上作用卷积核后将输出相加。输出通道为 n 的卷积层需要 n 个卷积核,各自作用在所有输入通道上,最后将各个输出通道的输出连结为一个(图像数量)x(特征图宽度)x(特征图高度)x(特征图通道)的张量。

步幅 编辑

卷积层的卷积窗口一开始处于输入的最左上方(指标最小的)位置,依照从左到右,从上到下(单一指标增加)的方向移动。而移动的单位称为步幅  

填充 编辑

卷积层的输入可以在上下两边添加   行 0 元素,在左右两边添加  列 0 元素。   称为卷积层的零填充。

池化层 编辑

卷积网络可能包括局部或全局池化层,以简化底层计算。池化层通过将一层的输出合并到下一层的单个神经元中来降低数据的维数。局部池结合了小型集群,通常为2 x 2。全局池化作用于卷积层的所有神经元。此外,池化运算可以是计算最大值,也可以是平均值。最大池化使用前一层的感受野中的最大值。平均池化使用前一层神经元感受野的平均值。

池化层与卷积层一样也有池化窗口,步幅和零填充的概念。

全连接层 编辑

全连接的层将一层中的每个神经元连接到另一层中的每个神经元。它原则上与传统的多层感知器神经网络(MLP)相同。展平的矩阵通过全连接的层来分类图像。

感受野 编辑

在神经网络中,每个神经元从前一层的一些位置接收输入。在全连接的层中,每个神经元接收来自前一层的每个元素的输入。在卷积层,神经元只接收来自前一层的受限子区域的输入。典型地,子区域是正方形的(例如,大小为5×5)。神经元的输入区域称为感受野。因此,在一个全连接的层中,感受野是整个前一层。在卷积层中,感受野仅仅是前一层的一部分。

权重 编辑

神经网络中的每个神经元通过对来自前一层感受野的输入值应用特定函数来计算输出值。应用于输入值的函数由权重向量和偏差(通常为实数)决定。在神经网络中,学习是通过对这些偏差和权重进行迭代调整来进行的。

权重向量和偏差被称为过滤器,并表示输入的特定特征(例如,特定形状)。CNN的一个显著特征是许多神经元可以共享同一个过滤器。这减少了记忆足迹,因为在共享该过滤器的所有感受野中使用了单个偏置和单个权重向量,而不是每个感受野都有其自己的偏置和向量权重。

发展 编辑

梯度下降法训练CNN识别图像 编辑

1989年贝尔实验室开发了一个识别手写邮政编码的系统[7]。系统中包含卷积运算,其中的卷积核系数是手工精心设计的[8]

Yann LeCun等人(1989)[8] 使用反向传播直接从手写数字图像中学习卷积核系数。参数的学习是完全自动化的,比手动系数设计表现得更好,并且适用于更广泛的图像识别问题和图像类型。

这种方法成为现代计算机视觉的基础。

LeNet-5 编辑

LeNet-5是LeCun等人于1998年开发的一种7层卷积网络[9] ,用于识别手写数字,已被几家银行用于识别在32×32像素图像中数字化的支票(英国英语:支票)上的手写数字。处理高分辨率图像的能力需要越来越多的卷积神经网络层,因此这种技术受到计算资源可用性的限制。

GPU 实现 编辑

尽管CNN是在20世纪80年代发明的,但它们在21世纪的突破依赖于CNN在GPU上的高性能实现。

2004年,吴光正和荣格证明了标准神经网络可以在GPU上大大加速。它们的实现比在CPU上的同等实现快20倍.[10][11]。2005年,另一篇论文也强调了GPU对于机器学习的价值。[12]

2006年,切尔皮拉等人描述了CNN的第一个GPU实现。它们的实现比在CPU上的同等实现快4倍。[13] 随后的工作也使用GPU,最初用于其他类型的神经网络(不同于CNN),尤其是无监督的神经网络。[14][15][16][17]

在2010年,IDSIA的丹·西瑞森(Dan Ciresan)等人证明,即使是多层的深层标准神经网络,也可以通过监督学习,用称为反向传播的老方法,在GPU上快速训练。他们的网络在MNIST手写数字基准上优于以前的机器学习方法。[18]2011年,他们将这种GPU方法扩展到CNN,实现了60倍的加速系数,取得了令人印象深刻的结果。[19]2011年,他们在GPU上使用这种CNN赢得了一场图像识别比赛,他们第一次获得了超人的表现。[20] 在2011年5月15日至2012年9月30日期间,他们的CNN赢得了至少四次图像比赛。[21][11] 2012年,他们在多个图像数据库(包括MNIST数据库、NORB数据库、HWDB1.0数据集(中文字符)和CIFAR10数据集(60000个32x32标记的RGB图像数据集)的文献中的最佳性能方面也有显著提高。[22]

随后,亚历克斯·克里热夫斯基等人基于GPU的类似的美国CNN赢得了2012年ImageNet 大规模视觉识别挑战赛[23]。他们在这场比赛中提出的网络结构称为AlexNet。它刺激了更多使用卷积神经网络和GPU来加速深度学习的论文的出现[24]

一个由微软设计的深度超过100层的CNN赢得了2015年 ImageNet 竞赛[25]

结构 编辑

卷積層 编辑

卷積層是一組平行的特徵圖(feature map),它通過在輸入圖像上滑動不同的卷積核並執行一定的運算而組成。此外,在每一個滑動的位置上,卷積核與輸入圖像之間會執行一個元素對應乘積並求和的運算以將感受野內的信息投影到特徵圖中的一個元素。這一滑動的過程可稱爲步幅  ,步幅   是控制輸出特徵圖尺寸的一個因素。卷積核的尺寸要比輸入圖像小得多,且重疊或平行地作用於輸入圖像中,一張特徵圖中的所有元素都是通過一個卷積覈計算得出的,也即一張特徵圖共享了相同的權重和偏置項。

線性整流層 编辑

線性整流層(Rectified Linear Units layer, ReLU layer)使用線性整流(Rectified Linear Units, ReLU) 作为這一層神經的激勵函數(Activation function)。它可以增强判定函数和整个神经网络的非线性特性,而本身并不会改变卷积层。

事实上,其他的一些函数也可以用于增强网络的非线性特性,如双曲正切函数  ,  ,或者Sigmoid函数 。相比其它函数来说,ReLU函数更受青睐,这是因为它可以将神经网络的训练速度提升数倍[26],而并不会对模型的泛化准确度造成显著影响。

池化層 编辑

 
步幅为2,池化窗口为 的最大池化层

池化(Pooling)是卷积神经网络中另一个重要的概念,它实际上是一种非线性形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。

直觉上,这种机制能够有效地原因在于,一个特征的精确位置远不及它相对于其他特征的粗略位置重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的网络结构中的卷积层之间都会周期性地插入池化层。池化操作提供了另一种形式的平移不变性。因为卷积核是一种特征发现器,我们通过卷积层可以很容易地发现图像中的各种边缘。但是卷积层发现的特征往往过于精确,我们即使高速连拍拍摄一个物体,照片中的物体的边缘像素位置也不大可能完全一致,通过池化层我们可以降低卷积层对边缘的敏感性。

池化层每次在一个池化窗口(depth slice)上计算输出,然后根据步幅移动池化窗口。下图是目前最常用的池化层,步幅为2,池化窗口为 的二维最大池化层。每隔2个元素从图像划分出 的区块,然后对每个区块中的4个数取最大值。这将会减少75%的数据量。

 

除了最大池化之外,池化层也可以使用其他池化函数,例如“平均池化”甚至“L2-范数池化”等。过去,平均池化的使用曾经较为广泛,但是最近由于最大池化在实践中的表现更好,平均池化已经不太常用。

由于池化层过快地减少了数据的大小,目前文献中的趋势是使用较小的池化滤镜,[27]甚至不再使用池化层。[28]

RoI池化(Region of Interest)是最大池化的变体,其中输出大小是固定的,输入矩形是一个参数。[29]

池化层是基于 Fast-RCNN [30]架构的卷积神经网络的一个重要组成部分。

全连接层 编辑

最后,在经过几个卷积和最大池化层之后,神经网络中的高级推理通过全连接层来完成。就和常规的非卷积人工神经网络中一样,全连接层中的神经元与前一层中的所有激活都有联系。因此,它们的激活可以作为仿射变换来计算,也就是先乘以一个矩阵然后加上一个偏差(bias)偏移量(向量加上一个固定的或者学习来的偏差量)。

损失函数层 编辑

损失函数层(loss layer)用于决定训练过程如何来“惩罚”网络的预测结果和真实结果之间的差异,它通常是网络的最后一层。各种不同的损失函数适用于不同类型的任务。例如,Softmax交叉熵损失函数常常被用于在K个类别中选出一个,而Sigmoid交叉熵损失函数常常用于多个独立的二分类问题。欧几里德损失函数常常用于标签取值范围为任意实数的问题。

应用 编辑

影像辨識 编辑

卷积神经网络通常在影像辨識系统中使用。

視訊分析 编辑

相比影像辨識问题,視訊分析要难许多。CNN也常被用于这类问题。

自然语言处理 编辑

卷积神经网络也常被用于自然语言处理。 CNN的模型被证明可以有效的处理各种自然语言处理的问题,如语义分析[31]、搜索结果提取[32]、句子建模[33] 、分类[34]、预测[35]、和其他传统的NLP任务[36] 等。

药物发现 编辑

卷积神经网路已在药物发现中使用。卷积神经网络被用来预测的分子与蛋白质之间的相互作用,以此来寻找靶向位点,寻找出更可能安全和有效的潜在治疗方法。

围棋 编辑

卷积神经网络在计算机围棋领域也被使用。2016年3月,AlphaGo对战李世乭的比赛,展示了深度学习在围棋领域的重大突破。

微调(fine-tuning) 编辑

卷积神经网络(例如Alexnet、VGG网络)在网络的最后通常为softmax分类器。微调一般用来调整softmax分类器的分类数。例如原网络可以分类出2种图像,需要增加1个新的分类从而使网络可以分类出3种图像。微调(fine-tuning)可以留用之前训练的大多数参数,从而达到快速训练收敛的效果。例如保留各个卷积层,只重构卷积层后的全连接层与softmax层即可。

經典模型 编辑

可用包 编辑

  • roNNie: 是一個簡易入門級框架,使用Tensorflow 計算層.可於python下載 pip3 ronnie
  • Caffe: Caffe包含了CNN使用最广泛的库。它由伯克利视觉和学习中心(BVLC)研发,拥有比一般实现更好的结构和更快的速度。同时支持CPUGPU计算,底层由C++实现,并封装了Python和MATLAB的接口。
  • Torch7(www.torch.ch)
  • OverFeat
  • Cuda-convnet
  • MatConvnet
  • Theano:用Python实现的神经网络包[37]
  • TensorFlow
  • Paddlepaddle(www.paddlepaddle.org)
  • Keras

参考 编辑

  1. ^ Convolutional Neural Networks (LeNet) - DeepLearning 0.1 documentation. DeepLearning 0.1. LISA Lab. [31 August 2013]. 
  2. ^ 引证错误:没有为名为fukuneoscholar的参考文献提供内容
  3. ^ 引证错误:没有为名为hubelwiesel1968的参考文献提供内容
  4. ^ 引证错误:没有为名为intro的参考文献提供内容
  5. ^ Matusugu, Masakazu; Katsuhiko Mori; Yusuke Mitari; Yuji Kaneda. Subject independent facial expression recognition with robust face detection using a convolutional neural network (PDF). Neural Networks. 2003, 16 (5): 555–559 [17 November 2013]. PMID 12850007. doi:10.1016/S0893-6080(03)00115-1. 
  6. ^ Convolutional Neural Network. [2014-09-16]. 
  7. ^ Denker, J S , Gardner, W R., Graf, H. P, Henderson, D, Howard, R E, Hubbard, W, Jackel, L D , BaIrd, H S, and Guyon (1989) Neural network recognizer for hand-written zip code digits, AT&T Bell Laboratories
  8. ^ 8.0 8.1 Y. LeCun, B. Boser, J. S. Denker, D. Henderson, R. E. Howard, W. Hubbard, L. D. Jackel, Backpropagation Applied to Handwritten Zip Code Recognition; AT&T Bell Laboratories
  9. ^ LeCun, Yann; Léon Bottou; Yoshua Bengio; Patrick Haffner. Gradient-based learning applied to document recognition (PDF). Proceedings of the IEEE. 1998, 86 (11): 2278–2324 [October 7, 2016]. CiteSeerX 10.1.1.32.9552 . doi:10.1109/5.726791. 
  10. ^ Oh, KS; Jung, K. GPU implementation of neural networks.. Pattern Recognition. 2004, 37 (6): 1311–1314. doi:10.1016/j.patcog.2004.01.013. 
  11. ^ 11.0 11.1 Schmidhuber, Jürgen. Deep Learning. Scholarpedia. 2015, 10 (11): 1527–54. CiteSeerX 10.1.1.76.1541 . PMID 16764513. doi:10.1162/neco.2006.18.7.1527. 
  12. ^ Dave Steinkraus; Patrice Simard; Ian Buck. Using GPUs for Machine Learning Algorithms. 12th International Conference on Document Analysis and Recognition (ICDAR 2005). 2005: 1115–1119. 
  13. ^ Kumar Chellapilla; Sid Puri; Patrice Simard. High Performance Convolutional Neural Networks for Document Processing. Lorette, Guy (编). Tenth International Workshop on Frontiers in Handwriting Recognition. Suvisoft. 2006. 
  14. ^ Hinton, GE; Osindero, S; Teh, YW. A fast learning algorithm for deep belief nets.. Neural Computation. Jul 2006, 18 (7): 1527–54. CiteSeerX 10.1.1.76.1541 . PMID 16764513. doi:10.1162/neco.2006.18.7.1527. 
  15. ^ Bengio, Yoshua; Lamblin, Pascal; Popovici, Dan; Larochelle, Hugo. Greedy Layer-Wise Training of Deep Networks (PDF). Advances in Neural Information Processing Systems. 2007: 153–160. 
  16. ^ Ranzato, MarcAurelio; Poultney, Christopher; Chopra, Sumit; LeCun, Yann. Efficient Learning of Sparse Representations with an Energy-Based Model (PDF). Advances in Neural Information Processing Systems. 2007. 
  17. ^ Raina, R; Madhavan, A; Ng, Andrew. Large-scale deep unsupervised learning using graphics processors. (PDF). ICML. 2009: 873–880. 
  18. ^ Ciresan, Dan; Meier, Ueli; Gambardella, Luca; Schmidhuber, Jürgen. Deep big simple neural nets for handwritten digit recognition.. Neural Computation. 2010, 22 (12): 3207–3220. PMID 20858131. arXiv:1003.0358 . doi:10.1162/NECO_a_00052. 
  19. ^ Ciresan, Dan; Ueli Meier; Jonathan Masci; Luca M. Gambardella; Jurgen Schmidhuber. Flexible, High Performance Convolutional Neural Networks for Image Classification (PDF). Proceedings of the Twenty-Second International Joint Conference on Artificial Intelligence-Volume Volume Two. 2011, 2: 1237–1242 [17 November 2013]. 
  20. ^ IJCNN 2011 Competition result table. OFFICIAL IJCNN2011 COMPETITION. 2010 [2019-01-14] (美国英语). 
  21. ^ Schmidhuber, Jürgen. History of computer vision contests won by deep CNNs on GPU. 17 March 2017 [14 January 2019] (美国英语). 
  22. ^ 引证错误:没有为名为mcdns的参考文献提供内容
  23. ^ 引证错误:没有为名为:02的参考文献提供内容
  24. ^ Deshpande, Adit. The 9 Deep Learning Papers You Need To Know About (Understanding CNNs Part 3). adeshpande3.github.io. [2018-12-04]. 
  25. ^ He, Kaiming; Zhang, Xiangyu; Ren, Shaoqing; Sun, Jian. Deep Residual Learning for Image Recognition. (PDF). 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2016. 
  26. ^ Krizhevsky, A.; Sutskever, I.; Hinton, G. E. Imagenet classification with deep convolutional neural networks. Advances in Neural Information Processing Systems. 2012, 1: 1097–1105. (原始内容存档于2015-02-16). 
  27. ^ Graham, Benjamin. Fractional Max-Pooling. 2014-12-18. arXiv:1412.6071  [cs.CV]. 
  28. ^ Springenberg, Jost Tobias; Dosovitskiy, Alexey; Brox, Thomas; Riedmiller, Martin. Striving for Simplicity: The All Convolutional Net. 2014-12-21. arXiv:1412.6806  [cs.LG]. 
  29. ^ Grel, Tomasz. Region of interest pooling explained. deepsense.io. 2017-02-28 (英语). 
  30. ^ Girshick, Ross. Fast R-CNN. 2015-09-27. arXiv:1504.08083  [cs.CV]. 
  31. ^ Grefenstette, Edward; Blunsom, Phil; de Freitas, Nando; Hermann, Karl Moritz. A Deep Architecture for Semantic Parsing. 2014-04-29. arXiv:1404.7296  [cs.CL]. 
  32. ^ Learning Semantic Representations Using Convolutional Neural Networks for Web Search – Microsoft Research. research.microsoft.com. [2015-12-17]. 
  33. ^ Kalchbrenner, Nal; Grefenstette, Edward; Blunsom, Phil. A Convolutional Neural Network for Modelling Sentences. 2014-04-08. arXiv:1404.2188  [cs.CL]. 
  34. ^ Kim, Yoon. Convolutional Neural Networks for Sentence Classification. 2014-08-25. arXiv:1408.5882  [cs.CL]. 
  35. ^ Collobert, Ronan, and Jason Weston. "A unified architecture for natural language processing: Deep neural networks with multitask learning."Proceedings of the 25th international conference on Machine learning. ACM, 2008.
  36. ^ Collobert, Ronan; Weston, Jason; Bottou, Leon; Karlen, Michael; Kavukcuoglu, Koray; Kuksa, Pavel. Natural Language Processing (almost) from Scratch. 2011-03-02. arXiv:1103.0398  [cs.LG]. 
  37. ^ 深度网络:Theano项目主页。