卷积神经网络

维基百科,自由的百科全书
跳转至: 导航搜索

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

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

概览[编辑]

发展[编辑]

结构[编辑]

卷積層[编辑]

卷積層(Convolutional layer),卷積神經網路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。

線性整流層[编辑]

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

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

池化層(Pooling Layer)[编辑]

每隔2个元素进行的2x2最大池化

池化(Pooling)是卷积神经网络中另一个重要的概念,它实际上一种形式的向下采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效地原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

池化层通常会分别作用于每个输入的特征并减小其大小。目前最常用形式的池化层是每隔2个元素从图像划分出的区块,然后对每个区块中的4个数取最大值。这将会减少75%的数据量。

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

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

损失函数层[编辑]

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

应用[编辑]

图像识别[编辑]

卷积神经网络通常在图像识别系统中使用。

视频分析[编辑]

相比图像识别问题,视频分析要难许多。CNN也常被用于这类问题。

自然语言处理[编辑]

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

药物发现[编辑]

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

围棋[编辑]

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

微调(fine-tuning)[编辑]

可用包[编辑]

  • Caffe: Caffe包含了CNN使用最广泛的库。它由伯克利视觉和学习中心(BVLC)研发,拥有比一般实现更好的结构和更快的速度。同时支持CPUGPU计算,底层由C++实现,并封装了Python和MATLAB的接口。
  • Torch7(www.torch.ch)
  • OverFeat
  • Cuda-convnet
  • MatConvnet
  • Theano:用Python实现的神经网络包[12]
  • TensorFlow
  • Paddlepaddle(www.paddlepaddle.org)

参考[编辑]

  1. ^ Convolutional Neural Networks (LeNet) - DeepLearning 0.1 documentation. DeepLearning 0.1. LISA Lab. [31 August 2013]. 
  2. ^ Convolutional Neural Network. [2014-09-16]. 
  3. ^ Krizhevsky, A.; Sutskever, I.; Hinton, G. E. Imagenet classification with deep convolutional neural networks. Advances in Neural Information Processing Systems. 2012, 1: 1097–1105. 
  4. ^ Graham, Benjamin. Fractional Max-Pooling. arXiv:1412.6071 [cs.CV]. 2014-12-18. 
  5. ^ Springenberg, Jost Tobias; Dosovitskiy, Alexey; Brox, Thomas; Riedmiller, Martin. Striving for Simplicity: The All Convolutional Net. arXiv:1412.6806 [cs.LG]. 2014-12-21. 
  6. ^ Grefenstette, Edward; Blunsom, Phil; de Freitas, Nando; Hermann, Karl Moritz. A Deep Architecture for Semantic Parsing. arXiv:1404.7296 [cs.CL]. 2014-04-29. 
  7. ^ Learning Semantic Representations Using Convolutional Neural Networks for Web Search – Microsoft Research. research.microsoft.com. [2015-12-17]. 
  8. ^ Kalchbrenner, Nal; Grefenstette, Edward; Blunsom, Phil. A Convolutional Neural Network for Modelling Sentences. arXiv:1404.2188 [cs.CL]. 2014-04-08. 
  9. ^ Kim, Yoon. Convolutional Neural Networks for Sentence Classification. arXiv:1408.5882 [cs.CL]. 2014-08-25. 
  10. ^ 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.
  11. ^ Collobert, Ronan; Weston, Jason; Bottou, Leon; Karlen, Michael; Kavukcuoglu, Koray; Kuksa, Pavel. Natural Language Processing (almost) from Scratch. arXiv:1103.0398 [cs.LG]. 2011-03-02. 
  12. ^ 深度网络:Theano项目主页。