深度学习-卷积神经网络初识-2

                     卷积神经网络(二)

技交部 潘震宇

一、 卷积步长

从之前的了解中,我们初步知道了卷积运算的含义。也知道了滤波器的作用。

在此前,我们在将滤波器盖在矩阵上,进行边移动边计算的时候,移动步长都是默认的一步,那或许有些人就会问了,能不能一次走俩步、三步、甚至更多步呢?答案当然是可以的。

在这个矩阵中,我们可以发现,将步长stride设置为2后,每一次移动都是俩步。不论是左右还是上下。

       并且,在移动的过程中我们得注意,当覆盖区域有一部分在矩阵外时,这个移动就是非法的。我们就应该跳过。

       假设矩阵为n * n,滤波器为f * f,padding为p,stride 为s:

       则,卷积运算后的维度为floor((n + 2p - f)/s + 1) * floor((n + 2p - f)/ s + 1)

事实上,在机器学习中,卷积运算的说法仅限于上述运算,但是真正在数学领域中,中间还应该有一步与翻转滤波器相乘。

具体详细,感兴趣的可以自行查询相关资料,这里就不加以介绍。

二、 卷积中,卷的体现

在之前的讲解中,咱们都是利用的二维图像的灰度图矩阵进行举例。那么,若为RGB三色图所对应的三维矩阵呢?它的卷积又与二维卷积运算有哪些区别呢?

上图所示,假设咱们有一副6*6*3的图像,3代表着RGB三种通道。它对应的过滤器假设为3*3*3,最终卷积后得出一个二维的4*4矩阵。

过滤器:3 * 3 * 3

这里的绿色的3,代表着对应图像的三种通道,它的值应该和图像的通道值一致。就好像是三层二维的过滤器,分别对应着每一个色通道。再把他们压在一起。因此,黄色的3*3,也就是之前二维的概念。

我们把它用一种更好看的形式来表现。

如上图所示的运算当中,第一次计算便时将三维滤波器放在RGB图像的外部定点处。并且对应数字相乘,27个乘积再相加,就得到了结果矩阵中的第一个值,然后类似于二维运算一样,往右移动一步,计算,再移动,再计算,到达边缘后,往下走一步,计算……最终得出来的结果就为4*4的矩阵。

这里计算过程其实并不复杂,仅仅多了一维。对于过滤器来说,我们该怎么选择呢?

假如我们想只检测红色层的垂直边缘,那就可以设置为如下:

       那假如想三种颜色同时检测呢,那就可以:

总而言之,咱们可以通过设置不同层的过滤器数值来决定检测依据。

 

那,我们能不能与多个过滤器相卷积呢?当然也可以啦:

大家光看图应该都能理解这个意思啦吧,一个6*6*3的图像,与俩个3*3*3的过滤器做卷积,得到俩张4*4的矩阵,再加他俩并在一起,就得到了一个4*4*2的结果矩阵。

       这里的过滤器的个数我们可以自由定义,想同时检测垂直边缘和水平边缘,那就用俩个,想检测更多的特征,那就多加。

       最后我们可以得出一个维度计算公式:

假如图像为n * n * nc 滤波器为f * f * nc 那么结果就为 n – f + 1 * n – f + 1 * nc’

       其中nc为通道数,滤波器的通道数必须与图像的相同,而nc’则为滤波器的个数,也就是特征数。

三、 简单卷积网络示例

有了前俩段的理解我们可以开始引入简单的卷积网络。

首先,拿出卷积总参数:

从此图中,咱们先看第零层,假设长和宽为39 * 39,通道数为10。假设有10个过滤器,3*3,步长为1,padding为0,神经网络的下一层为37 * 37 * 10, 37 为((n + 2p - f)/s ) + 1的计算结果。

第一层的标记为nH[1] = nW[1] = 37, nc[1] = 10

下一层中滤波器的个数为20,5*5,步长为2,padding为0

得到的新图像为17 * 17 * 20,nH[2] = nW[2] = 17,nc[2] = 20,因为步长为2,所以大小从37减少到了17,缩小了一半还要多。过滤器为20个,所以它的信道数量也为20。

紧接着同样的操作,得到的7*7*40.最后,将所有的特征排成一列,为1960*1的列向量,通过logistic/softmax 得到最终输出的y^值。此时,我们就完成了一次卷积网络的过程。

对于卷积网络来说,一般包含三个

分别为卷积层,池化层,满连接层。

在刚刚我们在讨论的都是卷积层(Conv),其实,一般来说也只需要这一层就可以达到效果了,不过对于完善的网络架构来说,还是应该加入另外俩层。

 

 

 

四、 池化层

卷积神经网络,固然是由一层层的单元群构成。池化层便为其中之一,那么,池化层与卷积层有什么区别呢?

池化层可以分为很多种,比如最大池化层,平均池化层,均方根池化层……等等等等。我们举几个例子来解释池化层的意义。

最大池化层:

由上图所示,左边为一个4*4的矩阵,被四种颜色分为了四块,而右边为一个2*2的矩阵,同样被分为了四份。

         我们可以发现四份的颜色都是一一对应的,那最大这个形容词体现在哪呢?

         先取第一个灰蓝色部分中最大值,放入右边灰蓝色框中,依次下去,将所有的部分里最大值都找出,都放入右侧。这样就实现了一个池化的过程。

        由上图所示,假如左侧为一个多维矩阵,那就将每一层进行分别最大池化,再将所有结果层叠在一起,就实现了多维池化。

        而这里可以通过之前的维度公式来计算,此处的f = 3, s = 1,p = 0(大多数)

        最终维floor( (n + 2p - f) / s + 1 )。

        取最大的含义,通常是:

              在一个范围内,取出最大的数,能够将特征进行保留,防止后面处理中丢失,假如此处本来也没有特征,那么就算取最大,其值也肯定很小,这就是它的作用。

       平均池化层:

根据上面最大池化层的含义,或许大家也能够很快理解什么是平均池化层了吧。没错,就是把一个框内的平均数计算出来然后放在对应颜色的框里。

 根据这些例子,之后的不管什么池化层,大概都是这种意思。

在这里我们用到了这些超参:

       过滤器的大小

       步长s

       最大或平均池化

       对于最大来说,参数设置为2,2 相当于每次都将矩阵缩小一半

              也可以设置为3,2.

而在池化层中,我们不需要学习任何参数,所有的都是预设好了。

五、 卷积神经网络示例

弄清楚了卷积层,池化层,我们接下来直接用一个简单的识别手写数字的网络来巩固一下。

       首先一开始,是一副32 * 32 * 3的RBG三色图,我们在其中通过一个大小为5*5,步长为1的卷积层进行处理,紧接着跟着一个f=2,s=2的池化层。

       这里我们需要注意事情,就是在卷积网络中,层的定义,通常在文献中,有俩种定义方式:

1、 卷积层为一层、池化层也为单独的一层。

因为每一次处理都应该算做一层。

2、 卷积层+池化层 为一层

这是为什么呢?因为我们知道,池化层中,没有需要学习的参数,每一个都是预设的。当反向传播时,也不会进行更新。因此大家都不把它看作单独的一层。

在本介绍中,将卷积+池化看作一层。

紧接着,便来到了第二次卷积层(conv2)f=5,s=1,维度也变成了10 *10*16,随后便通过一个最大池化层,维度缩小一半,为5*5*16。

到了最后,我们将着5*5*16个特征值,扁平化处理为一个400*1维度的列向量。

然后,类似普通的神经网络,在第三层我们假设有120个单元,那么对应的通过函数处理,进入到了满链接层3.再进入满连接层4,最后通过softmax单元输出对应的十个值(0,1,2,3……9).整体便为一个卷积神经网络。

       Conv-pool-conv-pool-fc-fc-fc-sofmax.

从此表中我们可以看出来,总特征数是在逐渐递减,一直到输出softmax。

对于参数个数的计算

       CONV1:208 = (5 * 5 + 1)* 8

              其中5*5为滤波器的size,1为bias,6为6通道滤波器。

余下的算法同上,就不写出来啦~

       而参数个数,可以看出来,需要参数最多的就是在全连接层当中,相似与一般神经网络,而在卷积和池化层中,需要的参数个数,与输入的特征数,毫无关系,无论你输入的图时32*32*3还是1000*1000*3甚至时5000*5000*3,当最后反向传播更新参数时,也仅仅只需更新这一小堆。

       对比来看,以前学的网络结构中,假如为1000*1000*3,我们之前已经计算过,在反向更新时,会涉及到超过30亿个参数值的计算,这也就是为什么我们选择卷积网络的原因,能够大大降低内存需求与运算速度。

六、 为什么选择卷积神经网络?

卷积神经网络与单纯的满连接层构成的网络最大的差异就在于参数的数量。

对于一个32*32*3的图片来说,通过卷积层,最多也就是(5*5+1)*6 = 156个参数

而假如是通过满连接来处理,则需要32*32*3*28*28*6=14million个参数。尽管现在的计算机硬件水平也足够支撑我们对1400万个参数的处理,但是假如图片更大呢?为什么不使用更加方便高效的卷积网络呢。

       除此之外,对于卷积的优劣,大致可分为俩个来权衡。

1、 参数共享

2、 稀疏连接

这俩个是什么意思呢?我们用一张图来说明

在此图中,我们先解释什么是参数共享,在矩阵中,假如一个滤波器对于一个特征的检测有效,那么它也会对图像中其他部分有效。就比如说现在有一个3*3的垂直边缘检测器,能够检测出左上角的特征,那么同样的参数,也会对附件的区域产生效果。这也就是参数共享。

并且,它不仅仅适合低级特征,类似于眼睛、鼻子、猫咪,这种高阶     特征,也会有同样的效果。

再者,稀疏连接是个什么概念呢?我们可以这样来连接:

对于左边矩阵被绿色框住的部分,与右边结果矩阵中左上角那一个值。我们可以知道,0只与绿框中9个数值有关系,而与矩阵中其他值毫无关联,不受影响,同样的,红色框中也是如此。这就是稀疏连接。

 

 

更详细的解释,以后再发吧

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值