文章目录
课堂问答
- 卷积层在进行卷积的时候,怎么让卷积核与输入图像卷积?
答: 可以将卷积核拉伸成一个一维向量,然后图像也拉伸成一个向量,然后进行点积。 - 看成向量点积,卷积核怎么在输入图上进行滑动?
- 与信号处理中卷积的联系?
答: 如果要和卷积的定义相匹配,则CNN中的卷积核是一种广义上的卷积,它在规范卷积操作上旋转了180°。而其思想很类似于信号处理中两个信号间的卷积操作。
- 如何计算卷积操作的输出尺寸和参数个数?
- 为什么通常情况下最大池化要优于平均池化等操作?
答:激活图上,在一个池化核内部的激活值其在一定意义上代表了原输入的一局部区域内某模式特征的激活值,最大池化选择里面最大的激活值,其表示了这一区域内该模式特征的最大激活程度。例如分类任务里,我们主要关注在这一部分区域内有没有我们要的物体。
1. 卷积神经网络的历史
与一般的神经网络不一样,CNN能够保留图像的 空间特征,例如下图所示,其操作是在图像上的以局部区域进行的。
-
1957年,Frank Rosenblatt 发明了感知机(perceptron),但是权重并不是按照反向传播更新,而是朝着我们想要的方向更新。即只能分2类,如果正类(1)分错了,就让W向使的输出大于0的方向更新。
-
1960 年, Widrow and Hoff 使用多层感知机模型。
-
1986年, Runmelhart等人首次提出反向传播算法,来训练神经网络。
-
1998年, Yann LeCun应用反向传播和基于梯度的方法给出了一个识别文档,邮编的网络 LeNet。
-
2006 年, Hinton等人提出先使用 玻尔兹曼机进行预训练得到中间层参数,再训练整个深层的神经网络。
-
2012年,Alex的AlexNet在Imagenet上大放光彩,应该算是第一个现代版本的卷积神经网络。
-
直到现在,已经有各种CNN模型被提出,并被广泛运用于图像分类、检测、跟踪、分割和识别领域。
2. 卷积神经网络的结构
2.1 全连接层(Fully Connected Layer)
全连接层就是我们之前用到的线性分类器的线性单元,它的“神经单元”接收全部输入并产生一系列的输出。例如我们接收
大小的图像,并产生10个激活值。
对于一个输入为
的激活图(下面会介绍),我们可以先拉伸成一个一维向量,然后用一个权值维度为
的 W 来产生一个
的输出。
或者等效于下面讲的卷积操作,用
个 维度为
,卷积核大小为
的卷积核来进行卷积。
2.2 卷积层(Convolution Layer )
卷积层依赖于一个小的 卷积核(类似于滤波器),它不一次性接收输入的全部值,而是滑过整个图像,每次只取一个 局部区域 ,运用 点积 产生输出(有时候会加上一个偏置 b),而且需要包含所有通道。
如果我们让卷积核对一个局部区域进行计算后,滑动一个像素,则我们能得到以下输出:
当然,同一网络层,我们可以不只使用一个卷积核,类似于之前线性分类器中模板匹配的概念,一个卷积核相当于一个小的模式 ,它滑动整个输入图,然后得到各个位置关于该模式的评分。这样,我们可以使用多个不同的卷积核匹配不同的模式。也就是我们所说的,关于输出的通道,一个卷积核对应于一个输出通道。
基于这种模式匹配的观点,我们将多层卷积层堆叠起来,那么就有一种 层次化特征的学习结构,即低层的模式可能是基础的特征(如颜色、边缘),而高层的模式组合出了更复杂丰富的特征。
卷积操作输出维度的计算
1. 常规卷积操作
由上图,我们可以清楚的得到,输入图为
, 卷积核大小为
, 卷积的滑动步长为 S,则输出为
。注意这里的
必须是整数,否则输出不对称。
2.带填充的卷积
如果在输入图的周围填充
个 0(或其它值),则我们的输入变成了
,则输出是
。如果要保持输入输出尺寸不变,则填充大小为
即
注意:进行0填充可以保证卷积后输入图的尺寸不会持续减小的很快,但是这会不会破坏原有的局部区域的特征结构还有待商榷。
卷积参数的计算
对于每一个
大小的卷积核,我们的参数大小是
,即每个输入通道都需要一个卷积核,且加和之后还需要加上一个 偏置项 b。
总结
2.3 池化层(Pooling Layer)
池化层对激活图(activation map)进行下采样处理,例如一个
的输入进行2倍下采样。
其只在空间上做池化,而不在深度上进行池化。(可能是不同通道表示的特征不一样)
池化层也有一个类似于卷积核的池化核,通常,若要下采样K倍,则池化核的尺寸为
,步长为
,然后滑动整个输入图像,最后输出为
。例如下图的最大池化操作:
注意:
池化层通常是进行下采样,降低后序操作的计算量,而且一般池化层的步长都设置使得池化核间不重叠。
总结
- CNN网络训练和预测Demo
- 一个典型的用于图像分类的CNN网络结构:
- CNN的网络结构趋势:去池化+去全连接层 = 尽量全卷积