神经网络及CNN中的通道、共享权重、特征映射等的理解

一、神经网络

先回顾一下多层神经网络
这里写图片描述
多层神经网络包括一个输入层和一个输出层,中间有多个隐藏层。每层有若干个神经元,相邻两层之间的后一层的每个神经元都分别与前一层的所有神经元连接。在识别问题中,输入层(即网络的第一层)代表特征向量,其每一个神经元代表一个特征值。

多层神经网络在图像识别问题中,输入层的每一个神经元可能代表一个像素的灰度值。但这种神经网络用于图像识别有几个问题,一是没有考虑图像的空间结构,识别性能受到限制;二是每相邻两层的神经元都是全相连,参数太多,训练速度受到限制。

二、卷积神经网络的结构

    CNN就可解决上面传统神经网络的问题。CNN是在多层神经网络基础上发展起来的针对图像分类和识别而设计的一种深度学习方法。CNN使用了针对图像识别的特殊结构,可以快速训练。因为速度快,使得训练多层神经网络变得容易,而多层结构在识别准确率上又很大优势。

CNN有三个基本概念:局部感知域(local receptive fields),共享权重(shared weights)和池化(pooling)。

局部感知域: 在上图中的神经网络中输入层是用一列神经元来表示的,在CNN中,不妨将输入层当做二维矩阵排列神经元

与常规神经网络一样,输入层的神经元需要和隐藏层的神经元连接。但这里不是将每一个输入神经元都与每一个隐藏神经元连接,而是仅仅在一个图像的局部区域创建连接。以大小为28X28的图像为例,假如第一个隐藏层的神经元与输入层的一个5X5的区域连接,如下图所示: 
这里写图片描述
这个5X5的区域就叫做局部感知域。该局部感知域的25个神经元与第一个隐藏层的同一个神经元连接,每个连接上有一个权重参数,因此局部感知域共有5X5个权重。如果将局部感知域沿着从左往右,从上往下的顺序滑动,就会得对应隐藏层中不同的神经元,如下图分别展示了第一个隐藏层的前两个神经元与输入层的连接情况。 
这里写图片描述
这里写图片描述
如果输入层是尺寸为28X28的图像,局部感知域大小为5X5,那么得到的第一个隐藏层的大小是24X24。

共享权重: 上面得到的第一隐藏层中的24X24个神经元都使用同样的5X5个权重。第l个隐藏层中第i个神经元的输出为: 

                                                         
其中, 是该感知域连接的共享偏置是个nXn的共享权重矩阵(上图中,n=5),因此这里有26个参数。 代表在输入层的nXn的矩形区域的特征值。

这就意味着第一个隐藏层中的所有神经元都检测在图像的不同位置处的同一个特征。(权重共享,则检测特征相同)因此也将从输入层到隐藏层的这种映射称为特征映射(或称作filters, kernels)。该特征映射的权重称为共享权重,其偏置称为共享偏置。

为了做图像识别,通常需要不止一个的特征映射,因此一个完整的卷积层包含若干个不同的特征映射。下图中是个三个特征映射的例子。(因为图像为灰色图像,所以输入通道为1,输入的28*28个神经元分别代表着输入图像的不同位置的像素值大小)
这里写图片描述
在实际应用中CNN可能使用更多的甚至几十个特征映射。以MNIST手写数字识别为例,学习到的一些特征如下: 
这里写图片描述
这20幅图像分别对应20个不同的特征映射(filters, kernels)。每个特征映射由5X5的图像表示,代表局部感知域中的5X5个权重。亮的像素点代表小的权重,与之对应的图像中的像素产生的影响较小。暗的像素点代表大的权重,意味着对应的图像中的像素的影响较大。可看出这些特征映射反应了某些特殊的空间结构,因此CNN学习到了一些与空间结构有关的信息用于识别。

当CNN用于彩色图像的识别分类时,输入通道则不只一个通道,下面以输入通道为3通道为例,描述标准卷积操作的具体过程:

上图中,输入为3通道,有两个卷积核(两个共享权重),其且每个卷积核的通道数必须等于输入通道数3,最终卷积层的输出通道数等于卷积核个数2,即输出的特征图个数为卷积核的个数2。通道就是某种意义上的特征图

标准的卷积操作当输入的feature map数量(即输入的通道数)是N,卷积层filter(卷积核)个数是M时,则M个filter中,每一个filter都有N个channel,都要分别和输入的N个通道做卷积,得到N个特征图,然后将这N个feature map按Eletwise相加(即:进行通道融合),再加上该filter对应的偏置(一个filter对应一个共享偏置),作为该卷积核所得的特征图。同理,对其他M-1个filter也进行以上操作。所以最终该层的输出为M个feature map(即:输出channel等于filter的个数)。可见,输出的同一张特征图上的所有元素共享同一个卷积核,即共享一个权重。不同特征图对应的卷积核不同。

由以上卷积过程可看出,不同特征图(通道)代表不同的特征,同一张特征图(同一个通道)上的所有元素(神经元)都是对图像的不同位置同一个特征的检测通道中某一处(特征图上某一个神经元)数值的大小就是当前位置当前特征强弱的反应

卷积操作的输出特征图大小计算式为:

o=[(i−k+2∗p​)/2  ] +1  (其中i为卷积层的输入大小,k为卷积核大小,p为padding大小。中括号表示向下取整

三、激励函数(激活函数)

由前述可知,在CNN中,卷积操作只是加权求和的线性操作,若神经网络只用卷积层,那么无论有多少层,输出都是输入的线性组合,网络的表达能力有限,无法学习到非线性函数。因此CNN引入激励函数,激活函数是个非线性函数,常作用于卷积层和全连接层输出的每个神经元(分量/元素),给神经元引入了非线性因素,使网络表达能力更强,几乎可逼近任意函数,这样神经网络就可应用到众多的非线性模型中。

激励函数作用于卷积层的输出时:,各符号意义同上。

作用于全连接层的输出时:为当前FC层的第i个神经元的输出值,为该输出神经元对应的权重矩阵,为该FC层的输入神经元矩阵。

这里σ是神经元的激励函数(可以是sigmoid函数、thanh函数或ReLU函数等)。

四、池化层

在CNN中,池化层通常紧随卷积或激励函数作用之后,目的是简化卷积层的输出。池化函数将某个元素邻域的总体统计特征作为网络在该位置的输出,是个下采样过程,减少了参数量。池化包括最大值池化和均值池化两种方式,都可实现局部平移不变性,即当输入有一定的平移时,经池化后输出不会发生改变。CNN通过引入池化,使得其特征提取不会因为目标位置的变化而受到较大的影响。(pooling之后的特征图大小遵循向上取整原则)

五、全连接层(FC层)

FC层负责学习特征图的组合:先将前面卷积层或池化层输出的所有二维特征图一起映射1个一维特征向量然后对所有特征进行不同的加权求和,得到输入的表达,中间可能有多个FC层,最后模型输出一个维度等于类别数(输出的神经元个数向量表示每一类的概率(softmax归一化),然后得分最高的类别判为输入的类别 FC层在整个CNN中起到“分类器”的作用。

六、反卷积(转置卷积Deconvuolution / Transconvolution / upconvolution)

反卷积和卷积的工作过程差不多,主要的区别在于反卷积输出图片的尺寸会大于输入图片的尺寸,通过增加padding来实现这一操作。当反卷积的stride>=2时,则通过间隔插入padding来实现。注意:反卷积并不能还原卷积之前的矩阵,只能还原卷积之前的特征图大小。反卷积的本质还是卷积,只是在进行卷积之前,会自动进行padding补0,从而使得输出的矩阵与指定输出矩阵的shape相同。深度学习框架本身,会根据设定的反卷积值来计算输入矩阵的尺寸,如果维度不符合,则会报错。

  同样,可结合卷积计算表达式和反卷积的输入大小i'(即卷积的输出大小 o ),来设置合适的反卷积参数:s'、k'、p',从而计算反卷积的输出大小o',也就是卷积的输入大小i。通常 s'=s,k'=k。根据s的大小来确定padding的位置和数值大小。

(1)当stride=1时,padding均匀设置在反卷积的输入特征图的四周,且padding的个数为:p'=k-1,反卷积输出大小为:o'=(i'−1)∗s+k−2p。如图1所示。

(2)当stride>=2时,p'=k-1-p,padding在反卷积的输入特征图的上方和右侧边缘的个数为a,a=(i-k+2p)%s,特征图上的单元之间填补(s-1)个零. 反卷积输出大小为:o'=(i'−1)∗s+k−2p+a。如图2或图3所示。

  

    图1          图2          图3

  • 71
    点赞
  • 274
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值