神经网络与机器学习—卷积神经网络

1)引言

我们之前的神经网络结构都是全连接的。也就是说:每一个输入神经元的都和相邻层的每一个神经元连接。但是这种连接带来的数据量太大了。以我们之前的一个三层神经元举例[784,30,10]。从输入层到隐藏层有:(784+1)*30=23550个参数。这只是一个三层的神经网络,更不要说深度学习了。因此,人们想出了各种连接架构。比如说:卷积神经网络架构。

2)基本概念

卷积神经网络的每一层都是是一个二维的神经网络。如下图:

这里的输入层神经元是一个28*28的二维网格,这个网格中的每一个点(神经元)正好代表图像中的每一个像素。这种神经网络架构看起来是更加合理的,因为在我们的直观感受中,图片就应该是二维的,每个神经元的值正好对应光的强弱。

(1)局部感受域

这里我们与之前不同的是,我们这里并不把每一个神经元都连接到下一层的每个神经元。我们这里选择输入层的一个小区域,比如5*5大小区域的神经元集合作为输入连接到下一层(隐藏层)的第一个神经元。如下:

我们把这块小区域叫做隐藏神经元的局部感受域。

(2)共享权重和偏置

每一个局部感受域(5*5)都有一个权重矩阵(5*5)。而每一个隐藏神经元都有一个偏置。实际上,隐藏层中的每一个神经元都使用的是同样的权重。我们把这个权重矩阵叫做共享权重,隐藏神经元的偏置是共享偏置。又叫filter或者是卷积核。

3)隐藏层的构建

(1)单个映射

有了上面的基本概念,我们这里讲一下,如何构建隐藏层。刚才我根据一个卷积核(共享权重和矩阵)得到了第一个神经元。接下来,我们将局部感受域向右移动一个步长,如下:

得到第二个隐藏层神经元。我们总共向右移动23步,再加上之前的一个神经元,第一层总共得到24个神经元。然后,再将局部感受域向下移动一个步长,得到第二层的第一个神经元。再将局部感受域向左移动23步得到第二层24个神经元。然后,再将局部感受域向下移动一个步长,得到第三层第一个神经元。重复上面的步骤,最后我们得到了24*24的隐藏神经元层。如下:

其中第j,k个隐藏神经元对应的激活值是:

还记得吗?我们的每个隐藏神经元对应的权重矩阵和偏置(卷积核)都是一样的。我们举个例子如下:

可以看到j=1,k=1和j=1,k=2时,其权重矩阵是一样的。这也就意味着隐藏层所有的神经元共用相同的权重和偏置。

(2)多个映射

你可能会问只用这一种权重矩阵,那么我们不就会丢失好多信息吗?没错刚才的一种权重和偏置(卷积核)设置方式只是生成了一种特征映射(feature map)。我们可以用若干个不同的卷积核来生成若干个特征映射来构成一层隐藏层。每一个特征映射根据卷积核所设定的规则(权重大小)提取了图像的一部分特征。如下:

这里,我们用了三种卷积核来生成了一个拥有三层特征映射的隐藏层。总结如下:

一个权重偏置矩阵(卷积核)和输入生成一个特征映射。

若干个不同卷积核和输入生成若干个特征映射,每一个特征映射代表一种图像特征。

这些不同的特征映射构成一层隐藏层。

4)卷积网络的好处

那么这中卷积结构的神经网络有什么好处呢?答案是很明显的。之前我们计算了全连接的神经网络需要23550个参数。那么对于有20个特征映射的卷积神经网络来说,只需要:(25+1)*20=520个参数。23550/520≈40,效果是惊人的。这对于我们和计算机来说是个好消息。

5)池化(pooling)

卷积层的下一层就是池化层,池化层简化了卷积层输出的网络。那么到底什么是池化呢?

池化就是从每一层特征映射的一个小区域内提取出这个区域内的关键信息。这个关键信息的定义方式可以是最大的像素值,也可以这些区域像素的平均值,也可以取区域像素值的平方和再平方根(L2混合)等等。如下:

这里,我们提取出一个特征映射层24*24中的每2*2个小区域中的最大像素值,将提取出的像素值12*12再组成一个最大值池化映射层。我们将所有的特征映射层用这种方式提取池化映射层。然后,这些池化映射层组成了一个池化层。这就是最大值混合。如下:

这是一个由一副28*28图像经过卷积处理,然后再经过池化的流程图。

总结一下,不同的Filter (不同的 weight, bias) ,卷积以后得到不同的 特征映射,不同方式提取关键信息得到不同的pooling map层。

最后我们得到卷积神经网络处理图像的完整流程:

这个网络从28 * 28 个输出神经元开始,这些神经元用于对MNIST 图像的像素强度进行编码。接着的是一个卷积层,使用一个5*5 局部感受野和3 个特征映射。其结果是一个3*24*24隐藏特征神经元层。下一步是一个最大值混合层,应用于2*2 区域,遍及3 个特征映射。结果是一个3*12*12隐藏特征神经元层。这里从池化层到输出层是全连接层。

到这里,我们的卷积神经网络到这里就结束了。回想一下学了什么:局部感受域,共享权重和偏置,特征映射,池化,全连接,L2混合,最大值混合。

学到这里有一点个人感受:当你碰到自己一时不理解的公式例子什么的,自己写一写算一算就出来了。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180418G17ZB100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券