卷积神经网络(英语:Convolutional Neural Network,缩写:CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。
卷积神经网络由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网络在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网络,卷积神经网络需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。
卷积神经网络的灵感来自于动物视觉皮层组织的神经连接方式。单个神经元只对有限区域内的刺激作出反应,不同神经元的感知区域相互重叠从而覆盖整个视野。
卷积神经网络是人工神经网络的一种特殊类型,在其至少一层中使用称为卷积的数学运算代替通用矩阵乘法。它们专门设计用于处理像素数据,并用于图像识别和处理。
CNN是根据生物的视觉处理过程来进行设计的。[来源请求]
Hubel和Wiesel在20世纪50年代到20世纪60年代的研究发现,猫和猴子的视觉皮层中包含着能分别对某一小块视觉区域进行回应的神经元。当眼睛不动的时候,在一定区域内的视觉刺激能使单个神经元兴奋,那这个区域就称为这个神经元的感受野。相邻的细胞具有相似且重叠的感受野。[来源请求]为了形成一张完整的视觉图像,整个视觉皮层上的神经元的感受野的大小和位置呈现系统性的变化。[来源请求]左脑和右脑分别对应其对侧的视野。[来源请求]
他们在其1968年的一篇论文中确定了大脑中有两种不同的基本视觉细胞:
简单细胞
复杂细胞
Hubel和Wiesel还提出了这两种细胞用于模式识别任务的级联模型。
卷积神经网络由输入层、隐藏层和输出层组成。
卷积层可以产生一组平行的特征图(feature map),它通过在输入图像上滑动不同的卷积核并执行一定的运算而组成。此外,在每一个滑动的位置上,卷积核与输入图像之间会执行一个元素对应乘积并求和的运算以将感受野内的信息投影到特征图中的一个元素。这一滑动的过程可称为步幅 Z_s,步幅 Z_s 是控制输出特征图尺寸的一个因素。卷积核的尺寸要比输入图像小得多,且重叠或平行地作用于输入图像中,一张特征图中的所有元素都是通过一个卷积核计算得出的,也即一张特征图共享了相同的权重和偏置项。
线性整流层(Rectified Linear Units layer, ReLU layer)使用线性整流(Rectified Linear Units, ReLU)
f
(
x
)
=
max
(
0
,
x
)
{\displaystyle f(x)=\max(0,x)}
作为这一层神经的激励函数(Activation function)。它可以增强判定函数和整个神经网络的非线性特性,而本身并不会改变卷积层。
事实上,其他的一些函数也可以用于增强网络的非线性特性,如双曲正切函数
f
(
x
)
=
tanh
?
(
x
)
{\displaystyle f(x)= anh(x)}
,
f
(
x
)
=
|
tanh
?
(
x
)
|
{\displaystyle f(x)=| anh(x)|}
,或者Sigmoid函数
f
(
x
)
=
(
1
+
e
?
x
)
?
1
{\displaystyle f(x)=(1+e^{-x})^{-1}}
。相比其它函数来说,ReLU函数更受青睐,这是因为它可以将神经网络的训练速度提升数倍,而并不会对模型的泛化准确度造成显著影响。
步幅为2,池化窗口为
2
×
2
{\displaystyle 2 imes 2}
的最大池化层
池化(Pooling)是卷积神经网络中另一个重要的概念,它实际上是一种非线性形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。
直觉上,这种机制能够有效地原因在于,一个特征的精确位置远不及它相对于其他特征的粗略位置重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的网络结构中的卷积层之间都会周期性地插入池化层。池化操作提供了另一种形式的平移不变性。因为卷积核是一种特征发现器,我们通过卷积层可以很容易地发现图像中的各种边缘。但是卷积层发现的特征往往过于精确,我们即使高速连拍拍摄一个物体,照片中的物体的边缘像素位置也不大可能完全一致,通过池化层我们可以降低卷积层对边缘的敏感性。
池化层每次在一个池化窗口(depth slice)上计算输出,然后根据步幅移动池化窗口。下图是目前最常用的池化层,步幅为2,池化窗口为
2
×
2
{\displaystyle 2 imes 2}
的二维最大池化层。每隔2个元素从图像划分出
2
×
2
{\displaystyle 2 imes 2}
的区块,然后对每个区块中的4个数取最大值。这将会减少75%的数据量。
f
X
,
Y
(
S
)
=
max
a
,
b
=
0
1
S
2
X
+
a
,
2
Y
+
b
.
{\displaystyle f_{X,Y}(S)=\max _{a,b=0}^{1}S_{2X+a,2Y+b}.}
除了最大池化之外,池化层也可以使用其他池化函数,例如“平均池化”甚至“L2-范数池化”等。过去,平均池化的使用曾经较为广泛,但是最近由于最大池化在实践中的表现更好,平均池化已经不太常用。
由于池化层过快地减少了数据的大小,目前文献中的趋势是使用较小的池化滤镜,甚至不再使用池化层。
RoI池化(Region of Interest)是最大池化的变体,其中输出大小是固定的,输入矩形是一个参数。
池化层是基于 Fast-RCNN 架构的卷积神经网络的一个重要组成部分。
最后,在经过几个卷积和最大池化层之后,神经网络中的高级推理通过完全连接层来完成。就和常规的非卷积人工神经网络中一样,完全连接层中的神经元与前一层中的所有激活都有联系。因此,它们的激活可以作为仿射变换来计算,也就是先乘以一个矩阵然后加上一个偏差(bias)偏移量(向量加上一个固定的或者学习来的偏差量)。
卷积神经网络通常在影像识别系统中使用。
相比影像识别问题,视频分析要难许多。CNN也常被用于这类问题。
卷积神经网络也常被用于自然语言处理。 CNN的模型被证明可以有效的处理各种自然语言处理的问题,如语义分析、搜索结果提取、句子建模 、分类、预测、和其他传统的NLP任务
等。
卷积神经网络已在药物发现中使用。卷积神经网络被用来预测的分子与蛋白质之间的相互作用,以此来寻找靶向位点,寻找出更可能安全和有效的潜在治疗方法。
卷积神经网络在计算机围棋领域也被使用。2016年3月,AlphaGo对战李世乭的比赛,展示了深度学习在围棋领域的重大突破。
卷积神经网络(例如Alexnet、VGG网络)在网络的最后通常为softmax分类器。微调一般用来调整softmax分类器的分类数。例如原网络可以分类出2种图像,需要增加1个新的分类从而使网络可以分类出3种图像。微调(fine-tuning)可以留用之前训练的大多数参数,从而达到快速训练收敛的效果。例如保留各个卷积层,只重构卷积层后的全连接层与softmax层即可。
LeNet
AlexNet
VGG
GoogLeNet
ResNet
DenseNet
roNNie: 是一个简易入门级框架,使用Tensorflow 计算层.可于python下载 pip3 ronnie
Caffe: Caffe包含了CNN使用最广泛的库。它由伯克利视觉和学习中心(BVLC)研发,拥有比一般实现更好的结构和更快的速度。同时支持CPU和GPU计算,底层由C++实现,并封装了Python和MATLAB的接口。
Torch7(www.torch.ch)
OverFeat
Cuda-convnet
MatConvnet
Theano:用Python实现的神经网络包
TensorFlow
Paddlepaddle(www.paddlepaddle.org (页面存档备份,存于互联网档案馆))
Keras
PyTorch