Bootstrap

卷积神经网络与caffe的卷积层、池化层

卷积神经网络



       卷积神经网络(CNN)是深度学习技术中极具代表的网络结构之一,在图像处理领域取得了很大的成功。在国际标准ImageNet数据集上,许多成功的模型都是基于CNN的。CNN相较于传统的图像处理算法的优点之一在于:可以直接输入原始图像,避免了对图像复杂的前期预处理过程(如:提取特征等)。传统的神经网络采用全连接的方式,即:输入层到隐藏层的神经元都是全部连接的,这样做将导致参数量巨大,使得网络训练耗时甚至难以训练,而CNN则通过局部连接、权值共享等方法避免这一困难。

在图像处理中,往往把图像表示为像素的向量,比如一个1000×1000的图像,可以表示为一个1000000的向量。在神经网络中,如果隐含层数目与输入层一样,也是1000000时,那么输入层到隐含层的参数数据为1000000×1000000=10^12,这样参数就太多了,基本没法训练。所以图像处理要想练成神经网络大法,必先减少参数、加快速度。卷积神经网络有两种神器可以降低参数数目:局部连接(Sparse Connectivity)和权值共享(Shared Weights)方法。

-------------------------------------------------------------------------------------------------------------------------------------

局部连接

局部连接的示意图,如下图所示:



        在上图中,左边是全连接,右边是局部连接。对于一个1000 × 1000的输入图像而言,如果下一个隐藏层的神经元数目为10^6个,采用全连接则有1000 × 1000 × 10^6 = 10^12个权值参数,如此数目巨大的参数几乎难以训练;而采用局部连接,隐藏层的每个神经元仅与图像中10 × 10的局部图像相连接,那么此时的权值参数数量为10 × 10 × 10^6 = 10^8,将直接减少4个数量级。

-------------------------------------------------------------------------------------------------------------------------------------
权值共享       

       采用上述方法,虽然减少了参数,但是参数量依然很多。为了进一步减少参数,可以再采用权值共享。具体做法是,在局部连接中隐藏层的每一个神经元连接的是一个10 × 10的局部图像,因此有10 × 10个权值参数。将这10 × 10个权值参数共享给剩下的神经元,也就是说隐藏层中10^6个神经元的权值参数相同,那么此时不管隐藏层神经元的数目是多少,需要训练的参数就是这 10 × 10个权值参数(也就是卷积核的大小)。

-------------------------------------------------------------------------------------------------------------------------------------

多卷积核

       上面所述只有100个参数时,表明只有1个10*10的卷积核,显然,特征提取是不充分的。我们可以添加多个卷积核,比如:32个卷积核,这样就可以学习32种特征。采用多卷积核时,如下图所示:

                            

       在上图中,不同颜色表明不同的卷积核,每个卷积核都会将图像生成为另一幅图像。比如,两个卷积核就可以将生成两幅图像,这两幅图像可以看做是一张图像的不同的通道

-------------------------------------------------------------------------------------------------------------------------------------

池化

        通过卷积获得了特征之后,我们希望利用这些特征进行分类。理论上讲,人们可以利用所有提取到的特征去训练分类器,但这样面临着计算量的挑战。例如:对于一个 96X96 像素的图像,假设已经学习得到了400个特征,卷积核大小为8X8,卷积核步长为1,每一个特征和图像卷积后都会得到一个 (96 − 8 + 1) × (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个图像都会得到一个 7921 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合问题。

        为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。

-------------------------------------------------------------------------------------------------------------------------------------

卷积层的进一步分析

       假设输入图像为w1 * h1 * c1,w1表示宽度,h1表示高度,c1表示通道数(图像的深度),输出图像为w2 * h2 * c2

       在卷积层中,n表示卷积核的个数,k*k表示卷积核大小,p表示扩充边缘,s表示卷积核步长,那么有:

       w2 = (w1 + 2 * p - k) / s + 1

       h2 = (h1 + 2 * p - k) / s + 1

;