卷积神经网络通俗理解( 五 )


在正式开始之前 , 我们先来聊聊CNN的背景故事 。当你第一次听说卷积神经网络的时候 , 你可能就会联想到一些与神经学或者生物学有关的东西 , 不得不说 , 卷积神经网络还真的与他们有某种关系 。
CNN的灵感的确来自大脑中的视觉皮层 。视觉皮层某些区域中的神经元只对特定视野区域敏感 。1962年 , 在一个Hubel与Wiesel进行的试验( 视频 )中 , 这一想法被证实并且拓展了 。他们发现 , 一些独立的神经元只有在特定方向的边界在视野中出现时才会兴奋 。比如 , 一些神经元在水平边出现时兴奋 , 而另一些只有垂直边出现时才会 。并且所有这种类型的神经元都在一个柱状组织中 , 并且被认为有能力产生视觉 。
在一个系统中 , 一些特定的组件发挥特定的作用(视觉皮层中的神经元寻找各自特定的特征) 。这一想法应用于很多机器中 , 并且也是CNN背后的基本原理 。(译者注:作者没有说清楚 。类比到CNN中 , 应是不同的卷积核寻找图像中不同的特征)
回到主题 。
更详细的说 , CNN的工作流程是这样的:你把一张图片传递给模型 , 经过一些卷积层 , 非线性化(激活函数) , 池化 , 以及全连层 , 最后得到结果 。就像我们之前所说的那样 , 输出可以是单独的一个类型 , 也可以是一组属于不同类型的概率 。现在 , 最不容易的部分来了:理解各个层的作用 。
首先 , 你要搞清楚的是 , 什么样的数据输入了卷积层 。就像我们之前提到的那样 , 输入是一个32 × 32 × 3(打个比方)的记录像素值的数组 。现在 , 让我来解释卷积层是什么 。解释卷积层最好的方法 , 是想象一个手电筒照在图片的左上角 。让我们假设手电筒的光可以招到一个5 × 5的区域 。现在 , 让我们想象这个手电筒照过了图片的所有区域 。在机器学习术语中 , 这样一个手电筒被称为卷积核(或者说过滤器 , 神经元) (kernel, filter, neuron)。而它照到的区域被称为感知域 (receptive field)。卷积核同样也是一个数组(其中的数被称为权重或者参数) 。很重要的一点就是卷积核的深度和输入图像的深度是一样的(这保证可它能正常工作) , 所以这里卷积核的大小是5 × 5 × 3 。
现在 , 让我们拿卷积核的初始位置作为例子 , 它应该在图像的左上角 。当卷积核扫描它的感知域(也就是这张图左上角5 × 5 × 3的区域)的时候 , 它会将自己保存的权重与图像中的像素值相乘(或者说 , 矩阵元素各自相乘 , 注意与矩阵乘法区分) , 所得的积会相加在一起(在这个位置 , 卷积核会得到5 × 5 × 3 = 75个积) 。现在你得到了一个数字 。然而 , 这个数字只表示了卷积核在图像左上角的情况 。现在 , 我们重复这一过程 , 让卷积核扫描完整张图片 , (下一步应该往右移动一格 , 再下一步就再往右一格 , 以此类推) , 每一个不同的位置都产生了一个数字 。当扫描完整张图片以后 , 你会得到一组新的28 × 28 × 1的数 。(译者注:(32 - 5 + 1) × (32 - 5 + 1) × 1)。这组数 , 我们称为激活图或者特征图 (activation map or feature map)。
如果增加卷积核的数目 , 比如 , 我们现在有两个卷积核 , 那么我们就会得到一个28 × 28 × 2的数组 。通过使用更多的卷积核 , 我们可以更好的保留数据的空间尺寸 。
在数学层面上说 , 这就是卷积层所做的事情 。
让我们来谈谈 , 从更高角度来说 , 卷积在做什么 。每一个卷积核都可以被看做特征识别器 。我所说的特征 , 是指直线、简单的颜色、曲线之类的东西 。这些都是所有图片共有的特点 。拿一个7 × 7 × 3的卷积核作为例子 , 它的作用是识别一种曲线 。(在这一章节 , 简单起见 , 我们忽略卷积核的深度 , 只考虑第一层的情况) 。作为一个曲线识别器 , 这个卷积核的结构中 , 曲线区域内的数字更大 。(记住 , 卷积核是一个数组)
现在我们来直观的看看这个 。举个例子 , 假设我们要把这张图片分类 。让我们把我们手头的这个卷积核放在图片的左上角 。