全连接神经网络
在利用全连接神经网络进行图像分类时,网络中的神经元与相邻的层上的每个神经元均连接:
输入层代表每个像素,这种网络结构未考虑每个像素之间的位置关系,仅是根据大量数据去训练,得到想要的分类模型。
然而,真实的图像中像素之间是有位置关系的,如果能提取这种包含位置关系的特征,将使神经网络更加有效。
CNN的启发
CNN 是从视觉皮层的生物学上获得启发的。视觉皮层有小部分细胞对特定部分的视觉区域敏感。Hubel 和 Wiesel 于 1962 年进行的一项有趣的试验详细说明了这一观点,他们验证出大脑中的一些个体神经细胞只有在特定方向的边缘存在时才能做出反应(即放电)。
这种一个系统中的特定组件有特定任务的观点(视觉皮层的特定神经元细胞寻找特定特征)在神经中同样适用。
CNN卷积层
CNN 的第一层通常是卷积层(Convolutional Layer)。卷积层的输入内容为一个28 x 28 x 3 的像素值数组。
如图,卷积层的每个神经元对应输入层的一个n×n大小的区域(局部感受野),因此卷积网络可以提取二维特征。
往右一个像素移动局部感受野,连接到第二个神经元:
此重复,便构建起了第一个隐藏层。每个隐藏神经元具有一个偏置和连接到它的局部感受野的n×n权重,同一个隐藏层的不同神经元使用相同的权重和偏置。
因此第一层的所有神经元检测的是完全相同的特征,只是在输入图像的不同位置。卷积网络能很好的适应图像的平移不变性:例如稍稍移动一副猫的图像,它仍然是一副猫的图像。
从输入层到隐藏层的映射称为一个特征映射,共享权重和偏置通常被称为一个卷积核或者滤波器。
一个完整的卷积层由几个不同的特征映射组成:
CNN池化层
池化层(pooling Layer)通常紧接着在卷积层之后使用,它要做的是简化从卷积层输出的信息。
一个混合层将卷积层输出的特征进行凝缩。例如,混合层的每个单元概括前一层的一个2×2的区域,常见为最大值池化(max-pooling),输出该区域内的最大激活值。
如果有三个特征映射,组合在一起的卷积层和最大值池化层如下图:
直观上,最大值池化是发现某一特征是否在某一个大概位置出现。一旦一个特征被发现,它的确切位置并不如它相对于其他特征的大概位置重要。
另一个常用的池化方法:L2池化(L2 pooling),取2×2区域中激活值的平方和的平方根。
CNN网络
以手写数字识别为例,整个CNN网络结构如下:
输入层:28×28的像素。
卷积层:使用一个5×5的局部感受野和3个特征映射,结果是一个3×24×24隐藏特征神经元层。
最大值池化层:应用2×2区域,遍及3个特征映射,结果是一个3×12×12隐藏特征神经元层。
全连接层:将池化层每一个神经元连接到每一个输出神经元。