基于深度学习的验证码识别方法设计与实现.doc
本 科 毕 业 设 计(论 文)学院(部)电子信息学院题 目基于深度学习的验证码识别方法设计与实现年 级2014专业电子信息工程班 级14电信学号1428403048姓 名温美松指导老师黄鹤职称副教授论文提交日期2018年5月目录中文摘要1Abstract2第一章 绪论41.1 课题研究背景及意义41.2 国内外研究现状51.3 研究内容61.4 论文结构6第二章 深度学习的基本理论82.1 神经元的数学模型82.2 多层前向神经网络92.3深度神经网络102.4 神经网络的学习方式11第三章 验证码图像处理技术123.1 图像预处理123.2 字符定位和分割13第四章 卷积神经网络的设计与实现164.1 网络结构164.2 网络初始化194.3 误差反向传播214.3.1 全连接层的反向传播224.3.2 池化层的反向传播234.3.3卷积层的反向传播24第五章 网络性能分析255.1 参数的选择255.2 识别结果255.3 隐层神经元数量对网络性能的影响265.4 学习率对网络性能的影响28第六章 总结306.1 工作总结306.2 不足与展望30参考文献32致谢35中文摘要验证码是一个系统区分人类与非人类行为的有效方式。验证码识别技术能够使计算机程序输入正确的验证码,伪装成人类用户进入目标系统。另一方面,系统方面需要考虑破解验证码识别技术,修补验证方式的可能漏洞,使之能够更有效地区分人类与计算机的行为。深度学习能够使计算机更好地处理复杂的输入,因此能够识别更为复杂的验证码。深度学习是人工智能的一个重要分支,对于识别验证码图像,相对一些其他的学习算法,深度学习在同样的计算资源的条件下,具有更为优秀的性能,因此在处理同样的问题时深度学习能够节省一定的计算资源。本课题主要讨论了基于深度学习的验证码识别方法设计与实现。具体地,第一步采集验证码图像。这些验证码图像来源有两种:一是通过编程仿照常见的验证码图像生成数据集;二是从网站上下载验证码图像保存成数据集。第二步对验证码数据集进行去噪、定位等预处理,再使用垂直投影法进行分割,将分割出来的字符保存为学习样本。第三步构建卷积神经网络,使用采集的部分验证码图片对网络进行训练,调整参数。最后一步使用剩余的验证码图像对训练好的网络测试,整理测试结果,统计正确率,分析不同参数对神经网络性能的影响。经过测试,本论文设计的卷积神经网络基本能够成功地识别验证码图像,对仅包含数字的验证码图像识别效果较好,正确率达99.28%。关键词:深度学习, 卷积神经网络, 验证码识别, 图像处理AbstractThe verification code is an effective way to distinguish human or non-human behavior. The verification code recognition technology enables the computer program to input the correct verification code, disguised as a human user to enter the target system. On the other hand, the system needs to consider cracking the verification code recognition technology, repair the possible holes in the verification methods, so that it can more effectively distinguish the behavior of human and computer. Deep learning enables computers to process complex inputs better, and therefore to recognize more complex verification codes. It is an important branch of artificial intelligence. For the recognition of verification code images, compared with some other learning algorithms, deep learning in the same condition of computing resources, has better performance. Therefore, deep learning can save certain computing resources when dealing with the same problems than other general algorithms.This paper mainly discusses the design and implementation of verification code recognition method based on deep learning. Specifically, the first step is to capture the images of the verification code. There are two sources of these CAPTC-code images: one is to generate by programming to emulate common CAPTC-code images; the other is to download the CAPTC-code images from websites and save them into datasets. The second step is to pre-process the data set of verification code such as de-noising, locating, and then using vertical projection method to segment the characters and save the characters as training samples. The third step is to construct the convolutional neural network and to train the network using some pictures of the CAPTCA to adjust the parameters. The last step is to use the rest of the verification code images to test the network. And then collate the test results, count the correct rate and analyz the effect of different parameters on the performance of neural network.After testing, the convolutional neural network designed in this paper can recognize the image of verification code successfully, and it is better to recognize the image which only contain numbers, the correct rate is 99.28%.Keywords : Deep Learning, Convolutional Neural Network, Verification Code Identification, Image Processing第一章 绪论人工智能指的是模仿生物神经学,构建神经元的数学模型,使其能对复杂的信息进行处理。自从西班牙解剖学家Cajal在19世纪末创立神经元学说之后,神经元的一些生物学特征和相关的部分电学性质相继被发现。1943年,神经元的M-P模型被首次提出,创建该模型的是来自美国的心理学家McCulloch以及另一位数学家Pitts。来自加拿大的神经心理学家Hebb在1949年提出了“Hebb法则”,他认为学习现象的发生在于神经元突触的产生和变化。来自美国的心理学家Rosenblatt结合了以上三人的理论,首次用精确的数学算法来定义神经网络,提出了“感知机”模型。神经网络的基础就是感知机。一般的神经网络也叫多层感知机,分为输入层、隐藏层和输出层,而具有多个隐藏层的神经网络就是深度神经网络。深度学习就是运用深度神经网络,模仿人脑对声音、图像等数据进行解释的过程,能够很好地将复杂多变的输入映射为具体输出,具有从少量样本中学习集中特征的能力。1.1 课题研究背景及意义深度学习的应用领域有很多,其中之一就是验证码识别。验证码是一个系统区分人类与非人类的有效方式。验证码识别技术能够使计算机程序输入正确的验证码,伪装成人类用户进入目标系统。另一方面,系统方面需要先了解然后破解验证码识别技术,修补自身验证码的可能漏洞,使之能够更有效地区分人类与计算机的行为。随着互联网技术的发展,人们在使用互联网的同时越来越注重验证码的有效保护,希望网络的能够做到人类能识别而拦截所有机器程序的程度。当遇到黑客对网站发起攻击的时候,验证码就是网站安全的第一道防线21,27,因此针对验证码识别的研究的实践意义不容小觑。我们可以通过研究验证码的识别技术,从根本上了解验证码的识别细节,从而做出针对性措施,加强验证码的保护能力,使验证码能够继续实现本身的价值。深度学习的初衷就是为了让计算机在处理某些问题时,能够拥有近似于人类的处理能力,这与验证码存在的意义是相对立的。验证码不希望机器能够像人类一样识别图像中的字符,而深度学习则努力使计算机能够尽可能地接近甚至超越人类。这一点一般的机器学习手段也能够实现,但是深度学习的优势在于能够将目标的特征逐级提取,比如我们学习汉字,先从基本的横、竖、撇、捺开始,最后将这些基本的特征进行组合,形成目标的完整特征,据此能够进行学习将目标分类或者预测。1.2 国内外研究现状早在1986年,Rumelhar、Hinton等人就初步将反向传播算法(BP,Back Propagation)应用于神经网络的学习之中1,使神经网络的学习过程变得简单可行。但是,第一因为训练数据集规模太小,第二由于计算资源有限,即使训练一个比较简单的网络都可能需要非常长的时间。与其它的机器学习模型相比较,当时的BP网络模型在正确率上并没有明显优势,更多的学者普遍青睐其他的浅层的机器学习模型,比如支持向量机模型、Boosting模型等。直到1989年,LeCun根据误差的反向传播算法,成功地将神经网络应用于识别美国邮政服务提供的手写邮政编码数字2。根据这一成果,并结合Fukishima在1980年提出的关于卷积(Convolution)、池化(Pooling)的概念(当时还不称为卷积和池化)3,1998年LeCun提出了LeNet-5网络模型4。LeNet-5具有多层神经元,使用合适的梯度学习方法和反向传播算法,能够对图像进行特征的逐级提取,在针对手写字母的识别中取得了非常好的效果,是深度学习史上第一个可称为完善的卷积神经网络(CNN,Convolutional Neural Networks)。至此,人们对卷积神经网络的研究步入了第一次高潮时期。但是在之后近十年的时间里,有关卷积神经网络的研究渐渐陷入泥沼,其中的主要原因分为两点:第一是当时的人们发现深度神经网络在根据BP算法进行训练时所需的计算资源非常多,仅仅凭借当时的硬件方面的研究水平几乎不可能实现那种大规模的计算;第二是包括支持向量机(SVM,Support Vector Machine)在内的许多浅层机器学习算法也渐渐开始崭露头角,人们投入到卷积神经网络中的研究热情和精力渐渐稀少。一直到2006年Hinton指出“多隐层神经网络具有更为优异的特征学习能力,并且其在训练上的复杂度可以通过逐层初始化来有效缓解”5,10,有关深度学习和卷积神经网络的研究才再度为人们所关注,深度学习的研究再一次涌起热潮。2012年,Hinton的学生Alex等人在ImageNet竞赛上提出了AlexNet24。这是在LeNet-5诞生之后深度学习的又一大进步。AlexNet较LeNet-5有许多新的思想,包括但不局限于数据增强、局部归一化、激活函数采用ReLU、DropOut方法等6,10,19,25,在ImageNet竞赛中以高出第二名近10%正确率的优异性能奠定了CNN在深度学习中的重要地位22。继Alex之后,关于CNN的研究迭出不穷,成果丰硕,其中较为经典的模型之一是2014年香港中文大学教授汤晓鸥、王晓刚及其研究团队提出的DeepID深度学习模型,在LFW (Labeled Faces in the Wild)数据库上获得了99.15%的识别率,这个结果超过了人眼的识别效果(实验表明,如果仅仅给出人脸中心区域,人的肉眼在LFW上的识别率为97.53%)18。汤晓鸥及其团队于2014年连续发表了文三篇文献,对深度学习进行了系统阐述的同时,尝试从理论上解释CNN模型强大的特征提取能力,这也是人们首次试图去研究CNN的本质属性,标志着对CNN的研究步入新的时代7,8,9。1.3 研究内容本课题主要讨论基于深度学习的验证码识别方法设计与实现,在深度学习的理论基础上,设计了一个卷积神经网络,对几种常见的验证码图像进行识别,通过调整神经网络的参数来分析讨论不同的识别结果。这些验证码图像部分来自计算机生成与网站上类似的验证码,部分来自人工在网站上的采集。在图像识别之前首先对验证码样本进行二值化和去噪处理,并采用垂直投影法进行图像字符的分割,将分割之后的字符按顺序保存,作为卷积神经网络的输入数据。从所有验证码样本中选取部分作为网络的学习样本,对网络进行训练,部分作为测试样本,用于检测训练后的网络的性能。最后通过调整网络的参数,分析了总结部分参数对网络性能的影响。1.4 论文结构本论文第一章是绪论,详述了深度学习的研究背景、验证码识别的研究意义和国内外的深度学习的发展现状,介绍了主要的工作情况和论文的结构。第二章介绍了深度学习的一些基本理论内容,从神经元的M-P模型,到通用的神经网络模型,再到深度神经网络的一般模型,都做了具体的介绍。第三章介绍了本课题所用到的图像处理技术,包括图像去噪、目标定位与图像分割,图像预处理是保障网络识别率的重要前提之一。第四章是关于如何用Matlab语言构建深度神经网络的内容。涉及到采用的卷积神经网络的基本结构、数据的前向传播、误差的反向传播、网络的权值参数更新等内容。第五章描述了运用第四章构建的网络进行训练学习之后,对实验结果的分析讨论。通过观察实验结果,分析并修改可能对其产生影响的参数,尝试进一步优化网络。第六章是总结和展望。第二章 深度学习的基本理论人工神经网络是计算机对生物神经网络的一种模拟和近似,由大量的人工神经元(感知器)通过相互连接,构成自适应的非线性动态网络。神经网络的每一层都由大量的神经元节点组成,节点之间通过权值参数连接,成功训练好的神经网络能够独立处理复杂的非线性问题,而神经网络学习的本质就是权值和偏置量的自适应调整。2.1 神经元的数学模型依据人体神经元的生物结构,来自美国的心理学家McCulloch和另一位数学家Pitts于1943年提出了神经单元的数学模型:图2-1 神经元的M-P模型根据图2-1可以得到神经元的输出为:其中,、.是输入的个数据量,、.是神经元的连接量,是偏置量,为神经元的输出。是激活函数,它的作用是加入非线性因素,在一定程度上能够用来解决线性模型表达、分类能力不足的问题12,13。使用较为广泛的激活函数有sigmoid函数:tanh函数:relu函数:以及softmax函数:这里表示输入向量中的第个数据,输出代表的指数占所有输入数据的指数的和的概率。2.2 多层前向神经网络神经网络是大量神经元组成的网络,处于不同层的神经元作用不同,它们彼此合作,组成了能够对复杂的输入数据进行解释的网络。典型的前向神经网络结构如图2-2所示32。图2-2 前向神经网络模型根据图2-2容易得到输入-输出关系为其中,是输入向量,是输入层与隐藏层的全连接权值矩阵,是隐藏层向下的输出值,是隐藏层与输出层之间的全连接权值矩阵,为隐藏层神经元对应的偏置向量,是输出层神经元对应的偏置向量,是网络最终的输出向量。网络的输出矢量一般不是最终的结果,比如用作分类的网络,输出层采用的激活函数一般是softmax函数,矢量中的每一个分量的值就代表了网络“认为”输入属于第类的概率。通常需要加一个判断函数得到网络的分类结果:网络将概率最大的类别作为分类的结果。2.3深度神经网络所谓“深度”神经网络是相对于一般的神经网络而言的,通常将具有两个及两个以上的隐藏层的神经网络称为深度神经网络,与此对应,只有一个隐藏层的神经网络就是“浅度”神经网络。一般的深度神经网络结构如图2-3所示。图2-3 通用深度神经网络结构一般的浅度神经网络的局限性,是在样本有限和计算资源有限的情况下,对复杂函数的映射能力有限,针对复杂的分类问题,这类神经网络的泛化能力受到了一定制约。在这样的前提下,若要使浅度神经网络达到深度神经网络的效果,所需的神经元数量和权值矩阵的尺寸,是非常惊人的。深度学习可通过学习一种深层的非线性的网络结构,实现对复杂函数的近似逼近,并具备从少数样本里面集中捕获数据的本质特征的强大能力。多个隐层的神经网络可以用较少的参数来表示较为复杂的函数,比浅层的神经网络具有更优异的映射能力,能够对输入信息的特征进行更本质的刻画,这对数据的特征的收集、归纳与分类是更为有利的。2.4 神经网络的学习方式深度神经网络的学习方式有多种,较为常见的有监督学习、无监督学习两种。有监督学习(Supervised Learning)要求神经网络学习的时候,人为地提供监督信号,或者说期望输出,称为“标签”。网络将根据输入,通过自身权值传递信号,产生最终输出,与期望的输出进行比较从而计算误差,再根据误差来调整整个网络的权值和偏置参数,最终达到与监督信号非常接近的程度。有监督学习方式通常用于样本标签已知的分类模式。无监督学习(Unsupervised Learning)不需要借助外部的监督信号,能够在没有标签的条件下对原始的数据资料进行分类,解析数据的内部结构。不同于有监督学习网络,无监督学习网络在学习时并不知道它的分类结果正确与否。无监督学习的特点是仅仅对网络本身提供输入范例,而网络本身会自主地从这些范例中找出数据潜在的分类规则。当学习完成后,也能够通过新的学习和测试将之应用到新的样本中。第三章 验证码图像处理技术要使深度神经网络能够学习识别验证码,有两种可行性方案:一是端到端的识别,不对验证码进行分割预处理,而是直接通过神经网络得到输出11,26,33。二是分割识别,对验证码进行预处理和分割之后,按分割顺序将字符通过神经网络,并将得到的输出按顺序排列,得到网络对整张验证码图像的识别结果。端到端的识别,涉及到的多标签分类问题颇为复杂33。限于个人能力与时间问题,本设计采用分割识别的方案。3.1 图像预处理图3-1 图像的灰度化和二值化由于待识别的验证码图像是彩色的图像,而验证码的识别,依据的是其字符形状而非字符色彩,所以二值化操作不会使需要的数据信息丢失。对输入的验证码样本,经过灰度化、二值化处理之后,能够降低图像数据的维数,有效降低数据处理的复杂度31。图3-1为初始的验证码样本图像及其经过二值化之后的图像。二值化之后的验证码图像没有了色彩数据的干扰,但是还有明显的噪点的存在,这些噪点无疑会影响到网络的识别效果,更直接的是影响到之后的分割处理,所以在分割识别之前,还需要对验证码图像进行去噪处理。图3-2为去噪之后的效果。经过二值化与去噪处理之后,验证码图像上少了许多干扰性数据,只保留待识别的字符和干净的背景,这能在很大程度上提升神经网络的识别效果。图3-2 图像去噪3.2 字符定位和分割图3-3 目标定位由于验证码图像中,字符的位置都是在图像内部,而边缘都是无用的背景信息,所以在进行字符分割之前,对字符图像进行目标定位,确定字符的位置,割舍可能会带来干扰的边缘信息,能够对提升最终的识别正确率有很大的帮助14,28。定位算法并不复杂,其核心是确定字符区域的边界,在边界处进行背景切割,保留字符目标。算法流程如下:第一步:经过前面去噪预处理之后的图像通常只有目标区域和背景区域两部分,很容易检测到目标字符的左边界、右边界、上边界和下边界。第二步:这四个边界包围起来的区域就是定位到的字符所在的区域,根据这四个边界就能进行边缘切割,保留目标区域。图3-3是进行目标定位的示意图和结果。图像预处理的最后一步是字符分割。字符分割的算法有很多种,复杂程度不一,针对待识别的验证码图像,酌情选择合适的分割算法。就本课题处理的验证码图像而言,字符之间无粘连,采用垂直投影法是最简单有效的分割算法,对验证码图像进行垂直方向上的投影,将投影值最少的位置作为分割点对图像进行分割。图3-4 垂直投影分割图3-5 图像分割结果图3-4所示为垂直投影算法分割的细节。算法流程如下:首先将待分割图像进行垂直投影,统计投影的值。没有字符存在的地方,甚至有字符存在并且粘连,但是粘连比较少的区域,其投影值会明显比字符所在区域的投影小得多。第二步寻找这些投影值小的位置,初步确定为选取分割的点。第三步结合具体的验证码图像特征,去除部分不可能的分割点,在剩下的分割点中选取合适点,即可进行分割。图3-5是图像分割前后的对比。为了与后面的卷积操作匹配,对分割之后的字符图像进行了边缘补零操作,避免在进行卷积时丢失字符的边缘特征。经统计,对采用的验证码样本进行使用垂直投影法分割的成功率是96.3%。第四章 卷积神经网络的设计与实现4.1 网络结构与一般的深度神经网络的全连接不一样,卷积神经网络的层与层之间并不都是全连接,其前面几层采用局部连接方式进行数据特征的感受与提取,最后几层通过全连接将提取到的特征值映射为输出的分类结果15,16,17,20。图4-1 卷积神经网络图4-1所示为本课题所用的卷积神经网络的结构图。网络第一层为输入层(Input Layer),输入层的输入为输入图像,输出也是输入图像,作用非常简单,是网络与外界的输入接口,将外界的输入图像传给后面的各层。第二层是卷积层(Convolutional Layer),卷积核的大小为5×5,一个卷积层的细节如图4-2所示。对于每个卷积核,设其25个权值参数分别为,当其扫描到输入图像某个区域时,该区域25个与卷积核权值对应位置的像素分别为,卷积核对应的偏置参数为,则会在输出图像上产生一个输出,设这个输出为,采用的激活函数为,则有:对输入图像而言,这样的卷积操作是逐个像素进行的。每扫描一个次,产生输出图像中一个对应的像素点的值。由于边缘无法扫描,所以输入32×32的图像,经过5×5的卷积核扫描后,产生的输出图像尺寸为:(32-5+1)×(32-5+1)=28×28事实上,一个卷积核的本质是对输入的图像进行某个基本特征的提取。对于验证码字符而言,虽然字符是数字和字母,但基本特征和汉字类似,是横、竖、弯等笔画,所以需要多个卷积核对其进行多个基本特征的提取,因此得到的输出的图像又称为特征图。在此处,所选卷积核个数为6,对于英文字符和数字而言,六种笔画基本能描述一个字符。这6个卷积核参数并不相同,因此会向第三层池化层输出6个特征图。图4-2 卷积操作示意图第三层为池化层(Pooling Layer),也叫下采样层,池化层的计算与卷积层的计算基本类似:扫描输入图像的一个小区域,得到向下层输出的一个像素点的值。只不过池化层的卷积核作用是取扫描区域的最大值或者平均值等(最大池化、平均池化),并且其中的权值不由网络修改。平均值池化(Mean Pooling)的示意图如图4-3所示:图4-3 平均值池化示意图在本课题所采取的平均值池化中,池化卷积核的尺寸为2×2,即输入图像中每2×2的小区域中的像素值,被池化为输出图像的1个对应的像素值,所以池化卷积核的参数都是0.25。与第二层相似,设第次扫描输入图像的小区域像素点为,得到的对应的输出像素值为,则得到以下等式:最大值池化(Max Pooling)示意图如图4-4所示:图4-4 最大值池化示意图设第次扫描输入图像的小区域像素点为,得到的对应的输出像素值为,得到最大值池化的输入、输出关系式为:即在每扫描到的2×2的小区域中,保留像素值值最大的那个像素点作为下一层对应位置的像素值。不管是平均值池化还是最大值池化,每次扫描的区域都是2×2,并且扫描的间隔是2,即扫描区域互不重叠。此外为了保证池化的像素点没有遗漏,要求输入图像长、宽能够被池化尺寸(扫描的小区域的尺寸)的长、宽整除。池化之后,图像的尺寸将大大减小,例如采用2×2的池化尺寸,得到的输出特征图将是输入图像的面积的四分之一,但关键信息依旧保留,这能够有效地节约大量的计算资源和计算时间,同时也降低了对网络的神经元数量、权值矩阵规模的要求。在池化的时候,如果输出的是扫描区域的平均值,往往能保留整体数据的特征,而如果输出的是扫描区域的最大值,则能较好地保留数据纹理上的特征23。除了平均值池化和最大值池化之外,常用的池化模型还有随机池化(Stochastic Pooling)、重叠池化(Overlapping Pooling)、金字塔池化等(Spatial Pyramid Pooling)等。网络的第四层与第二层一样,是卷积层,卷积核大小与也第二层一致。与第二层不一样的是,第二层的输入图像为待识别的验证码字符,只需要卷积1张图像得到6张输出特征图,而第四层的输入是经过第三层池化层之后的6张14×14的特征图。前文提到过,图像卷积的操作实质上是特征的提取,这个在网络的第二层就可完成。第四层的卷积操作并非对第二层的重复,而是更进一步,对第二层提取到的基本笔画特征进行组合。对特征的组合,有很多种方式。本课题采用的方式是全连接形式,即第三层输出的6张特征图作为第四层的输入,与6个不同的卷积核进行卷积,并将结果求和,得到第四层输出的1张特征图。为充分体现不同的基本特征的组合的结果,在本课题的网络中第四层将输出12张特征图。也就是说第四层卷积层拥有(6×12=)72个不同的卷积核,每个卷积核配备一个偏置量。网络第五层与第三层一样,是池化层,目的同样是在保留关键信息的同时降低数据量,节省计算资源和计算时间。网络的最后三层是全连接层与输出层。前面的卷积、池化操作,最终将提取出输入字符图像的特征,用这些作为特征值,相当于字符的唯一身份证号码,经过全连接层的计算能够的到最终的识别结果。4.2 网络初始化在网络前向传输的第一阶段,首先是初始化好所有的权值和偏置,才能根据输入图像得到分类结果。在一般的网络中,通常使用均匀分布将权值矩阵初始化。均匀分布意味着每个权值矩阵的每个参数,都在一个范围内等概率取值。形式如下式:是随机赋值函数,和分别是连接权值能取到的的最小值和最大值,通常这个范围是-1,1。可以用方差相乘的定理证明,采用这样的方式初始化的权值,将会导致网络的每层的方差依次以乘积的形式叠加,到最后输出层得到的结果方差将会很大或者很小。若每层的方差小于1,到最后的输出的方差将会很小,由于权值的更新依赖于输出层的均方误差,这会使得网络的调整非常缓慢。若每层的方差大于1,经多层传输之后输出层的方差将会非常大,这会使网络收敛速度更慢,甚至无法收敛。因此本论文采用Xavier方法进行权值的初始化。Xavier初始化是在均匀分布的基础上,对权值矩阵的最大值和最小值进行了公式化,从而尽量保证网络输出层的方差与输入层数据的方差基本一致,其初始化公式为:是第层待初始化的权值参数,是第层的参数个数,是第层的参数个数。4.3 前向传播根据卷积网络的结构,设输入图像为,第二层的6个卷积核分别为,. ,输出的6个特征图分别为,. ,有:是卷积操作,是6个卷积核对应的偏置量,为激活函数sigmoid函数。设经第三层池化操作后输出的6张特征图为,. ,第四层的72个卷积核分别为,. ,对应偏置为,输出的12张特征图为,有:设经第五层池化层之后的输出为,. ,全连接层1表示为向量,这里是的所有像素点个数,按顺序平拉成。全连接层2表示为向量,这里是层的神经元数量,具体取值至今没有一个完全成立的理论来确定,只能根据经验公式来确定29。表示上层层神经元数量,即300,表示下层即输出层神经元数量,为10,是经验常数,一般取值为0,10。综上,层神经元数量初步取值为:设层和层之间的全连接权值矩阵为,偏置量为,层和输出层之间的全连接权值矩阵为,偏置量为,由式(2.6)得:是网络的输出,据此可以得到卷积网络的分类结果。4.3 误差反向传播在有监督学习模式中,神经网络的权值,依赖的是最终输出的结果与给定的标签间的误差而进行更新。设网络最终输出为,给定的标签为,则误差为:这里输出向量和标签向量中,只有一个元素值为1,其余元素值为0,值为1的元素所在的位置,就是这个样本所在的类别。比如对于10分类而言,第三个元素为1,其余元素为0,代表这个样本是属于第三类的。通常误差不会使用误差来进行权值更新,而是使用均方误差:同时输入个样本的时候,均方误差的表现形式为这时候的也称为损失函数,它表征着网络的输出与实际期望之间的偏离程度,而神经网络最终的训练目标就是通过调整权值和偏置量,使网络的输出和期望尽可能一致,也就是使损失函数达到最小值。4.3.1 全连接层的反向传播寻找损失函数的最小值,可以通过计算其梯度来实现30。在梯度法中,梯度是使增加的方向,其反方向就是减小的方向。即权值的调整为其中是学习率,能够在一定程度上调节连接权值调整的幅度,在本网络中,是一个常量。 是误差对权值矩阵的偏导数,事实上,单独地计算每个权值分量和偏置量而进行调整,是不太可能的,更好的做法是以矩阵的形式计算每层的调整量,反向逐层调整,误差也随之逐层反向传导。全连接层的权值更新步骤为:1、 设层和层之间的全连接权值矩阵为,偏置量为,层和输出层之间的全连接权值矩阵为,偏置量为,输出层输出向量为,标签向量为。由于激活函数采用sigmiod函数,其导数为:且根据式(4.8)、式(4.10)和式(4.13)有:点乘“.*”操作代表两个向量对应的元素相乘。残差:也称作输出层的灵敏度,表征了输出节点对总的误差产生的影响程度。计算出输出层的灵敏度后,全连接层其他的参数的调整都将依赖的反向传播而进行,具体的传播可以由链式法则实现,最终得到全连接层的调整量为:4.3.2 池化层的反向传播池化层是卷积网络中不可导的一层,虽然池化层没有可供调整的参数,但是与池化层毗邻的卷积层需要调节权值和偏置量,故灵敏度需要传递给卷积层,需要先通过池化层。因为经过池化层的图像面积发生了变化,要使梯度能够继续反向传播至前面,则需要“上采样”。设第层为池化层,第层的灵敏度为,上采样操作将还原成第层池化之前的尺寸,因为采用的池化尺寸是2×2,使用平均值池化,所以上采样的结果是每2×2的区域的灵敏度是一样的,是中对应位置的元素值。设则这样,梯度通过上采样传递到了池化层。若采用的是最大值池化,则在池化的时候需要记录最大值在2×2区域中的位置,上采样之时其他位置补0。例如在前向传播时记录的位置为:那么根据记录的位置信息上采样的结果为:4.3.3卷积层的反向传播通过上采样求到的灵敏度,也就是采样层的上一层,卷积层的灵敏度。设第层为卷积层,其卷积核为,对应的偏置量为,输入特征图为,输出的特征图为,有:其中是将偏置向量的每一元素求和,最后的结果作为误差对偏置的导数。第五章 网络性能分析5.1 参数的选择根据第四章的内容,网络各参数的选择都有一定限制,最初设置的参数如表5-1所示:表 5-1 网络的初始参数参数含义卷积核权值卷积核偏置学习率迭代次数隐藏层神经元数全连接层权值全连接层偏置初始值Xavier初始化011022Xavier初始化0 在实际的使用中,卷积核的大小、池化核大小以及网络层数,都由经验公式大概确定,并根据最终网络的性能进行参数调整以确定合适的参数值。5.2 识别结果在5.1节选取的初始值条件下,使用学习样本对网络进行训练,第一次训练的样本是通过编程生成的验证码图像,训练之后,网络对这类验证码的识别正确率较高,为99.28%。图5-1所示是网络对这类验证码的分割结果和识别结果。此时用另一个测试集去测试网络,正确率并不理想,仅仅为47.246%。这是由两个数据集的差异造成的,虽然都是数字字符,但是第一类数据集本身有倾斜,而第二类没有,此外两种验证码还有其他特征差异,因此网络即使对相同数字提取的特征,也不完全相同。在初次学习之后由于网络正确率偏低,需要使用第二类数据集在第一次训练的基础上对网络使用相同的参数再重复训练一次,因为样本集发生了变化,需要使网络“熟悉”第二类验证码的字符特征。在第二次学习之后,网络对第二次验证码的识别率有很大的提升,达到96.8116%。图5-1 对自生成验证码的识别样例图5-2是网络对第二类验证码的分割结果和识别结果。图5-2 对采集的验证码识别样例5.3 隐层神经元数量对网络性能的影响卷积神经网络实质上可以分为两部分,一是特征提取部分,这部分通过卷积和池化操作实现,另一部分是全连接部分,将提取到的特征值映射到输出层。整个网络中,对网络的最终性能有所影响的参数是比较多的,其中主要的参数之一就是全连接层当中的隐藏层的神经元数量。在4.3节中,的值是根据经验公式确认的,所谓经验公式是没有严格的理论论证,却能在某些场合使用并具有较好效果的公式,有可能会出现“此之蜜糖,彼之砒霜”的现象,