当前位置:
首页
文章
后端
详情

卷积神经网络模型发展及应用

卷积神经网络模型发展及应用 转载地址:

http://fcst.ceaj.org/CN/abstract/abstract2521.shtml

卷积神经网络模型发展及应用

深度学习是机器学习和人工智能研究的最新趋势,作为一个十余年来快速发展的崭新领域,越来越受到研究者的关注。卷积神经网络(CNN)模型是深度学习模型中最重要的一种经典结构,其性能在近年来深度学习任务上逐步提高。由于可以自动学习样本数据的特征表示,卷积神经网络已经广泛应用于图像分类、目标检测、语义分割以及自然语言处理等领域。首先分析了典型卷积神经网络模型为提高其性能增加网络深度以及宽度的模型结构,分析了采用注意力机制进一步提升模型性能的网络结构,然后归纳分析了目前的特殊模型结构,最后总结并讨论了卷积神经网络在相关领域的应用,并对未来的研究方向进行展望。

卷积神经网络(convolutional neural network,CNN) 在计算机视觉[1- 5]、自然语言处理[6- 7]等领域已被广泛 应用。在卷积神经网络兴起之前,主要依靠人工针对特定的问题设计算法,比如采用 Sobel、LoG(Laplacian of Gaussian)、Canny、Prewitt 等[8- 11]算子进行边 缘 检 测 ,采 用 Harris、DoG(difference of Gaussian)、FAST(features from accelerated segment test)、SIFT (scale invariant feature transform)等[12-15]用于角点等特 征检测,并且采用传统分类器如 K近域、支持向量机、 稀疏分类器等[16- 18]进行分类。特征提取和分类器的 设计是图片分类等任务的关键,对分类结果的好坏 有着最为直接的影响。卷积神经网络可以自动地从 训练样本中学习特征并且分类,解决了人工特征设计 的局限性。神经网络的思想起源于1943年McCulloch 和 Pitts 提出的神经元模型[19],简称 MCP 神经元模 型。它是利用计算机来模拟人的神经元反应的过 程,具有开创性意义。此模型将神经元反应简化为 三个过程:输入信号线性加权、求和、非线性激活。1958 年到 1969 年为神经网络模型发展的第一阶段, 称为第一代神经网络模型。在 1958 年 Rosenblatt 第 一次在 MCP 模型上增加学习功能并应用于机器学 习,发明了感知器算法[20],该算法使用 MCP 模型能够 采用梯度下降法从训练样本中自动学习并更新权 值,并能对输入的多维数据进行二分类,其理论与实 践的效果引起了神经网络研究的第一次浪潮。1969 年美国数学家及人工智能先驱 Minsky在其著作中证 明感知器本质上是一种线性模型[21],只能处理线性分 类问题,最简单的异或问题都无法正确分类,因此神 经网络的研究也陷入了近二十年的停滞。1986 年到 1988 年是神经网络模型发展的第二阶段,称为第二 代神经网络模型。1986 年 Rumelhart 等人提出了误 差反向传播算法(back propagation algorithm,BP)[22]。

BP 算法采用 Sigmoid 进行非线性映射,有效解决了 非线性分类和学习的问题,掀起了神经网络第二次 研究高潮。BP 网络是迄今为止最常用的神经网络, 目前大多神经网络模型都是采用 BP网络或者其变化 形式。早期神经网络缺少严格数学理论的支撑,并 且在此后的近十年时间,由于其容易过拟合以及训 练速度慢,并且在 1991 年反向传播算法被指出在后 向传播的过程中存在梯度消失的问题[23],神经网络再 次慢慢淡出人们的视线。

1998 年 LeCun 发明了 LeNet-5,并在 Mnist 数据 集达到 98%以上的识别准确率,形成影响深远的卷积 神经网络结构,但此时神经网络的发展正处于下坡 时期,没有引起足够的重视。从感知机提出到 2006 年以前,此阶段称为浅层 学习,2006 年至今是神经网络的第三阶段,称为深度 学习。深度学习分为快速发展期(2006—2012 年)和 爆发期(2012 年至今),2006 年 Hinton 提出无监督的 “逐层初始化”策略以降低训练难度,并提出具有多 隐层的深度信念网络(deep belief network,DBN)[24], 从此拉开了深度学习大幕。

随着深度学习理论的研究和发展,研究人员提 出了一系列卷积神经网络模型。为了比较不同模型 的质量,收集并整理了文献中模型在分类任务上的 识别率,如图 1所示。由于部分模型并未在 ImageNet 数据集测试识别率,给出了其在 Cifar-100 或 Mnist数 据集上的识别率。其中,Top-1识别率指的是 CNN 模型预测出最大概率的分类为正确类别的概率。Top-5 识别率指的是 CNN 模型预测出最大概率的前 5 个分 类里有正确类别的概率。

2012 年,由 Alex Krizhevshy 提出的 AlexNet给卷 积神经网络迎来了历史性的突破。AlexNet 在百万 量级的 ImageNet数据集上对于图像分类的精度大幅 度超过传统方法,一举摘下了视觉领域竞赛 ILSVRC2012的桂冠。自 AlexNet之后,研究者从卷积神经网 络的结构出发进行创新,主要有简单的堆叠结构模 型,比如 ZFNet、VGGNet、MSRNet。堆叠结构模型通 过改进卷积神经的基本单元并将其堆叠以增加网络 的深度提升模型性能,但仅在深度这单一维度提升 模 型 性 能 具 有 瓶 颈 ;后 来 在 NIN(network in network)模型提出使用多个分支进行计算的网中网结 构模型,使宽度和深度都可增加,具有代表性的模型 有 Inception 系列模型等;随着模型深度以及宽度的 增加,网络模型出现参数量过多、过拟合以及难以训 练等诸多问题。ResNet 提出残差结构后,为更深层 网络构建提出解决方案,随即涌现出很多残差结构模 型,比如基于 ResNet 改进后的 ResNeXt、DenseNet、 PolyNet、WideResNet,并且 Inception也引入残差结构 形成了 Inception-ResNet-block,以及基于残差结构并 改进其特征通道数量增加方式的 DPResNet;与之前 在空间维度上提升模型性能的方法相比,注意力机 制模型通过通道注意力和空间注意力机制可以根据 特征通道重要程度进一步提升模型性能,典型的模 型为 SENet、SKNet 以及 CBAM(convolutional block attention module)。

传统的卷积神经网络模型性能十分优秀,已经 应用到各个领域,具有举足轻重的地位。由于卷积 神经网络的模型十分丰富,有些模型的结构或用途 比较特殊,在本文中统称为特殊模型,包括具有简单的结构和很少参数量的挤压网络模型 SqueezeNet,采 用无监督学习的生成对抗网络模型(generative adversarial network,GAN),其具有完全相同的两路网络 结构以及权值的孪生神经网络模型 SiameseNet,以 及通过线性运算生成其他冗余特征图的幽灵网络 GhostNet。由于卷积神经网络的一系列突破性研究成果, 并根据不同的任务需求不断改进,使其在目标检测、 语义分割、自然语言处理等不同的任务中均获得了 成功的应用。

基于以上认识,本文首先概括性地介绍了卷积 神经网络的发展历史,然后分析了典型的卷积神经 网络模型通过堆叠结构、网中网结构、残差结构以及 注意力机制提升模型性能的方法,并进一步介绍了 特殊的卷积神经网络模型及其结构,最后讨论了卷 积神经网络在目标检测、语义分割以及自然语言处 理领域的典型应用,并对当前深度卷积神经网络存 在的问题以及未来发展方向进行探讨。

卷积神经网络模型发展及应用

转载文章,如有侵权,请联系我删除

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。

同类热门文章

深入了解C++中的new操作符:使用具体实例学习

C++中的new操作符是动态分配内存的主要手段之一。在程序运行时,我们可能需要动态地创建和销毁对象,而new就是为此提供了便利。但是,使用new也常常会引发一些问题,如内存泄漏、空指针等等。因此,本文将通过具体的示例,深入介绍C++中的new操作符,帮助读者更好地掌握其使用。


深入了解C++中的new操作符:使用具体实例学习

怎么用Java反射获取包下所有类? 详细代码实例操作

Java的反射机制就是在运行状态下,对于任何一个类,它能知道这个类的所有属性和方法;对于任何一个对象,都能调用这个对象的任意一个方法。本篇文章将通过具体的代码示例,展示如何通过Java反射来获取包下的所有类。


怎么用Java反射获取包下所有类? 详细代码实例操作

员工线上学习考试系统

有点播,直播,在线支付,三级分销等功能,可以对学员学习情况的监督监控,有源码,可二次开发。支持外网和局域网私有化部署,经过测试源码完整可用!1、视频点播:视频播放,图文资料,课件下载,章节试学,限时免

员工线上学习考试系统

了解Java中的volati关键字的作用 以及具体使用方法

本篇文章将和大家分享一下Java当中的volatile关键字,下面将为各位小伙伴讲述volatile关键字的作用以及它的具体使用方法。


了解Java中的volati关键字的作用 以及具体使用方法

Java Map 所有的值转为String类型

可以使用 Java 8 中的 Map.replaceAll() 方法将所有的值转为 String 类型: 上面的代码会将 map 中所有的值都转为 String 类型。 HashMap 是 Java

Java Map 所有的值转为String类型