深度学习进阶手写数字识别99.38%准确率的网络是怎样炼成的今天我们来聊聊一个非常经典的话题——加深网络。之前我们学了很多关于神经网络的知识各种层、技巧、CNN、最优化方法……现在是时候把这些技术整合起来打造一个深度网络挑战MNIST手写数字识别。你可能会想MNIST不是已经“玩烂”了吗但今天这个网络准确率高达99.38%错误率仅0.62%而且它的结构非常有意思是后续VGG等经典网络的雏形。让我们一步步拆解这个网络看看它为什么这么强以及加深网络到底带来了什么好处。一、向更深的网络出发先上图这就是我们今天要实现的深度CNN图1。它比我们之前实现的任何网络都要深而且结构上参考了后来大名鼎鼎的VGG网络。这个网络有什么特点卷积核全部使用3×3 的小型滤波器。别小看这小东西后面我们会解释它的好处。通道数随着层数加深通道数逐步增加16 → 16 → 32 → 32 → 64 → 64。这是CNN的常见设计空间尺寸减小深度增加。池化层适当插入池化层逐步缩小中间数据的空间大小高和宽。全连接层 Dropout最后接全连接层并使用了Dropout防止过拟合。激活函数全部使用ReLU。权重初始化采用He初始值针对ReLU的最优初始化方法。最优化方法使用Adam结合了Momentum和AdaGrad的优点。把这些技术一组合效果立竿见影在MNIST上达到了99.38%的识别精度错误率仅0.62%。二、看看那些“识别错误”的图像是不是觉得0.62%的错误率很低那我们来看看究竟是哪些图像让网络“翻车”了图2。仔细观察你会发现这些图像对我们人类来说也很难判断左上角的“6”看起来像“0”旁边的“3”像“5”“1”和“7”容易混淆“0”和“6”、“3”和“5”也经常认错。你看连人类都会犯的错网络自然也难以避免。不过反过来想这也说明这个深度CNN已经学到了类似人类的视觉特征——它并不是胡乱猜测而是抓住了图像的本质。这就是深度学习的魅力它能模仿甚至超越人类的某些感知能力。三、还能再提高吗看看排行榜上的高手99.38%已经很高了但总有人追求极致。在 “What is the class of this image ?” 这个网站上专门有MNIST数据集的精度排行榜图3。排行榜前几名基本都是Neural Networks、Deep、Convolutional的天下。截止2016年6月最高识别精度是99.79%错误率0.21%用的也是CNN但层数并不特别深卷积层2层全连接层2层。这说明对于MNIST这种简单任务加深网络的好处并不明显反而可能导致过拟合或训练困难。那高手们是怎么进一步提升精度的几个关键技术集成学习组合多个模型取平均结果。学习率衰减随着训练进行逐步降低学习率让收敛更稳定。Data Augmentation数据扩充这是最简单却最有效的方法之一。什么是 Data Augmentation简单说就是人为地“制造”更多训练数据。比如对原始图像施加微小的变化旋转、平移、翻转、缩放、亮度调整等生成新的图像图4。这样一来训练集就变大了模型能学到更多不变性特征泛化能力自然更强。对于MNIST你可以随机平移几个像素、稍微旋转一下甚至添加噪声。这些操作都不会改变数字的本质但能极大地丰富训练样本。实现起来也不难有兴趣的读者可以自己尝试效果立竿见影。四、为什么加深网络有效虽然目前理论还不完全透彻但有一些直观的解释和实验数据支持加深网络的好处。1. 减少参数数量扩大感受野你可能听说过堆叠两个3×3卷积可以替代一个5×5卷积。这是真的吗看图5和图6。一个5×5卷积的输出节点对应输入数据的5×5区域。而两个3×3卷积中间有激活函数堆叠后第二个卷积的输出节点对应第一个卷积输出的3×3区域而这个3×3区域又对应输入数据的5×5区域。所以两个3×3卷积的感受野等同于一个5×5卷积。参数数量呢一个5×5卷积25个参数。两个3×3卷积2 × 3×3 18个参数。参数减少了如果再堆叠三个3×3感受野相当于7×7参数仅27个而一个7×7卷积需要49个参数。参数越少模型越轻量且不易过拟合。同时中间夹着的ReLU激活函数增加了非线性提升了模型的表现力。2. 分层学习提高学习效率还记得CNN的层次化特征提取吗浅层网络学习边缘、纹理等低级特征中层学习形状、部件深层学习物体整体概念图7。如果网络很浅一个卷积层就需要直接学会从像素到“狗”的映射这需要海量数据和复杂的学习。但通过加深网络我们可以把问题分解第一层只学边缘很简单数据需求少第二层利用边缘信息学形状第三层利用形状信息学部件……这样每一层只需要解决一个相对简单的子问题学习效率大大提高。而且因为低层特征如边缘在各种图像中都普遍存在所以可以用更少的数据学好然后逐层传递高层特征自然水到渠成。五、总结与思考今天我们通过一个深度CNN的例子看到了加深网络的威力用3×3小卷积核堆叠减少参数增加非线性配合He初始化、Adam、Dropout等技巧在MNIST上达到99.38%的准确率通过Data Augmentation等方法还可以进一步提高精度加深网络的核心好处减少参数、扩大感受野、分层学习、提高数据效率。当然MNIST只是一个起点。在更复杂的任务如ImageNet大规模图像识别中加深网络带来的提升更加明显。从AlexNet到VGG再到ResNet、DenseNet网络越来越深性能也越来越强。这背后正是今天所讲思想的延伸。希望今天的分享对你有所帮助。如果你对加深网络还有其他疑问或者想了解某个具体技术的实现欢迎在评论区留言。我们下期再见参考资料原书《深度学习入门基于Python的理论与实现》网站What is the class of this image ?文献[33]Cireşan, D.C., et al. (2012). Multi-column deep neural networks for image classification.