卷积神经网络CNN
1,CNN有效的利用了图像的空间信息---局部感受野
在传统的全连接神经网络中,计算结果是由铺平(flatten)后的所有像素决定的。更为详细的说,全连接层就是前一层的输出的线性组合后接一个激活函数。其中,线性组合时权重来自于权重函数W。例如:
由于全连接神经网络在计算时把图像的所有像素拉成了一条线后才计算的,因此,在拉伸的同时也损失了原始图像中像素与像素之间的空间信息。
此外,全连接层的每个计算结果都与图像所有的像素有关,或者是每次计算都要考虑所有的像素。但在卷积层中计算结果只由与filter等大小的像素决定(假设filter的尺寸为5x5x3),即,只由图像的一部分决定,且计算时也不需要展开成一条直线。 这样一来即充分的利用了图像原有的空间信息(因为没有展平),也是分区域计算的(也就是说每次计算只用到原始图像中的一小部分像素),卷积层分区域计算的这一特性也被城之称局部感受野。
局部感受野这一特性来自于一个早期的关于猫咪的实验(以下介绍引自参考文献1):
“故事得回到20世纪60年代初,哈佛大学两位神经生物学家休伯尔David Hubel和威泽尔Torsten Wiesel,作了一个有趣的猫咪实验,见图1。他们使用幻灯机向猫展示特定的模式,然后记录猫脑中各个神经元的电活动[1]。他们发现特定的模式刺激了猫咪大脑特定部位的活动。正因为他们在视觉信息处理方面的杰出贡献,荣获了1981年诺贝尔生理学或医学奖。
哈佛学者的实验证明,视觉特征在大脑皮层的反应是通过不同的细胞达成的。其中,简单细胞(Simple Cell)感知光照信息,复杂细胞(Complex Cell)感知运动信息。到了1980年前后,日本科学家福岛邦彦受猫咪生物实验的启发,模拟生物视觉系统并提出了一种层级化的多层人工神经网络,即“神经认知”系统,这是现今卷积神经网络的前身。在论文中,福岛邦彦提出了一个包含卷积层、池化层的神经网络结构。
福岛老爷爷今年已经88岁了,5年前他还发表了神经网络方面的研究论文。”
简单来说就是:就猫的神经系统而言,例如猫的大脑。当猫看到某些物体物体时,大脑中只有一部分会产生特别强烈的响应。比如说,当猫看到球形时,在猫的大脑的左上角的某块区域会产生特别强烈的响应,但大脑中的其他区域则反应较弱或无反应。当猫猫看到三角形时,大脑的右下角某块区域又会产生特别强烈的响应,但大脑中的其他区域则反应较弱或无反应,等等。
如果再把这个实验结果和我们的全连接神经网络VS卷积神经网络来类比的话。卷积神经网络对不同事物的反映就好比是猫的大脑,是分区域响应的。而,如果猫的大脑使用的全连接神经网络模型的话,那么不论看到什么事物,猫的整个大脑都会同时产生响应。
2,卷积神经网络的一些性质
2,1 卷积后activation map的尺寸/维度
对于全连接层而言,计算所产的神经元的个数等于class num。而对于卷积层而言,计算所产生的神经元的个数等于卷积后的activation map/feature map的大小。
若,输入图像的维度是CinxWxH,filter的维度是CinxKwxKh(注意:filter的通道数必须和输入图像的通道数相同),则输出图像的维度是1xW'xH'。其中,Cin表示输入图像的通道数,Kw和Kh表示filter的尺寸,W',H'为经过卷积后图像的尺寸。
2,2 有几个filter,feature map就有几层
上面说过:“若,输入图像的维度是CinxWxH,filter的维度是CinxKwxKh,则输出图像的维度是1xW'xH'。” 这只是一个filter所对应的activation map的尺寸。但在很多经典的ConvNet中,往往会用多个filter对同一幅图进行卷积,一次性产生多个合并在一起的activation map。因此:
若,输入图像的维度是CinxWxH,filter的维度是CinxKwxKh,总共有Cout个filter,则输出结果的维度是CoutxW'xH'。
下面的例子中输入图像是一个32x32x3的卡车,filter的尺寸为5x5x3,总共使用了16个不同的filter,产生了16层activation map。
2,3 N个输入样本的卷积维度
基于上述使用Cout个filter的基础上,如果输入的图像不是一张而是N张。也就是说一次性丢给卷积网络N张图的数据集。则最终的多个filter的卷积结果还要再加上一个维度。也就是说:若,输入图像的维度是CinxWxH,共N张图,filter的维度是CinxKwxKh,总共有Cout个filter,则输出结果的维度是NxCoutxW'xH'。
下面是以2张为输入的例子。
2,4 bias偏置项
每个卷积层对应一个bias,因此有多少个filter就应该有多少个bias。
2,5 The power of small filter
2,5,1 感受野
在上图中,对于输出中的一个像素而言(Output中的小蓝框),他对应于输入图像中的感受野的大小是kxk(Input中的大蓝框)。
现在,我们用两个3x3的filter对输入进行两次卷积,并观察感受野的变化。 首先,因为filter的kernel size为3x3,因此,输出中的一个pixel所对应的感受野是input中的3x3个pixel。对第一次卷积而言,若输出为First Conv中的红色区域,则对应于Input中的感受野就是全部5x5个pixel。对第二次卷积而言,如果输出为Secnod Conv中的红色区域(一个pixel),则对应于First Conv中的感受野就是3x3个pixel的红色区域。
因此,如果从Secnod Conv中的一个红色pixel,顺着往input找,就能找到input中的5x5的感受野。这也就是说,经过两次Conv,Secnod Conv中的一个pixel对应于input中的感受野的关系是1对5x5。
因此,就感受野而言,我们可以用两个连续的3x3卷积来代替一个5x5卷积。如果再叠加一层3x3的卷积呢?也就是3个连续的3x3卷积对应在原始input上的感受野有多大。答案是7x7!
因为,根据前两次的卷积可知,从Secnod Conv中的一个pixel到First Conv,感受野变成了3x3。即,从1x1扩大到3x3,横竖各扩大了2个pixel。从First Conv的3x3到原始的input,感受野变成了5x5。即,从3x3扩大到5x5,横竖又各扩大了2个pixel。
这就是说,每叠加一层卷积,感受野各扩大2个pixel。因此,对于3个连续的3x3卷积而言,对应于原始input的感受野是7x7。
2,5,2 更少的计算量,更少的参数,更多的非线性和更深的网络
对同一个感受野而言,单个7x7的filter的参数要大于3个3x3的filter的参数。不仅如此,运输量也大很多。这都是我们不希望看到的。不仅如此,在CNN网络中每个卷积层后面一般都会接一个非线性层。
因此,如果使用多层小尺寸filter也会顺带引入多个非线性层,多个非线性层能够使模型具有更强的表达能力。
2,5,3 如果继续缩小filter的尺寸呢?1x1 filter
1,降维和升维
1x1卷积核可以用来改变输入的通道数(depth),而不改变空间维度(height和width)。这在降维和升维操作中非常有用。
2,增加非线性
通过在1x1卷积核后应用非线性激活函数(如ReLU),可以增加网络的非线性表达能力。虽然1x1卷积核本身只是一个线性变换,但结合非线性激活函数,可以使得网络能够学习到更复杂的特征。
例如,在上图中先是用一个1x1的filter,对HxWxC的输入处理。因为输入的通道数是C,所以filter的维度是1x1xC。为了降维,因此这样的filter只用C/2个,使得HxWxC变成了HxWxC/2。这样就完成了第一次处理。
经过了第一层卷积后,原始数据的通道数减少了一半,这时再用3x3的filter去计算,就能大大的减少计算量。第二层filter的维度是3x3xC/2,filter的数量还是C/2。使得HxWxC/2变成了HxWxC/2,这样就完成了第二次处理。
最后,再次调用1x1的filter去升维。由于第二层的输出是HxWxC/2,因此,1x1filter的维度应当是1x1xC/2,filter的数量是C,最终使得HxWxC/2变回到了HxWxC。
2,5,4 1xN和Nx1
除了上面的1x1filter,还可以用两个连续的1xN和Nx1的filter去替换一个NxN的filter。同样的,这种卷积核的参数数量更少,计算速度更快,且引入了更多的非线性计算。
2,5,5 应用
非常著名的CNN网络中的GoogleLeNet也叫Inception的成功之处就在于使用了大量的小尺寸filter(例如,1x1(用于降维),3x3,1x3和3x1)取代了之前网络中大尺寸的filter。极大的减少了需要更新的参数,也减少了运算量,并且增加了很多的非线性运算和网络的层数,使得该网络的表示能力更强。
3,Pooling layer
池化即down-sample,也就是对输入数据进行下采样,经过下采样的数据长宽各缩减为原来的一半。一般常用的池化方式是max pooling。下采样的作用有二:
1,同时在水平和竖直两个方向缩小数据尺寸,节省空间
2,维持原始数据的空间不变性,即,下采样不会引入空间信息的变化。
4,CNN的大致框架结构
举个例子:
现有结构如下的CNN网络:input==>Conv==>ReLU==>Pool==>Conv==>ReLU==>Pool==>Conv==>ReLU==>Pool==>FC+softmax(以及在全连接层的最后一层后接softmax激活函数的FC神经网络)
(例如,在图像分类任务中,网络的最后一层可能是一个全连接层,其神经元数量等于类别数量。然后,通过softmax函数将这些神经元的输出值转换为概率分布,该网络用于预测输入图像属于每个类别的概率)
头三层:
中间三层:
最后三层:
fc+softmax:
(全文完)
--- 作者,松下J27
增加了对小尺寸卷积核的说明。2024/07/04
参考文献(鸣谢):
2,Stanford University CS231n: Deep Learning for Computer Vision
版权声明:所有的笔记,可能来自很多不同的网站和说明,在此没法一一列出,如有侵权,请告知,立即删除。欢迎大家转载,但是,如果有人引用或者COPY我的文章,必须在你的文章中注明你所使用的图片或者文字来自于我的文章,否则,侵权必究。 ----松下J27