本文首发于:人工智能A7论坛
转载请注明出处
1什么是卷积神经网络(CNN)
1.1 什么是卷积操作
CNN中的卷积和数字信号处理中的卷积其实不是一回事,但有点类似。这里说的只是CNN中的卷积操作。
对图像(或者可以表示为同样结构的其他数据,如文本、语音等)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。
(gif动图见附件)
备注:
http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution
一个很自然的想法,是filter的各个权重应该是多少?filter的size怎么取?
1.2 卷积神经网络的概念
CNN的概念最早来自于对“感受野”的研究。科学家对猫的视觉细胞研究发现,每一个视觉神经元只处理一小块区域的视觉图像。即感受野(receptive field)。
卷积神经网络(Convolutional Neural Networks)是一种在空间上共享参数的神经网络。通过共享参数,减少了参数的个数。卷积的图示
备注:上图是以“图片”举例,所以depth是RGB三个维度。后面我们会说到CNN也可以处理文本。用卷积来处理文本分类的要点在于怎么把文本数据准备成CNN所需要的这种固定width和height的形式。
卷积神经网络简单讲就是把一个图片的数据传递给CNN,原涂层是由RGB组成,然后CNN把它的厚度加厚,长宽变小,每做一层都这样被拉长,最后形成一个分类器:
CNN是首个成功进行多层训练的网络结构(Lecun的LeNet5),之所以CNN能够成为“第一个吃螃蟹”的网络,除了因为LeCun作为深度学习三巨头之一,“天生神力”,有一个不可忽视的因素或许是,CNN利用空间结构大大减少了参数量,提高了训练效率,避免了全连接网络(FCN, full connection Network)的参数过多不好训练、以及梯度弥散(gradient vanishment)的问题。
2CNN中的一些基本概念
卷积核
卷积核,英文名kernels,有时候也叫滤波器(filters )。卷积核是CNN的核心。从信号处理的角度而言,滤波器是对信号做频率筛选,这里主要是空间-频率的转换,cnn的训练就是找到最好的滤波器使得滤波后的信号更容易分类,还可以从模版匹配的角度看卷积,每个卷积核都可以看成一个特征模版,训练就是为了找到最适合分类的特征模版。
问题:卷积核的大小和初始值怎么取?
feature map
每一个卷积核滤波得到的图像就是一类特征的映射,也就是一个feature map
LeNet5
每个卷积核作用于input可以得到一个feature map。
我们知道图片有RGB三个维度,这三个维度的处理是怎么样的?
Stride
Stride就是“移动切片的步长”,影响取样的数量。也就是表示做卷积时对input进行每次移动多少步。每一块抽取一部分信息,长宽就缩减,但是厚度(depth)增加。抽取的各个小块儿,再把它们合并起来,就变成一个压缩后的立方体。
厚度为什么增加?一定增加吗?
一般来说,后面的卷积层feature map数要比前面的feature map数多些
Padding
填充的方式有两种,“有效填充”和“相同填充”。在相同填充中,超出边界的部分使用补充0的办法,使得输入输出的尺寸相同。而在有效填充中,则不使用补充0的方法,不能超出边界。
以一维的填充为例:
在图像的padding任务中,
如图中紫色方框所示,左边是有效填充,右边是相同填充。在相同填充中,超出边界的部分使用补充0的办法,使得输入输出的图像尺寸相同。而在有效填充中,则不使用补充0的方法,不能超出边界,
思考问题:在一个CNN网络中,input层Layer A做了卷积以后变成Layer B,再做卷积变成Layer C。为了达到图中所示的A、B、C三个layer宽和高都一样大的效果,需要怎么设置padding和stride 两个参数。
[很显然,需要stride=1, padding设置成
Pooling(池化层)
就是当跨步比较大的时候,它会漏掉一些重要的信息,为了解决这样的问题,就加上一层叫pooling,事先把这些必要的信息存储起来,然后再变成压缩后的层。最常见的就是mean-pooling和max-pooling。
Pooling层可以理解为一种特殊的卷积层。
Pooling层的作用:
1). invariance(不变性),这种不变性包括translation(平移),rotation(旋转),scale(尺度)[详见附录“POOLing的三个不变性的形象化解释”
2. 保留主要的特征同时减少参数(降维,效果类似PCA)和计算量,防止过拟合,提高模型泛化能力
3).获得定长输出。(文本分类的时候输入是不定长的,可以通过池化获得定长输出)
4).防止过拟合或有可能会带来欠拟合。
patch
一个局部切片。
参考:
http://xrds.acm.org/blog/2016/06/convolutional-neural-networks-cnns-illustrated-explanation/
感受野的理解
输出feature map某个节点的响应对应的输入图像的区域就是感受野
拿一个例子来算算
pool3的一个输出对应pool3的输入大小为2*2 如果padding=valid
pool3: 2*2 conv4: 4*4 conv3: 6*6 pool2:12*12 conv2:14*14 pool1:28*28 conv1:30*30
因此 pool3的感受野大小就是30*30
3 CNN处理图像分类问题的网络结构
在 RGB 这个层,每一次把一块核心抽出来,然后厚度加厚,长宽变小,形成分类器:
如果想要分成十类的话,那么就会有0到9这十个位置,这个数据属于哪一类就在哪个位置上是1,而在其它位置上为零。
CNN的结构,分析一张图片时,先放一个CNN的图层,再把这个图层进行一个pooling。这样可以比较好的保持信息,之后再加第二层的CNN和pooling。
导入一个图片之后,先是有它的RGB三个图层,然后把像素块缩小变厚。本来有三个厚度,然后把它变成八个厚度,它的长宽在不断的减小,最后把它们连接在一起。
下图是一个经典的CNN做图像分类的网络结构
网友评论