初识卷积神经网络
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识卷积神经网络相关的知识,希望对你有一定的参考价值。
参考技术A 按照上文中介绍的神经网络,如果处理一张图片的话,参数有多大呢?假设图像的大小为1200 * 1200,下一层的神经元个数为10^5,不难得出参数量为 1200 * 1200 * 10^5 = 1.44 * 10^12。可以看出一层的参数量就是很大了,如果再多加几层,那参数量大的应该是超出了内存的承受范围,这从研究和工程的角度都是不允许的。而且参数太多,很容易造成过拟合。怎么解决这个问题呢?经过研究,从稀疏连接、参数共享和平移不变性三个方面来进行改进。
可能有些人不懂这种稀疏连接是怎么实现的?先来说说卷积操作,以一个二维矩阵为输入(可以看作是一个单通道图片的像素值),卷积产生的稀疏连接根本原因就是这块的核函数,一般的核函数的大小远小于输入的大小。
以下图例:卷积操作可以看做是一种滑窗法,首先,输入维度是4×4,输入中红色部分,先和核函数中的元素对应相乘,就是输出中左上角的元素值s1,即 s1 = a×k1+b×k2+e×k3+f×k4。
参数共享是指在一个模型的多个函数中使用相同的参数,它是卷积运算带来的固有属性。
在全连接中,计算每层的输出时,权重矩阵中的元素只作用于某一个输入元素一次;
而在卷积神经网络中,卷积核中的每一个元素将作用于每一个局部输入的特定位置上。根据参数共享的思想,我们只需要学习一组参数集合,而不需要针对每一个位置的每一个参数来进行优化学习,从而大大降低了模型的存储需求。
如果一个函数的输入做了一些改变,那么输出也跟着做出同样的改变,这就时平移不变性。
平移不变性是由参数共享的物理意义所得。在计算机视觉中,假如要识别一个图片中是否有一只猫,那么无论这只猫在图片的什么位置,我们都应该识别出来,即就是神经网络的输出对于平移不变性来说是等变的。
根据稀疏连接、参数共享和平移不变性三个思想,卷积核就应运而生了。看下图,有个直观的感受。
上图就是在一个通道上做的卷积,但现实中,图片一般是由3个通道构成(R\G\B),卷积核也由二维的平面生成了三维立体。具体的样子如下图:
如上图所示,Filter W0 即为卷积核,其大小为(3 * 3 * 3),每个3*3的二维平面会和图片的相应的通道进行卷积,3个通道的结果相加后加上统一的偏置b0,结果即为Output Volume 第一个通道的第一个位置的数。
从上图还可以看出 Input Volume 四周加了0,这个0叫做padding,一般是为了卷积划动的过程中包含原有的所有数;而多通道卷积核计算过程和卷积核计算过程,不太一样的是多通道卷积核计算过程每次滑2下,这个滑动的距离叫做步长-stride。
所以通过输入大小和卷积核大小,我们可以推断出最终的结果的大小。比如上图卷积核计算过程,输入大小为5 * 5,卷积核为3 * 3,那么卷积核在原图上每次滑动一格,横向滑3次,纵向也是3次,最终结果为 3 * 3。在多通道卷积核计算过程中,每次滑动为2格,横向滑3次,纵向也是3次,最终结果也为 3*3。可以推断出,最终大小的公式为:(输入大小 - 卷积核大小)/ 滑动步长。
在卷积核计算过程,可以看出经过卷积后的大小变小了,那能不能经过卷积计算且大小不变呢?这里,引出了 padding 的另一个作用,保证输入和输出的大小一致。比方输出的 5*5 加 padding,那么四周就被0围绕了,这时的输入大小就变为7 * 7, 再经过 3 * 3的卷积后,按照上边推断出的公式,可以得出 最终的大小为 5 * 5,这时与输入大小保持了一致。
池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。
简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
池化层用的方法有Max pooling 和 average pooling,而实际用的较多的是Max pooling。下图演示一下Max pooling。
对于每个2 * 2的窗口选出最大的数作为输出矩阵的相应元素的值,比如输入矩阵第一个2 * 2窗口中最大的数是1,那么输出矩阵的第一个元素就是1,如此类推。
全连接层的部分就是将之前的结果展平之后接到最基本的神经网络了。
根据上边的介绍,可以得出,卷积核的通道数目和输入的图像的通道数目是保持一致的,而输出的通道数目是和卷积核数目是一致的。这样参数量可以得出,假设输入的通道为5,卷积核大小为 3 * 3 ,输出的通道数目为10,那么参数量为:3 * 3 * 5 * 10,其中3 * 3 * 5是1个卷积核的参数个数,3 * 3 * 5 * 10 是 10个卷积核的参数个数,也就总共的参数个数。
在卷积中,滑动一次会经过多次的点乘,只经过一次的加法,所以加法的计算量可以忽略不计。其中,滑动一次会的点乘次数和卷积核的大小有关系,比方 3 * 3的卷积,则是经过了 3 * 3 = 9次点积。一共滑动多少次和输出大小有关系,比方 输出的结果也为 3 * 3,那么就是滑动了9次。这样就可以得出输入和输出单通道时计算量 3 * 3 * 3 * 3 = 81。那么对于输入多通道时,卷积核也需要增加相应的通道数目,此时应该在刚才的计算量上乘以通道的数目,得出输入多通道的一个卷积核的计算量。这样,对于输出多通道,总的计算量则是乘以多个卷积核即可。
以上是关于初识卷积神经网络的主要内容,如果未能解决你的问题,请参考以下文章