1. 为什么用卷积神经网络

1.1. 局部感知(local field)

形象地说,就是模仿你的眼睛,想想看,你在看东西的时候,目光是聚焦在一个相对很小的局部的吧?严格一些说,普通的多层感知器中,隐层节点会全连接到一个图像的每个像素点上,而在卷积神经网络中,每个隐层节点只连接到图像某个足够小局部的像素点上,从而大大减少需要训练的权值参数。

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

如下图所示,左边是每个像素的全连接,右边是每行隔两个像素作为局部连接,因此在数量上,少了很多权值参数数量(每一条连接每一条线需要有一个权值参数,具体忘记了的可以回顾单个[神经元模型]。因此 局部感知就是:
通过卷积操作,把 全连接变成局部连接 ,因为多层网络能够抽取高阶统计特性, 即使网络为局部连接,由于格外的突触连接和额外的神经交互作用,也可以使网络在不十分严格的意义下获得一个全局关系。
在这里插入图片描述
下面我们来详细看一下到底局部感知如何使 全连接变成局部连接,按照人工神经网络的方法,把输入图像的像素一字排开之后,每一个像素值就是一个神经元输入,需要对隐层或者输出层做全连接,如上图左侧所示。卷积神经网络引入卷积概念后,卷积核通过原图像,然后卷积核对原图像上符合卷积核大小的像素进行加权求和,每一次只是对符合卷积核的图像像素做卷积,这就是局部感知的概念,使 全连接变成局部连接。

在这里插入图片描述

A neuron does not have to see the whole image to discover the pattern, Connecting to small region with less parameters).
在这里插入图片描述

1.2. 权值共享(Shared Weights)

不同图的不同区域可能有相同的样式(The same patterns appear in different regions)

尽管局部感知使计算量减少了几个数量级,但权重参数数量依然很多。能不能再进一步减少呢?方法就是权值共享。

权值共享:不同的图像或者同一张图像共用一个卷积核,减少重复的卷积核。同一张图像当中可能会出现相同的特征,共享卷积核能够进一步减少权值参数。

如下图所示,为了找到鸟嘴,一个激活函数A需要检测图像左侧有没有鸟嘴,另外一个激活函数B需要检测另外一张图像中间有没有类似的鸟嘴。其实,鸟嘴都可能具有同样的特征,只需要一个激活函数C就可以了,这个时候,就可以共享同样的权值参数(也就是卷积核)

在这里插入图片描述
如果使用了权值共享(共同使用一个卷积核),那么将可以大大减少卷积核的数量,加快运算速度。天下武功,唯快不破。
在这里插入图片描述
举个例子,在局部连接中隐藏层的每一个神经元连接的是一个 10∗10 的局部图像,因此有 10∗10 个权值参数,将这 10∗10 个权值参数共享给剩下的神经元,也就是说隐藏层中 106 个神经元的权值参数相同,那么此时不管隐藏层神经元的数目是多少,需要训练的参数就是这 10∗10 个权值参数(也就是卷积核(也称滤波器)的大小。

尽管只有这么少的参数,依旧有出色的性能。但是,这样仅提取了图像的一种特征,如果要多提取出一些特征,需要增加多个卷积核,不同的卷积核能够得到图像的不同映射下的特征,称之为 Feature Map。如果有100个卷积核,最终的权值参数也仅为 100∗100=104 个而已。另外,偏置参数b也是共享的,同一种滤波器共享一个。

1.3. 下采样或池化(subsampling)

下采样不会改变图形里的实体(Subsampling the pixels will not change the object)
在卷积神经网络中,没有必要一定就要对原图像做处理,而是可以使用某种“压缩”方法,这就是池化,也就是每次将原图像卷积后,都通过一个下采样的过程,来减小图像的规模。

pooling的好处有什么?

  1. 这些统计特征能够有更低的维度,减少计算量。
  2. 不容易过拟合,当参数过多的时候很容易造成过度拟合。
  3. 缩小图像的规模,提升计算速度。

如下图所示,原图是一张500∗500 的图像,经过subsampling之后哦,变成了一张 250∗250 的图像。这样操作的好处非常明显,虽然经过权值共享和局部连接后的图像权值参数已经大大减少,但是对于计算量来说,还是非常巨大,需要消费很大的计算时间,于是为了进一步减少计算量,于是加入了subsampling这个概念,不仅仅使图像像素减少了, 同时也减少计算时间。

在这里插入图片描述
举个例子:以最大池化(Max Pooling)为例,1000×1000的图像经过10×10的卷积核卷积后,得到的是991×991的特征图,然后使用2×2的池化规模,即每4个点组成的小方块中,取最大的一个作为输出,最终得到的是496×496大小的特征图。

下采样,即池化,目的是减小特征图,池化规模一般为2×2。常用的池化方法有:

Pooling算法

最大池化(Max Pooling)。取4个点的最大值。这是最常用的池化方法。
均值池化(Mean Pooling)。取4个点的均值。
可训练池化。训练函数 f ,接受4个点为输入,出入1个点。

由于特征图的变长不一定是2的倍数,所以在边缘处理上也有两种方案:

保留边缘。将特征图的变长用0填充为2的倍数,然后再池化。
忽略边缘。将多出来的边缘直接省去。

2. 卷积的具体过程

卷积

核卷积不仅用于神经网络,而且是许多其他计算机视觉算法的关键一环。在这个过程中,我们采用一个形状较小的矩阵(称为核或滤波器),我们输入图像,并根据滤波器的值变换图像。后续的特征map值根据下式来计算,其中输入图像用f表示,我们的kernel用h表示,结果矩阵的行和列的索引分别用m和n表示。

在这里插入图片描述
在这里插入图片描述

过渡到三维

空间卷积是一个非常重要的概念,它不仅能让我们处理彩色图像,更重要的是在单层中应用多个卷积核。第一个重要的原则是,过滤器和要应用它的图像必须具有相同通道数。基本上,这种方式与图3中的示例非常相似,不过这次我们将三维空间中的值与卷积核对应相乘。如果我们想在同一幅图像上使用多个滤波器,我们分别对它们进行卷积,将结果一个叠在一起,并将它们组合成一个整体。
在这里插入图片描述

池化层

除了卷积层,CNNs还经常使用所谓的池化层。池化层主要用于减小张量的大小和加速计算。这种网络层很简单——我们需要将图像分割成不同的区域,然后对每个部分执行一些操作。例如,对于最大值池化层,我们从每个区域中选择一个最大值,并将其放在输出中相应的位置。在卷积层的情况下,我们有两个超参数——滤波器大小和步长。最后一个比较重要的一点是,如果要为多通道图像进行池化操作,则应该分别对每个通道进行池化。

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐