【新智元导读】深度学习很火,说起深度学习中一个很重要的概念——卷积神经网络(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 含有三种类型的神经网络层:

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

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

  全连接层:将卷积层和Pooling 层堆叠起来以后,就能够形成一层或多层全连接层,这样就能够实现高阶的推力能力。  

完善 CNN  

自从 2012 年 AlexNet 成功以后,研究人员设计了很多种完善 CNN 的方法。在这一节中,我们将从 6 方面进行介绍。   

1. 卷积层   

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

  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. 正则化

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领域中未来的研究活动和应用发展

了解CNN这一篇就够了:卷积神经网络技术及发展相关推荐

  1. CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别

    CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别 目录 基于tensorflow框架采用CNN(改进的AlexNet, ...

  2. Pytorch之CNN:基于Pytorch框架实现经典卷积神经网络的算法(LeNet、AlexNet、VGG、NIN、GoogleNet、ResNet)——从代码认知CNN经典架构

    Pytorch之CNN:基于Pytorch框架实现经典卷积神经网络的算法(LeNet.AlexNet.VGG.NIN.GoogleNet.ResNet)--从代码认知CNN经典架构 目录 CNN经典算 ...

  3. 卷积神经网络(CNN)开山之作——LeNet-5。卷积神经网络基本介绍。

    目录 一.LeNet-5的背景 二.传统分类算法在图像识别上的弊端 三.卷积神经网络的3个基本特征 四.LeNet-5的网络结构 1.Input layer 2.Conv1 3.Subsampling ...

  4. 了解CNN这一篇就够了——关于卷积神经网络的介绍

    https://www.toutiao.com/a6695023125253325320/ 关于CNN, 第1部分:卷积神经网络的介绍 CNN是什么?:它们如何工作,以及如何在Python中从头开始构 ...

  5. [深度学习-实战篇]情感分析之卷积神经网络-TextCNN,包含代码

    0. 前言 在"卷积神经网络"中我们探究了如何使用二维卷积神经网络来处理二维图像数据.在之前的语言模型和文本分类任务中,我们将文本数据看作是只有一个维度的时间序列,并很自然地使用循 ...

  6. cnn风格迁移_机器学习:利用卷积神经网络实现图像风格迁移 (一)

    相信很多人都对之前大名鼎鼎的 Prisma 早有耳闻,Prisma 能够将一张普通的图像转换成各种艺术风格的图像,今天,我们将要介绍一下Prisma 这款软件背后的算法原理.就是发表于 2016 CV ...

  7. 【Pytorch神经网络理论篇】 13 深层卷积神经网络介绍+池化操作+深层卷积神经网络实战

    1 深层卷积神经网络概述 1.1 深层卷积神经网络模型结构图 1.1.1 深层卷积神经网络的正向结构构成剖析 输入层,将每个像素作为一个特征节点输入网络. 卷积层:由多个滤波器组合而成. 池化层:将卷 ...

  8. 菜菜学paddle第六篇:利用LeNet卷积神经网络识别手写数字

    前言 LeNet是最早的卷积神经网络之一.1998年,Yann LeCun第一次将LeNet卷积神经网络应用到图像分类上,它通过连续使用卷积和池化层的组合提取图像特征,在手写数字识别任务中取得了巨大成 ...

  9. 【CNN分类】基于贝叶斯优化卷积神经网络BO-CNN实现故障诊断附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

最新文章

  1. 零基础学Python(第十九章 File操作·IO流补充章节)
  2. FineUI 选中多行获取行ID
  3. 《C和指针》读书笔记
  4. 如何快速上手 angular.js
  5. python matplotlib 柱状图点击事件_Python:matplotlib分组Bar柱状图
  6. 如何用命令行写java程序_如何用java实现doc命令行
  7. 个人网站的搭建(基于GitHub和Jekyll主题 )
  8. 软件工程项目之Windows Phone Application的一个设想
  9. VC++调试错误的解决方案
  10. 什么是matlab拟合工具箱,Matlab拟合工具箱的使用
  11. 数据结构——栈(链栈)
  12. 网站打不开的原因及解决办法
  13. android 拼音字母语音,拼音发音点读app
  14. 3、Maven核心程序解压与配置
  15. qualified-id in declaration before ‘(’ token
  16. Linux和Windows命令行中使用命令的输出(删除几天前的日志)
  17. 常见的网络安全攻击及防御技术概述
  18. FFT算法再学以及终于理解
  19. 阿里云服务器安装emqx和thingsboard
  20. c语言blue的大写字母,26个大写字母正确读法

热门文章

  1. 钉钉一键登录第三方网站
  2. 大模型的三大法宝:Finetune, Prompt Engineering, Reward
  3. 米思奇blynk_米思奇编程积木套件入门教程 项目一:点亮板载LED灯
  4. 获取mongodb数据变更_MongoDB Stream是如何实现完美数据增量迁移的?
  5. 应用单源最短路径算法解决套利交易问题
  6. 入职微软一月后的感悟,谈谈面试经历及入职体验
  7. 自然语言处理(NLP)——词向量
  8. 09、环境-配置docker阿里云镜像加速、通过阿里云控制台找到镜像加速器
  9. 视频教程-React.js框架技术-Java
  10. CSS对边框添加立体阴影效果