深度学习 --- stanford cs231学习笔记三(卷积神经网络CNN)

卷积神经网络CNN


1,CNN有效的利用了图像的空间信息/局部感受野

        全连接神经网络中的神经是由铺平后的所有像素计算决定。 由于计算时是把图像的所有像素拉成了一条线,因此在拉伸的同时也损失了图像像素之间固有的空间信息。

        卷积层中的神经只由5x5x3(假设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的大小

        若,输入图像的维度是CinxWxH,filter的维度是CinxKwxKh(其中,filter的通道数必须和输入图像的通道数相同),则输出图像的维度是1xW'xH'。其中,Cin表示输入图像的通道数,Kw和Kh表示filter的尺寸。


2,2 有几个filter,卷积运算的结果就有几层。

        上面说过:“若,输入图像的维度是CinxWxH,filter的维度是CinxKwxKh,则输出图像的维度是1xW'xH'。” 也就是一个filter会产生1层activation map。但对CNN而言,往往会用多个filter对同一幅图进行卷积,产生多个activation map。也就是说,有几个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

 参考文献(鸣谢): 

1,猫咪怎样启发了人工神经网络的诞生?

2,Stanford University CS231n: Deep Learning for Computer Vision

3,ConvNetJS CIFAR-10 demo

4,卷积神经网络工程实践技巧_哔哩哔哩_bilibili

版权声明:所有的笔记,可能来自很多不同的网站和说明,在此没法一一列出,如有侵权,请告知,立即删除。欢迎大家转载,但是,如果有人引用或者COPY我的文章,必须在你的文章中注明你所使用的图片或者文字来自于我的文章,否则,侵权必究。 ----松下J27

  • 29
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

松下J27

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值