摘要
本文首先简介了人工神经网络的发展史,继而介绍了递归神经网络的理论以及百度在基于递归神经网络的应用研究,最后探讨了递归神经网络在人脸识别中的应用。
1. 人工神经网络发展史[1][2]
人工神经网络的历史可以追溯到上个世纪40年代,第一个神经元模型是1943年McCulloch和Pitts提出的,称为Threshold Logic,它可以实现一些逻辑运算的功能。1958年Rosenblatt提出了感知机(perceptron),它本质上是一个线性分类器,1969年Minsky和Papert写了一本书“Perceptrons”,他们在书中指出:①单层Perceptrons不能实现XOR功能;②计算机能力有限,不能处理神经网络所需要的长时间运行过程。这本书令人工神经网络的研究进入了长达10多年的“冬天”。
事实上,如果把单层感知机堆成多层(称为Multilayer Perceptrons或MLPs),是可以求解线性不可分问题的,但当时缺乏有效的算法。尽管1974年哈佛大学的博士生Paul Werbos提出了比较有效的BP算法,但没有引起学界的重视。直到1986年多伦多大学的Geoff Hinton等人重新发现这一算法,并在“Nature”上发表,人工神经网络才再次受到重视,直到今天仍被广泛应用。与此同时,带反馈的神经网络开始兴起,其中以Stephen Grossberg和John Hopfield的工作最具代表性。很多复杂的认知现象比如联想记忆都可以用反馈神经网络进行模拟和解释。所有这些因素促成了上世纪80年代神经网络的研究热潮。
但是BP算法在神经网络的层数增多时很容易陷入局部最优,也很容易过拟合。即往往在训练集上准确率很高,而在测试集上效果差。这部分归因于当时的训练数据集规模都较小。而且计算资源有限,即便是训练一个较小的网络也需要很长的时间。总体而言,神经网络与其它模型相比并未在识别的准确率上体现出明显的优势,而且难于训练。上世纪90年代,Vladimir Vapnik提出了SVM,虽然其本质上是一特殊的两层神经网络,但因其具有高效的学习算法,且没有局部最优的问题,使得很多神经网络的研究者转向SVM。多层前馈神经网络的研究逐渐变得冷清。
直到2006年深度网络(deep network)和深度学习(deep learning)概念的提出,神经网络又开始焕发一轮新的生命。深度网络,从字面上理解就是深层次的神经网络。这个名词由多伦多大学的Geoff Hinton研究组于2006年创造。事实上,Hinton研究组提出的这个深度网络从结构上讲与传统的多层感知机没有什么不同,并且在做有监督学习时算法也是一样的。唯一的不同是这个网络在做有监督学习前要先做非监督学习,然后将非监督学习学到的权值当作有监督学习的初值进行训练。这项工作重新燃起了学术界对于神经网络的热情,一大批优秀的学者加入到深层神经网络的研究中来,尤其是蒙特利尔大学的Bengio研究组和斯坦福大学的Ng研究组。从提出的模型种类上分析,Bengio研究组的一个重要贡献是提出了基于自编码器(auto-encoder)的深度学习网络。自编码器与RBM的激活函数都是sigmoid函数,学习原则也是一致的,都可以看成是最大化数据的似然概率,只是实现方式不同。而Ng研究组的一个重要贡献是提出了一系列基于稀疏编码的深层学习网络。他们的工作延伸了深层网络的定义:在同一个网络中,不同层之间的学习方式可以是不一样的。
值得强调的是,在2006年之前也有一个学习效率非常高的深度网络――卷积神经网络。这个网络由纽约大学的Yann LeCun于1998年提出,并在图像分类(包括手写体认别、交通标志识别等)中得到了很多应用。比如在IJCNN2011年的交通标志识别竞赛中,一组来自瑞士的研究者使用基于卷积神经网络的方法一举夺魁。这个网络本质上是一个多层感知机,人们分析其成功的关键可能在于它所采用的局部连接和分享权值的方式,一方面减少了的权值的数量;另一方面降低了过拟合的风险。近年来,人们发现如果卷积神经网络先进行无监督学习,再进行有监督学习,效果会更好。
深度学习在计算机视觉领域最具影响力的突破发生在2012 年,Hinton 的研究小组采用深度学习赢得了ImageNet图像分类的比赛。ImageNet是当今计算机视觉领域最具影响力的比赛之一。它的训练和测试样本都来自于互联网图片。训练样本超过百万,任务是将测试样本分成1000 类。自2009 年,包括工业界在内的很多计算机视觉小组都参加了每年一度的比赛,各个小组的方法逐渐趋同。在2012 年的比赛中,排名2 到4 位的小组都采用的是传统的计算机视觉方法,手工设计的特征,他们准确率的差别不超过1%。Hinton 的研究小组是首次参加比赛,深度学习比第二名超出了10%以上。这个结果在计算机视觉领域产生了极大的震动,掀起了深度学习的热潮。
在学术界收到广泛关注的同时,深度学习也在工业界产生了巨大的影响。在Hinton 的科研小组赢得ImageNet 比赛之后6 个月,谷歌和百度发都布了新的基于图像内容的搜索引擎。他们沿用了Hinton 在ImageNet 竞赛中用的深度学习模型,应用在各自的数据上,发现图像搜索的准确率得到了大幅度的提高。百度在2012 年就成立了深度学习研究院,于2014 年五月又在美国硅谷成立了新的深度学习实验室,聘请斯坦福著名教授吴恩达担任首席科学家。Facebook 于2013 年12 月在纽约成立了新的人工智能实验室,聘请深度学习领域的著名学者,卷积网路的发明人YannLeCun 作为首席科学家。2014 年1 月,谷歌四亿美金收购了一家深度学习的创业公司,DeepMind。鉴于深度学习在学术和工业界的巨大影响力,2013年MIT Technology Review将其列为世界十大技术突破之首。
2. 递归神经网络
近来递归神经网络(Recurrent Neuron Networks,RNNs)在对于涉及到序列输入的任务,比如语音和语言,能获得更好的效果,引起了学者们的广泛关注。
2.1递归神经网络原理简介[3]
RNNs一次处理一个输入序列元素,同时维护网络中隐式单元中隐式的包含过去时刻序列元素的历史信息的“状态向量”。如果是深度多层网络不同神经元的输出,我们就会考虑这种在不同离散时间步长的隐式单元的输出,这将会使我们更加清晰怎么利用反向传播来训练RNNs(如图1)。
图1 递归神经网络
RNNs是非常强大的动态系统,但是训练它们被证实存在问题的,因为反向传播的梯度在每个时间间隔内是增长或下降的,所以经过一段时间后将导致结果的激增或者降为零。
由于先进的架构和训练方式,RNNs被发现可以很好的预测文本中下一个字符或者句子中下一个单词,并且可以应用于更加复杂的任务。例如在某时刻阅读英语句子中的单词后,将会训练一个英语的“编码器”网络,使得隐式单元的最终状态向量能够很好地表征句子所要表达的意思或思想。这种“思想向量”(thought vector)可以作为联合训练一个法语“编码器”网络的初始化隐式状态(或者额外的输入),其输出为法语翻译首单词的概率分布。如果从分布中选择一个特殊的首单词作为编码网络的输入,将会输出翻译的句子中第二个单词的概率分布,并直到停止选择为止。总体而言,这一过程是根据英语句子的概率分布而产生的法语词汇序列。这种简单的机器翻译方法的表现甚至可以和最先进的(state-of-the-art)的方法相媲美,同时也引起了人们对于理解句子是否需要像使用推理规则操作内部符号表示质疑。这与日常推理中同时涉及到根据合理结论类推的观点是匹配的。
类比于将法语句子的意思翻译成英语句子,同样可以学习将图片内容“翻译”为英语句子(如图3)。这种编码器是可以在最后的隐层将像素转换为活动向量的深度卷积网络(ConvNet)。解码器与RNNs用于机器翻译和神经网络语言模型的类似。近来,已经掀起了一股深度学习的巨大兴趣热潮(参见文献[86]提到的例子)。
RNNs一旦展开(如图1),可以将之视为一个所有层共享同样权值的深度前馈神经网络。虽然它们的目的是学习长期的依赖性,但理论的和经验的证据表明很难学习并长期保存信息。
为了解决这个问题,一个增大网络存储的想法随之产生。采用了特殊隐式单元的LSTM(long short-termmemorynetworks)被首先提出,其自然行为便是长期的保存输入。一种称作记忆细胞的特殊单元类似累加器和门控神经元:它在下一个时间步长将拥有一个权值并联接到自身,拷贝自身状态的真实值和累积的外部信号,但这种自联接是由另一个单元学习并决定何时清除记忆内容的乘法门控制的。
LSTM网络随后被证明比传统的RNNs更加有效,尤其当每一个时间步长内有若干层时,整个语音识别系统能够完全一致的将声学转录为字符序列。目前LSTM网络或者相关的门控单元同样用于编码和解码网络,并且在机器翻译中表现良好。
过去几年中,几位学者提出了不同的提案用于增强RNNs的记忆模块。提案中包括神经图灵机,其中通过加入RNNs可读可写的“类似磁带”的存储来增强网络,而记忆网络中的常规网络通过联想记忆来增强。记忆网络在标准的问答基准测试中表现良好,记忆是用来记住稍后要求回答问题的事例。
2.2百度基于递归神经网络对传统光学字符识别框架的改造[4]
光学字符识别的概念早在 20世纪 20 年代便被提出,一直是模式识别领域研究中极具代表性的重要课题。近些年,随着移动互联网的发展,光学字符识别技术的应用场景也从传统的办公领域(例如邮政编码、书籍扫描文档传真)逐渐渗入日常生活,产生出许多以手机拍照光学字符识别作为入口的文字信息录入及查询类应用。
图2 经典的光学字符识别流程和技术框架
经典的光学字符识别系统的流程和技术框架如图2所示,从输入图像到输出最终的文字识别结果,历经版面分析、行分割、字分割、单字识别、语言模型解码和后处理。涉及的技术分为基于经验制定的规则和基于统计学习的模型两大类。前者包括系统预处理阶段(版面分析、行分割、字分割)的二值化、连通域分析、投影分析等,以及后处理阶段的规则噪声过滤器;后者包括基于类方向梯度直方图(Histogram of OrientedGradient,HOG) 特征的单字识别引擎和基于 N-gram 的语言模型,用于单字识别和语言模型解码阶段。在以印刷体文档扫描识别为代表的光学字符识别传统应用场景中,版面结构的规则性较强,字形、字体的一致性较高,而文字同背景的区分性又较好。在数据简单、条件可控的情况下,经典的光学字符识别技术架构通过细致的人工规则制定和适量的模型参数学习,便可以达到比较理想的识别精度。但在广泛的自然场景中,文字呈现出的图像信息复杂度显著增大(版面缺失、艺术字手写体常见、文字周边背景复杂),而拍摄图像的条件又得不到很好的控制(拍摄角度、距离导致的形变,摄像头品质性能存在巨大差异,光照和阴影变化复杂),经典的光学字符识别技术架构难以满足实际应用的需求。究其原因,是这一技术架构的处理流程繁琐冗长导致错误不断传递,以及过分倚重人工规则却轻视大规模数据训练所致。
图3 基于CNN-RNN的序列光学字符识别流程
图4 基于CNN-RNN的序列光学字符识别结果
针对复杂场景的特点和经典技术框架的不足,百度对光学字符识别的系统流程和技术框架进行了大幅改造(见图3)。在系统流程方面,引入文字检测概念,和行分割合并成新的预处理模块,任务是检测图像中包含文字的区域并生成相应文字行;将字分割和单字识别合并成新的整行识别模块 ;基于 N-gram 的语言模型解码模块予以保留,但将主要依赖人工规则的版面分析和后处理模块从系统中删除。6 个步骤减少到 3 个步骤,降低了传递误差造成的不良影响。作为预处理步骤,新引入的文字行检测模块需要在复杂的自然图像中准确地提取长短不一的文字行区域。我们摒弃传统的二值化和连通域等基于规则的方法,采用基于学习的 Boosting、卷积神经网络结合图模型(graphic model) 的思路解决这一问题,并在权威的公开评测中大幅超越之前最好的文字检测方法。此外,由于整行文字识别是一个序列学习(sequence learning) 问题,百度有针对性地研发出基于双向长短期记忆神经网络 (Bidirectional LongShort-term Memory, BLSTM)[5]的递归神经网络序列模型学习算法,结合卷积神经网络模型提取出的图像特征,不考虑每个字符出现的具体位置,只关注整个图像序列对应的文字内容,使得单字分割和单字识别问题融为一体,最终实现深度学习理论追求的理想――端到端训练。这样做能够充分利用文字序列上下文关联进行消歧,避免传统方法中字符分割造成的不可逆转的错误。如图4所示,这一序列学习模型极其擅长识别字分割比较困难的文字序列,甚至包括潦草的手写电话号码。此外,这一序列学习模型还使得训练数据的标注难度大为降低,便于收集更大规模的训练数据。不同语言(即便字词、句子的长短结构迥异)光学字符识别问题也可以纳入同一个技术框架内统一解决,大幅降低系统维护成本。
目前,百度已经将光学字符识别技术应用于许多用户产品中。比如,百度“涂书笔记”能够帮助用户在读书过程中只须拍照即可轻松记录和分享书中内容,百度“作业帮”让用户拍照题目即可搜索 题 目 解答。精准可靠的光学字符识别技术在这些应用中扮演重要角色,体现出自然图像中文字识别的特殊价值。
此外百度也在其并行分布式平台上基于RNNs用自然语言描述图片,在没有任何人工干预的情况下,仅仅使用图文数据教机器描述图片(见图5、图6)。
图5 图像生成语言算法中使用的递归神经网络模型
图6 根据图像生成语言描述的模型输出结果
3 基于递归神经网络的人脸识别?
从2中的RNNs的理论简介以及百度对RNNs的应用,可以总结出RNNs这样的一个端到端的系统的应用有三个方向:1)序列多对多的映射;2)序列一对多的映射;3)序列多对一的映射。从百度对RNNs的应用来看,其分别属于前二者。那么对于基于视频数据的人脸识别是否能够应用RNNs的序列多对一的映射来完成呢?本文认为这是一个值得思考和研究的方向。
一个完整的人脸识别系统,可以在含有人脸的图片或视频流中自动检测和跟踪人脸,进而达到识别目的,通常也叫做人像识别、面部识别。总的来说,人脸识别系统可以大致分为以下四个部分[6]:
首先,检测人脸在哪里。首先要从照片中识别出人脸在哪里,它的大小、位置等。目前常用的是级联分类器,可以利用人工设计的特征模型或深度学习模式进行一级一级的筛选。若要加快速度,可在前期使用人工设计的特征模型,快速筛去不是人脸的部位,后期利用深度学习去精细化地判断每一个留下的部位是否是人脸。
其次,定位人脸和各个部位。在给定人脸之后,再确定出鼻子、眼睛、嘴巴等,这通常采用回归预测的方法。回归器可以有很多种,随机森林方法、深度学习方法都能实现。以深度学习为例,训练的时候告诉回归器到底眼睛在哪里、鼻尖在哪里,预测值和真实值的距离越小越好,并据此不断调整回归器的参数,用成千上万的人脸照片反复训练,直到回归器能够准确输出人脸各个器官的准确位置信息。
第三,人脸特征的匹配与识别。这个过程是将待识别的人脸特征与已经得到的人脸特征模板进行比较,根据详细程度对人脸的身份信息进行判断。使用深度学习方法可以大大简化这一过程,因为所有的特征匹配都是由神经网络自动实现,这也是目前最有效的识别方法。
最后,人脸属性的识别。用户感兴趣的人脸属性可能包含很多,比如年龄(使用在How-Old.net中),性别,表情,种族,发型,是否戴眼镜,胡子的类型。这类属性通常使用深度学习方法可直接进行分类或回归。
目前人脸识别方面最好的结果几乎都是针对单幅图像的识别,也就是利用大数据和深度神经网络来提取区分能力强的特征。而本文认为这样的单幅图像的识别实际上是不太符合人的认知的,因为人有时候单单根据一个背影就能够识别出另外一个人,也就是对被识别的人不同角度的信息进行先期的记忆,简单来讲也就是扑捉了不同角度的“上下”文信息。而递归神经网络就具有记忆“上下”文信息的能力。因此本文认为基于递归神经网络的人脸识别是一个值得思考和研究的方向。
参考文献
[1] 胡小林(清华大学),深度学习――人工神经网络再掀研究热潮(2013)
[2] 王晓刚(香港中文大学),深度学习在图像识别中的研究进展与展望(2015)
[3] Yann LeCun、Yoshua Bengio、Geoffrey Hinton,Deep Learning(2015,Nature)
[4] 都大龙等(百度),基于深度学习的图像识别进展――百度的若干实践(2015)
[5] A. Graves, Supervised Sequence Labelling with Recurrent Neural Networks(2013)
[6] 孙剑(微软亚洲研究院视觉计算组首席研究员),人脸识别:应用开启创新潮,算法进展才起步(2015)
本文出自 “Remys” 博客,谢绝转载!