1、一种卷积神经网络实现 黄飞龙 中国电子科学研究院 摘 要: 卷积神经网络 (Convolutional Neural Networks-简称 CNN) 是人工神经网络的一种, 由于其具有结构简单、训练参数少、适应性强、效率高等特点, 在模式识别、图像处理等领域得到了广泛的应用。本文从 CNN的发展历史开始, 对其网络结构、神经元模型和训练方法进行了简要描述。在此基础上, 实现了一个使用 Java语言实现的 CNN算法, 并给出了算法的的程序框架与代码实现, 该算法可以在不使用任何类库的情况下对 MINIST手写数字数据集进行分析识别, 达到了较高的准确率。关键词: 卷积神经网络; CNN; 手
2、写数字检测; 作者简介:黄飞龙 (1981-) , 男, 山东聊城人, 中国电子科学研究院工程师, 中国电子科学研究院硕士, 研究方向为系统集成, 大数据及人工智能;1 引言卷积神经网络是人工神经网络的一种, 因其更加类似于生物神经网络的网络结构具有权值共享等特点, 使得其神经网络权值数量更少, 网络模型的复杂度更低, 已成为当前语音分析和图像识别领域的研究热点。卷积神经网络避免了传统识别算法中复杂的特征提取和数据重建过程, 其网络结构对于图像的平移、按比例缩放、旋转或者共他形式的变形具有很强的适应性。2 卷积卷积 (Convolution) 是分析数学中一种很重要的运算, 是通过两个函数生成
3、第三个函数的一种数学算子, 在图像处理领域对一个图像用卷积核进行卷积计算, 实际上是计算两个函数经过翻转和平移后的重叠部分的面积。其基本数学公式如下所示:2 卷积神经网络卷积神经网络 (Convolutional Neural Networks-简称 CNN) 是一种前馈神经网络, 在模式分类领域, 由于该网络避免了对图像的复杂前期预处理, 可以直接输入原始图像, 因而得到了更为广泛的应用。20 世纪 60年代, Hubel 和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性, 继而提出了卷积神经网络。现在, CNN 已经成为众
4、多科学领域的研究热点之一, 特别是在模式分类领域, 由于该网络避免了对图像的复杂前期预处理, 可以直接输入原始图像, 因而得到了更为广泛的应用。一般地, CNN 的基本结构包括 C层和 S层两个层次。其中, C 层为特征提取层, 该层中的每个神经元的输入与前一层的局部感受野相连, 并提取该局部的特征;S层是特征映射层, 网络的每个计算层由多个特征映射组成, 每个特征映射为一个平面, 平面上所有神经元的权值相等。特征映射结构采用 Sigmoid函数作为卷积网络的激活函数, 该函数影响函数核小的特点使得, 使得基于该函数的特征映射具有位移不变性。图 1 卷积神经网络典型结构 下载原图在图 1中,
5、输入图像通过和三个滤波器, 以及可加偏置进行卷积, 卷积计算完成后在 C1层产生三个特征映射图, 然后对 C1产生的特征映射图中每组的四个像素再进行求和, 加权值, 加偏置等操作, 并通过一个 Sigmoid函数得到三个S2层的特征映射图。这些映射图再进过滤波得到 C3层。这个层级结构再和 S2一样产生 S4。最终, 计算结果被连接成一个向量输入到传统的神经网络, 从而得到输出结果。3 算法模型与代码实现3.1 算法模型本文实现的 CNN与其他模型最大的差别是采样层没有权重和偏置, 只对卷积层进行一个采样过程。由于这个算法模型的测试数据集是 MINIST, 该数据集中每张图像是 28*28大小
6、, 算法模型如下图 2所示:输入:输入层是一个输入向量, 这个向量的大小就是图片的大小, 即一个 28*28矩阵;第一层卷积 C1:使用 55大小的卷积核, 得到 6个 24*24的 Map。第一层采样 S2:使用 22的核, 得到 6个 12*12的 Map。第二层卷积 C3:与上一层是全连接, 使用 55大小的卷积核, 得到 12个 8*8的 Map。第二层采样 S4:使用 22的核, 得到 12个 4*4的 Map。输出:输出层为 12个 1*1的 Map, 输出的每一维都是图片属于该类别的概率, 由于手写数字共有 10种, 结果使用 12维是较为接近的一种表示方法。3.2 代码实现完整
7、代码不再这里赘述, 在程序中未使用任何第三方的库类, CNN 调用代码如下:图 2 算法模型 下载原图4 训练与识别4.1 训练由于本文实现了 CNN算法主要用于检测 MINIST数据集中的手写体数字, 因而本文所使用的 CNN也是有监督的神经网络。在开始训练前, 使用一些不同的小随机数, 对所有的权值进行初始化。这些不同的“小随机数”一方面用来保证CNN网络不会因权值过大而进入局部收敛状态, 从而导致训练失败;另一方面“不同”也用来保证网络可以正常地学习, 否则网络无法训练。本文中的训练算法主要分为前向传输计算和反向传输调整权重两个阶段:第一阶段, 前向传输计算:1) 从 MINIST数据样
8、本集中取一个样本 (X, Yp) , 将 X输入网络;2) 计算实际的输出结果 Op。在此阶段, 信息从 CNN的输入层经过逐级的变换, 传送到输出层。该计算过程的公式如式 (2) 所示:第二阶段, 反向传输调整权重:1) 比较实际输出 Op与理想结果输出 Yp;2) 如果 Op与 Yp相同, 则权值矩阵不变, 否则调整权值矩阵, 使得输出结果为Yp。整个网络结构搭建好以后, 训练只用按照多层神经网络那样训练即可, 其中的权值更新策略都是一致的。所以总体来说, 卷积神经网络与普通的多层神经网络, 就是结构上不同。卷积神经网络多了特征提取层与降维层, 他们之间结点的连结方式是部分连结, 多个连结
9、线共享权重。而多层神经网络前后两层之间结点是全连结。除了这以外, 权值更新、训练、识别都是一致的。4.2 识别本文中实现的 CNN算法使用 MINIST数据集进行了识别测试。MINIST 数据集是一个著名的手写数字数据库, 该数据库是中学生手写的数字, 训练库有 60, 000张手写数字图像, 测试库有 10, 000张, 该数据集中每张图像是 28*28像素大小。首先我们采用 60, 000图片的训练库对该 CNN模型进行训练, 然后使用 10, 000张图片的测试库对该 CNN的识别效果进行检测, 下图给出了在不同的训练重复次数的情况下, 训练的时间以及识别效果对比。从结果图中我们可以看出
10、在图片较小 (28*28 像素) 时, 训练次数与时间基本成线性增长, 使用本文中的 CNN算法实现可在训练 5次的情况下将识别正确率提高到 90%以上。5 总结本文实现了一种不使用任何类库的 Java语言编写的 CNN模型, 并给出了算法模型与代码实现, 该算法可以对 MINIST手写数字数据集进行分析, 达到了较高的准确率。图 3 CNN识别效果 下载原图参考文献1宋波;王启春.卷积神经网络在路牌识别中的应用.公路交通技术2015 第5期。114-118+125. 2肖柏旭.基于卷积网络的人脸检测的研究与实现.河北:华北电力大学 (河北) 硕士论文, 2007. 3黄忆旻.基于图像检索的导游系统的设计与实现.江苏:苏州大学硕士论文, 2016. 4张恒亨.基于传统方法和深度学习的图像精细分类研究.安徽:合肥工业大学硕士论文, 2014. 5马珍玉.基于深度学习和 SVM的植物叶片识别系统的研究与测试.内蒙古:内蒙古农业大学硕士论文, 2016. 6陈晓东.基于卷积神经网络的语音情感识别.广东:华南理工大学硕士论文, 2015.