2.0_.jpg

 
【导读】深度学习很火,说起深度学习中一个很重要的概念——卷积神经网络(CNN)似乎也人人皆知。不过,CNN究竟是什么,涉及哪些概念,经过如何发展,真正要有逻辑地归纳一遍,估计不少人都说不清。日前,南洋理工大学研究人员梳理CNN发展历史,从基础组成部分讲起,介绍并探讨CNN在视觉识别方面的原理及应用,是系统深入理解CNN的好文。
Recent Advances in Convolutional Neural Networks
 
 

摘要
 
过去几年,深度学习在解决诸如视觉识别、语音识别和自然语言处理等很多问题方面都表现出色。在不同类型的神经网络当中,卷积神经网络是得到最深入研究的。早期由于缺乏训练数据和计算能力,要在不产生过拟合的情况下训练高性能卷积神经网络是很困难的。标记数据和近来GPU的发展,使得卷积神经网络研究涌现并取得一流结果。本文中,我们将纵览卷积神经网络近来发展,同时介绍卷积神经网络在视觉识别方面的一些应用。
 
 
引言
 
卷积神经网络(CNN)是一种常见的深度学习架构,受生物自然视觉认知机制启发而来。1959年,Hubel & Wiesel [1] 发现,动物视觉皮层细胞负责检测光学信号。受此启发,1980年 Kunihiko Fukushima 提出了CNN的前身——neocognitron 。

20世纪 90 年代,LeCun et al. [3] 等人发表论文,确立了CNN的现代结构,后来又对其进行完善。他们设计了一种多层的人工神经网络,取名叫做LeNet-5,可以对手写数字做分类。和其他神经网络一样, LeNet-5 也能使用 backpropagation 算法训练。

CNN能够得出原始图像的有效表征,这使得CNN能够直接从原始像素中,经过极少的预处理,识别视觉上面的规律。然而,由于当时缺乏大规模训练数据,计算机的计算能力也跟不上,LeNet-5 对于复杂问题的处理结果并不理想。

2006年起,人们设计了很多方法,想要克服难以训练深度CNN的困难。其中,最著名的是 Krizhevsky et al.提出了一个经典的CNN 结构,并在图像识别任务上取得了重大突破。其方法的整体框架叫做 AlexNet,与 LeNet-5 类似,但要更加深一些。

AlexNet 取得成功后,研究人员又提出了其他的完善方法,其中最著名的要数 ZFNet [7], VGGNet [8], GoogleNet [9] 和 ResNet [10] 这四种。从结构看,CNN 发展的一个方向就是层数变得更多,ILSVRC 2015 冠军 ResNet 是 AlexNet 的20 多倍,是 VGGNet 的8 倍多。通过增加深度,网络便能够利用增加的非线性得出目标函数的近似结构,同时得出更好的特性表征。但是,这样做同时也增加了网络的整体复杂程度,使网络变得难以优化,很容易过拟合。

研究人员提出了很多方法来解决这一问题。在下面的章节中,我们会先列出CNN的组成部分,然后介绍CNN不同方面的最近进展,接着引入快速计算技巧,并探讨CNN在图像分类、物体识别等不同方面的应用进展,最后归纳总结。
 
 
基本组成部分
 
在不同的参考资料中,对 CNN的组成部分都有着不同的描述。不过,CNN的基本组成成分是十分接近的。

以分类数字的 LeNet-5 为例,这个 CNN 含有三种类型的神经网络层:

2.1_.jpg


卷积层:学会识别输入数据的特性表征

池化(Pooling):典型的操作包括平均 pooling [12] 和最大化 pooling [13–15]

2.2_.jpg


全连接层:将卷积层和Pooling 层堆叠起来以后,就能够形成一层或多层全连接层,这样就能够实现高阶的推力能力。
 
 
完善 CNN
 
自从 2012 年 AlexNet 成功以后,研究人员设计了很多种完善 CNN 的方法。在这一节中,我们将从 6 方面进行介绍。


1. 卷积层

1)网络中的网络(Network in Network,NIN):由 Lin et al. [21] 提出的基本网络结构

2.3_.jpg


2) Inception module: 由 Szegedy et al. [9] 提出,是 NIN 的拓展


2. 池化层

池化层是CNN的重要组成部分,通过减少卷积层之间的连接,降低运算复杂程度。以下是常用的几种循环方法:

1)Lp 池化:Lp 池化是建立在复杂细胞运行机制的基础上,受生物启发而来 [24] [25]

2) 混合池化:受随机Dropout [16] 和 DropConnect [28], Yu et al. 启发而来

3)随机池化:随机循环 [30] 是受 drptout 启发而来的方法

4)Spectral 池化


3. 激活函数

常用的非线性激活函数有sigmoid、tanh、relu等等,前两者sigmoid/tanh比较常见于全链接层,后者relu常见于卷积层。

1) ReLU

2) Leaky ReLU

3) Parametric ReLU

4) Randomized ReLU

5) ELU

6) Maxout:

7) Probout


4. Loss 函数

1) Softmax loss

2) Hinge loss

3) Contrastive loss


5. 正则化

2.4_.jpg


1)DropOut

2) DropConnect


6. 优化

1) 初始化权重

2) 随机梯度下降

3) 批量标准化

4) Shortcut 连接
 
 
CNN 应用
 
A 图像分类

B 物体检测

C 物体追踪

D 姿态预估(Pose estimatation)

E 文本检测识别

F 视觉 saliency 检测

G 行动识别

H 场景标记
 
 
讨论
 
深度CNN在图像处理、视频、语音和文本中取得了突破。本文种,我们主要从计算机视觉的角度对最近CNN取得的进展进行了深度的研究。我们讨论了CNN在不同方面取得的进步:比如,层的设计,活跃函数、损失函数、正则化、优化和快速计算。除了从CNN的各个方面回顾其进展,我们还介绍了CNN在计算机视觉任务上的应用,其中包括图像分类、物体检测、物体追踪、姿态估计、文本检测、视觉显著检测、动作识别和场景标签。

虽然在实验的测量中,CNN获得了巨大的成功,但是,仍然还有很多工作值得进一步研究。首先,鉴于最近的CNN变得越来越深,它们也需要大规模的数据库和巨大的计算能力,来展开训练。人为搜集标签数据库要求大量的人力劳动。所以,大家都渴望能开发出无监督式的CNN学习方式。

同时,为了加速训练进程,虽然已经有一些异步的SGD算法,证明了使用CPU和GPU集群可以在这方面获得成功,但是,开放高效可扩展的训练算法依然是有价值的。在训练的时间中,这些深度模型都是对内存有高的要求,并且消耗时间的,这使得它们无法在手机平台上部署。如何在不减少准确度的情况下,降低复杂性并获得快速执行的模型,这是重要的研究方向。

其次,我们发现,CNN运用于新任务的一个主要障碍是:如何选择合适的超参数?比如学习率、卷积过滤的核大小、层数等等,这需要大量的技术和经验。这些超参数存在内部依赖,这会让调整变得很昂贵。最近的研究显示,在学习式深度CNN架构的选择技巧上,存在巨大的提升空间。

最后,关于CNN,依然缺乏统一的理论。目前的CNN模型运作模式依然是黑箱。我们甚至都不知道它是如何工作的,工作原理是什么。当下,值得把更多的精力投入到研究CNN的基本规则上去。同时,正如早期的CNN发展是受到了生物视觉感知机制的启发,深度CNN和计算机神经科学二者需要进一步的深入研究。

有一些开放的问题,比如,生物学上大脑中的学习方式如何帮助人们设计更加高效的深度模型?带权重分享的回归计算方式是否可以计算人类的视觉皮质等等。

我们希望这篇文章不仅能让人们更好地理解CNN,同时也能促进CNN领域中未来的研究活动和应用发展。0文章导航← 【每日学习】Python在人工智能中的作用
 
 
 
 
  • 文章来源于 未来科技学院
  • 智造家平台提供