首页 » python机器学习 » python机器学习全文在线阅读

《python机器学习》12.7.1 卷积神经网络

关灯直达底部

卷积神经网络(Convolutional Neural Network,简写为CNN或ConvNet)在图像识别中的优异表现使其在计算机视觉领域日渐流行,它是当下深度学习领域最流行的神经网络架构之一。卷积神经网络的核心理念在于构建多层特征检测器,以处理输入图片中像素间的空间排列。请注意,卷积神经网络有多个变种。在本节中,我们将讨论此架构的通用理念。如果读者有兴趣了解更多关于卷积神经网络的内容,建议阅读Yann LeCun(http://yann.lecun.com)的相关著作,Yann是卷积神经网络的提出者之一。我特别推荐从下列文献入手学习卷积神经网络:

·Y.LeCun,L.Bottou,Y.Bengio,and P.Haffner.Gradient-based Learning Applied to Document Recognition.Proceedings of the IEEE,86(11):2278-2324,1998.

·P.Y.Simard,D.Steinkraus,and J.C.Platt.Best Practices for Convolutional Neural Networks Applied to Visual Document Analysis.IEEE,2003,p.958.

回忆一下实现多层感知器时,我们将图像展开为向量,并通过输入层使用全连接将其连接到了隐层——此网络架构没有对空间信息进行编码。在卷积神经网络中,我们使用感受野(receptive field)将输入层连接到特征图(feature map)。可以将感受野理解为层叠的窗口,窗口在可以输入图像的像素上滑动,以此创建特征映射。窗口滑动的幅度以及窗口的大小都是模型的先验超参。对特征图的创建称作卷积(convolution)。连接输入像素与特征图单元的层称作卷积层,如下图所示:

需要特别注意的是,特征检测器是可以复用的,这意味着将特征转换到像素单元的感受野在下一层中将共享权重。这里关键一点就是:如果特征检测器在图像中的某一位置是有效的,则它在其他位置同样有效。这种方法的优点在于它极大地减少了参数的数量。由于图像中的不同分块可以采用不同的方式来表示,因此卷积神经网络对于识别图片中不同大小、位置的对象效果很好。由于MNIST数据库中的图片已经做过缩放和中心定位,我们无需对此过多担心。

在卷积神经网络中,卷积层之后紧跟的是汇聚层(pooling layer)(有时也称作子采样层(sub-sampling))。在汇聚层中,我们汇总邻近的特征检测器,以减少传入下一层的特征数量。汇聚层可以看作是一种简单的特征抽取,我们可以将临近特征的平均值或最大值抽取出来,并传递给下一层。为了构建深层卷积神经网络,在将神经网络连至多层感知器进行分类之前,我们先在卷积层和汇聚层之间交替地进行多个层的堆叠。如下图所示: