卷积神经网络(CNN)是一种前馈神经网络。它的人工神经元可以对覆盖范围内的一部分周围单元做出反应。它对大规模图像处理很有用。出色的表现。它包括卷积层和池化层。比较:卷积神经网络、全连接神经网络左:全连接神经网络(平面)、合成:输入层、激活函数、全连接层右:卷积神经网络(立体)、合成:输入层、体积积层、激活function、poolinglayer、fullyconnectedlayer在卷积神经网络中有一个重要的概念:深度卷积层卷积:在原始输入上进行特征提取。简而言之,特征提取就是在原始输入上从一个小区域到一个小区域提取特征,后面会详细解释卷积的计算过程。上图中,左边的块是输入层,3通道的图像,大小为32*32。右边的小方块是一个filter,大小为5*5,深度为3。将输入层分成多个区域,使用filter这个固定尺寸的助手,对输入层进行运算,最终得到一个深度为1的featuremap。在上图中可以看出一般使用多个filter分别进行卷积,最终得到多个featuremap。上图使用6个filter进行卷积进行特征提取,最终得到6个featuremaps。将这6层堆叠在一起产生卷积层的输出。卷积不限于原始输入的卷积。蓝色方块是对原始输入的卷积操作,使用6个过滤器得到6个提取的特征图。绿色方块也可以对蓝色方块进行卷积操作,使用10个滤波器得到10个特征图。每个过滤器的深度必须等于前一层输入的深度。以上面的卷积为例直观理解:第一个卷积可以提取低级特征。第二个卷积可以提取中层特征。第三个卷积可以提取高层特征。不断提取和压缩特征,最终可以得到比较高级的特征。简而言之,就是将原始特征一步步浓缩,最终的特征更加可靠。利用最后一层特征可以做各种任务:如分类、回归等。卷积计算过程左边区域的三个大矩阵是原图的输入。RGB的三个通道用三个大小为7*7*3的矩阵表示。FilterW0代表一个过滤器助手,大小为3*3,深度为3(三个矩阵);过滤器W1也代表过滤器助手。因为我们在卷积中使用了2个过滤器,所以卷积层结果的输出深度为2(绿色矩阵有2)。Biasb0是FilterW0的偏置项,Biasb1是FilterW1的偏置项。OutPut是卷积后的输出,大小为3*3,深度为2。计算过程:输入固定,指定filter,所以计算就是如何得到绿色矩阵。第一步,在输入矩阵上有一个与filter大小相同的滑动窗口,然后将输入矩阵在滑动窗口中的部分乘以filter矩阵的对应位置:即乘以对应位置求和,结果为0乘以对应位置求和,结果为2,即乘以对应位置求和,结果为0第二步,求和生成的结果由三个矩阵,加上一个偏置项,即0+2+0+1=3,所以得到输出矩阵左上角的3:第三步,让每个filter进行这样一个操作,可以得到第一个元素:第四步,滑动窗口2步长,重复前面的步骤计算第五步,最后可以得到2个filter下卷积后生成的深度为2的输出结果:思考:①为什么每次滑动有2个格子?滑动步长记为S,S越小代表提取的特征越多,但是S一般不取1,主要是考虑时间效率的问题。S不能太大,否则会丢失图像的信息。②由于filter的边长大于S,所以每次滑动窗口移动后都会有相交的部分。相交部分意味着多次特征提取,尤其是在图像的中间区域。该怎么办?一般的方法是在图像周围添加一个0的圆圈。细心的同学可能已经注意到了,在demonstrationcase中加了这个0的圆,也就是+pad1。+padn就是加了n个0的圆。③一次卷积后输出的featuremap大小是多少?请计算输出=?注意:一层卷积运算中可以有多个过滤器,它们的大小必须相同。卷积参数共享原理在卷积神经网络中,有一个很重要的特性:权值共享。所谓权重共享,就是给定一张输入图片,用一个filter对图片进行扫描,filter中的个数称为权重。这张图片的每个位置都被同一个filter扫描,所以weight是一样的,即共享。上图pooling层可以看出,pooling就是对featuremap进行特征压缩,pooling也叫downsampling。选择某个区域的最大值或平均值来替换该区域,整体将被压缩。下面演示池化操作。需要指定filtersize,stride,poolingmethod(maxormean):卷积神经网络的卷积——激活——卷积——激活——池化——…………——池化——全连接——分类或回归。正向传播和反向传播已经解释了卷积层的正向传播过程。这里通过一张图来回顾一下:下面讲解一下卷积层的反向传播过程:反向传播的目的:更新参数w。因此,必须先计算dJ/dw。假设前一层会传递一个梯度dJ/dout,根据链式推导规则,所以dJ/dw=dJ/dout*dout/dw=dJ/dout*x。为了在计算机中命名变量方便,dJ/dout记为dout,dJ/dw记为dw,就是图中的情况。稍后也将使用此表示法。首先:dw和w的大小相同。您还可以将一个点乘以一个面积来得到一个面积。那么反向传播过程就相当于:dout中的一个元素乘以输入层窗口中的矩阵,得到一个dw矩阵;然后滑动滑动窗口,继续寻找下一个dw,依次进行,最后得到多个相加dw,执行w=w-dw,完成反向传播的计算。上面的反向传播可以更新一个过滤器中的参数,也需要其他过滤器。我们来看看两种不同的pooling过程——pooling层的正向传播:当pooling层反向传播时,max-pooling和mean-pooling的方法也不同。对于max-pooling,在前向计算中,取每个选中的2*2区域中的最大值。这里需要记录每个小区域中最大值的位置。在反向传播中,只有最大值对下一层有贡献,所以把残差传到最大值的位置,区域中其他2*2-1=3个位置置零。具体过程如下图所示,其中4*4矩阵中的非零位置就是前面计算出的每个小区域最大值的位置。对于mean-pooling,我们需要将残差平均分成2*2=4份,转移到前面小区域的4个单元即可。具体过程如图:卷积网络架构实例VGGNet深度更大,有很多卷积层和池化层。一个版本有16层,另一个版本有19层(更常用)。VGGNet的特点:filter只有3*3,意味着计算的特征更多,粒度更细。同时,池化的参数也是固定的。注意:传统卷积神经网络的层数越多并不意味着性能越好。2016年引入深度残差网络达到152层。后续说说介绍。那么训练一个VGGNet有多少内存开销呢?从图中可以看出,在训练过程中,一张224*224*3的图片会有138M的参数,会占用93MB的内存。因此,每批图像的数量应该受到内存的限制,即93*图像数量<总内存容量。
