摘要: 随着硬件算力的提升和互联网大数据的积累,人工智能迎来了第三次热潮,深度学习也获得了前所未有的公众关注和产业投资。而在不同类型的深度神经网络模型中,卷积神经网络获得了最广泛的研究。本文首先介绍卷积神经网络的基本概念、结构组成和对应的功能,然后介绍常见的结构模型和在人工智能下的众多领域的应用,最后分析其不足和未来的研究方向。
关键词:深度学习;卷积神经网络;网络模型结构;计算机视觉;
卷积神经网络(convolutional neural network, CNN),也称卷积网络和 convnet,是一种专门用来处理具有类似网络结构的数据(例如时间序列数据和图像数据)的神经网络,被广泛用于处理计算机视觉领域的任务。它通过学习模块化模式和概念的层次结构来表示视觉世界,在一些模式识别领域取得了良好的效果。CNN通常具有多层结构,但基本由输入层,卷积层(convolutional layer),池化层(pooling layer),全连接层和输出层组成。
CNN的输入通常是一个矩阵,例如一个图片对应的像素信息,有时会将它的输入输出数据称为特征图(fueature map)。卷积层作为输入层后的第一层,用来提取输入的局部特征,并保持图像的空间连续性,它有多个滤波器组成,用来计算不同的特征映射。不同层数的卷积层可以提取出不同层级的特征,第一层的卷积层可以提取边缘、线条等低级特征,随着层数的加深,更高层的卷积层可以提取出更高级更抽象的特征信息,而其中关于图像视觉内容的信息越来越少,关于类别的信息越来越多,这也是有关复杂特征提取任务的模型一般都具有较多层数的一个原因。
池化层紧跟在卷积层之后,作用是降低中间隐藏层的维度,减少后面所需的运算量,并起到空间不变性的作用。可以采用最大池化(max-pooling),平均池化(mean-pooling),混合池化(mixed pooling),随机池化等方式进行计算。另一方面它没有要学习的参数,只是从目标区域中取最大值(或平均值等),也不改变输入数据的阶数。
经过多次卷积和池化操作之后,CNN通常会在最后连接一个或者多个全连接层。全连接层将当前层的每一个神经元与上一层的所有神经元连接,对前面逐层计算和映射提取到的特征进行处理,汇总所有局部特征,并将其中神经元的激励函数所得到的的输出值传递给输出层。
人们常认为深度学习模型是一个“黑盒模型”,即模型所学到的表示很难用人类的思维去理解和呈现,但对于CNN来说不是这样,它的表示可以用可视化的形式展现,主要原因是它们是视觉概念的表示。自从深度学习第三次热潮以来,人们也开发出了多种技术来对这些模型进行可视化和解释。
LeNet-5是LeCun在1998年提出的一种用于识别手写数字的CNN结构模型,也是最早和最具有代表性的结构。它是一个浅层网络模型,由两个卷积层、两个池化层以及一个全连接层组成,模型当时被用于银行支票上手写数字的识别,取得很好的效果。但与现在的CNN网络相比,有几个不同点,一是其激活函数使用sigmod函数,而现在主要是用ReLU函数,而是它使用平均池化缩小中间数据,而现在最大池化是主流。
AlexNet是由Hinton等人在2012年为了验证深度学习的有效性提出的一个具有里程碑意义的模型,在当年参加ILSVRC首次实现了15.4%的Top 5误差率并赢得了冠军。它由五个卷积层、三个池化层、两个全连接层以及一个数据局部归一化层组成。它的训练首次实现了GPU加速计算,使得模型在可接受的时间范围内完成训练,采用dropout避免模型过拟合,用ReLU替代sigmod作为激活函数,用最大池化代替平均池化。
GoogLeNet是由来自Google的Szegedy等人在2014年提出的一个22层深的CNN模型,在当年的ILSVRC图像分类任务中获得冠军。它由Inception结构作为基础模块进行级联,每个模块使用不同尺寸的滤波器与最大池化并行处理,并通过删除全连接层减少参数数量,提高模型的计算效率和性能。
ResNet(全称残差网络,residual network)是由微软研究院KaiMing He等四位华人在2015年提出的一个152层深的CNN模型,在当年ILSVR竞赛中获得图片分类、物体定位、物体检测等多项冠军。在之前深度网络面临的一个问题是训练过程中会出现梯度消失,而ResNet通过在网络中每隔两三层插入跨层连接,把原来的拟合问题转化为残差函数的学习问题,保证梯度能传到底层,也使得输入层的信息能直接保留到后面的网络层。
除了以上模型之外,每年ILSVRC挑战赛以及其他竞赛中也涌现出其他许多优秀的模型例如VGG、DenseNet、Dual Path Network(DPN)、SENET等等都在基本的CNN模型上进一步作出了不同程度的改进。这些模型呈现的趋势是网络层数越来越深,但需要的计算量有所减少,取得的效果也越来越好。
随着第三次人工智能的浪潮袭来,众多研究机构或者公司都开发出了各自的深度学习框架,包括Keras、Torch、Caffe、Theano、CNTK、PyTorch、TensorFlow、PaddlePaddle等等,这里列举几个简单介绍。
Keras是一个模型级的库,为开发深度学习提供了高层次的构建模块,容易上手,适合初学者学习,也是Kaggle社区里最热门的一个深度学习框架。它不处理张量操作、微分等低层次的运算,而是将TensorFlow、Theano、CNTK等框架作为它的后端引擎处理这些问题。但缺点是灵活性受限,相比于原生框架其效率略低,如果是作为最终产品和大型模型的话不太适合用它来写。
TensorFlow是由Google团队开发的一套框架,使用数据流图描述数值计算过程,支持多个语言,文档详细,社区较为活跃,具备可移植性和丰富的算法库。缺点是计算图是纯Python编写,速度较慢,需要先编译后执行,另外版本更新迭代较快,API接口变动较频繁。
PyTorch是由FaceBook团队开发的一套框架,提供GPU加速的张量计算和动态计算图,相比于TensorFlow代码可读性更好,更便于模块组合和调试。缺点是相比于TensorFlow其社区规模还较小,在工业部署和生产环境还不太成熟。
CNN被广泛应用于计算机视觉领域,包括图片分类、图片定位、目标检测、人脸识别、目标追踪、行为识别、图像超分辨率重建等等诸多方面,还有在此基础上的风格迁移、图片鉴黄、水印检测、美学质量评价、自动着色等等很有意思的应用,这里同样列举几个简单介绍。
图片处理包括图片样式的处理以及图片信息的处理,前者有美颜、滤镜、风格迁移等,后者有图片分类、定位、标注等。图片分类是计算机视觉领域的一项基本任务,它是将给定的图像分类到几个预定义类中,例如识别出一幅图片里面的动物是猫还是狗。定位则是找出识别目标在图像中出现的位置,通常用一个边框进行标记。上图则是除了标注图像以外还根据图片对象添加描述信息。
人工智能如此热门的一个原因就是它几乎可以让各行各业都变得更加便捷,上面提到的CNN基本应用组合起来就可以形成一个强大高效的智能生态系统。以美团为例,它每天都有百万级的图片产生量,单纯依靠运营人员人工审核不仅耗时耗力而且审核能力有限。太多人员参与也会导致审核标准难以统一和实时更新,如果利用图像处理与CNN和其他机器学习相关技术识别图像内容,事先自动化审核图片质量,由机器自动禁止不符合规定的图片,自动通过符合规定的图片,再将不能确定的图片交给人工审核,可以极大地提高效率并降低维护成本。
对于用户上传的图片,可以首先判断是否存在水印,然后是否涉及色情、政治、暴恐,是否是明星的脸(避免被控告侵犯肖像权)以及是否是广告图片,通过这些审核的图片才可以正常显示。此外这些图片还可以根据其美学质量排列显示的顺序,高质量的图片优先显示在缩略图当中,低质量的图片靠后显示。再根据用户的点击率和停留时间对模型迭代优化。这样的话无疑会提高用户体验,也有助于规避内容风险,提高产品营收和用户留存率。
CNN的特点是稀疏交互、参数共享、池化操作和多层结构,它通过多层非线性变换自动从数据中提取特征,具有很强的表达能力和学习能力,适应数据的平移旋转和缩放,但是它在训练模型时和应用场景中还是有一些不足。例如:
综上所述,CNN相较于传统机器学习方法在计算机视觉等领域取得了巨大的进步,但是在未来研究人员和开发人员仍然需要做更多进一步的探索。
[1] Ian Goodfellow, Yoshua Bengio, Aaron Courville. Deeping Learing. MIT Press, 2016.
[2] Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to document recognition. Proceedings of the IEEE, november 1998.
[3] Isma Hadji, Richard P. Wildes. What Do We Understand About Convolutional Networks? arXiv, 2018.
[4] François Chollet. Deep Learning with Python. Manning, 2017.
[5] 美团算法团队. 美团机器学习实践. 人民邮电出版社, 2018.
[6] 葫芦娃. 百面机器学习. 人民邮电出版社, 2019.
[7] 斎藤 康毅. ゼロから作るDeep Learning. O'Reilly, 2016.
[8] Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton. ImageNet Classification with Deep Convolutional Neural Networks. NIPS, 2012.
[9] Simonyan, Karen, and Andrew Zisserman. Very deep convolutional networks for large-scale image recognition. arXiv, 2014.
[10] He, Kaiming, et al. "Deep residual learning for image recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.
[11] Szegedy, Christian, et al. "Going deeper with convolutions." Proceedings of the IEEE conference on computer vision and pattern recognition. 2015.