zoukankan      html  css  js  c++  java
  • (论文阅读)2015.10.8图像识别中的深度学习

      王晓刚老师发表在CCF通讯的文章,是一篇介绍深度学习在图像识别以及计算机视觉中应用的文章,通过该文章可以建立起深度学习在计算机视觉以及图像识别上一些基本概念,了解图像识别领域最新的一些研究进展和方向。

     

    神经网络算法的提出和发展:

      神经网络算法在很早之前就已经提出,但是必须认识到的是神经网络存在大量参数, 经常发生过拟合问题, 虽然其识别结果在训练集上准确率很高, 但在测试集上效果却很差。

           2010年,Hinton在science上发表深度学习文章之后,带来了一波深度学习热潮。主要有以下三个原因:

    1. 大规模训练数据的产生,在很大程度上缓和了深度网络的过拟合问题;
    2. 计算机硬件的大速发展以及计算机计算资源的提升,如GPU及大规模计算集群;
    3. 神经网络新的、有效的模型设计和训练方法,学者提出的非监督和逐层训练方法,使得在利用反向传播算法对网络进行全局优化之前, 网络参数能达到一个好的起始点, 从而在训练完成时能达到一个较好的局部极小点;

     

    深度学习与传统学习方法的对比:

      在之前的浅层学习模型中,如:支持向量机、 Boosting、 最近邻等分类器可以用具有一个或两个隐含层的神经网络模拟, 因此被称为浅层机器学习模型。 在这种模型中, 往往是针对不同的任务设计不同的系统, 并采用不同的手工设计的特征。而深度学习与传统模式识别方法的最大不同在于它所采用的特征是从大数据中自动学习得到,而非采用手工设计。

      而且手工设计主要依靠设计者的先验知识, 很难利用大数据的优势。(深度学习应用过程中,也需要应用到一些先验知识。但是这些先验知识一般应用于深度网络模型的设计以及网络层结构的构建,建立好深度学习模型之后会自动的从大数据中学习到特征。因此,虽然深度学习和传统学习方法都需要先验知识,但是这些先验知识的应用方法完全不同,而深度学习算法学习到的特征具有更强的鲁棒性和泛化能力)

      一个模式识别系统包括特征和分类器两部分。 在传统方法中,特征和分类器的优化是分开的。而在神经网络的框架下, 特征表示和分类器是联合优化的, 可以最大程度地发挥二者联合协作的性能。而深度学习的关键就是通过多层非线性映射将这些复杂的描述因素成功分开。例如在深度模型的最后一个隐含层, 不同神经元代表了不同因素。

    为什么需要深度神经网络?

      三层神经网络模型(包括输入层、 输出层和一个隐含层) 可以近似任何分类函数。但是为什么需要深度网络呢?

      研究表明, 针对特定的任务,如果模型的深度不够, 其所需要的计算单元会呈指数增加。 这意味着虽然浅层模型可以表达相同的分类函数, 但其需要的参数和训练样本要多得多。 浅层模型提供的是局部表达。它将高维图像空间分成若干个局部区域, 每个局部区域至少存储一个从训练数据中获得的模板, 浅层模型将一个测试样本和这些模板逐一匹配, 根据匹配的结果预测其类别。

      深度模型之所以能减少参数的关键在于重复利用中间层的计算单元。以人脸识别为例, 深度学习可以针对人脸图像的分层特征表达进行 : 最底层从原始像素开始学习滤波器, 刻画局部的边缘和纹理特征 ; 中层滤波器通过将各种边缘滤波器进行组合, 描
    述不同类型的人脸器官 ; 最高层描述的是整个人脸的全局特征。深度学习提供的是分布式的特征表示。 在最高的隐含层, 每个神经元代表一个属性分类器(如图 1(b) 所示), 例如性别、 人种和头发颜色等。 每个神经元将图像空间一分为二, N 个神经元
    的组合就可以表达 2N 个局部区域, 而用浅层模型表达这些区域的划分至少需要 2N 个模板。 由此可以看出, 深度模型的表达能力更强, 效率更高。

    深度学习在图像分类中的应用

      与传统的卷积网络相比, 它有三点与众不同之处 :

      首先, AlexNet 采用了 dropout 的训练策略,在训练过程中将输入层和中间层的一些神经元随机置零。 这模拟了噪音对输入数据的各种干扰使一些神经元对一些视觉模式产生漏检的情况。Dropout 使训练过程收敛得更慢, 但得到的网络模型更加鲁棒。

      其次, Alex Net 采用整流线型单元(ReLu)作为非线性的激发函数。 这不仅大大降低了计算的复杂度, 而且使神经元的输出具有稀疏的特征, 对各种干扰更加鲁棒。

      第三, Alex Net 通过对训练样本镜像映射和加入随机平移扰动, 产生了更多的训练样本,减少了过拟合。

      

      而在GooLenet中,使用了超过20层的神经网络,在网络的使用过程中,很深的网络结构给预测误差的反向传播带了困难, 这是因为预测误差是从最顶层传到底层的, 传到底层的误差很小, 难以驱动底层参数的更新。GooLeNet 采取的策略是将监督信号直接加到多个中间层, 这意味着中间层和底层的特征表示也要能够对训练数据进行准确分类。(这一块需要具体参见论文之后才能完全明白)

    针对数据量较小的数据集时,使用深度学习有三种方法可供参考 :

      (1) 可以将 ImageNet 上训练得到的模型作为起点, 利用目标训练集和反向传播对其进行继续训练, 将模型适应到特定的应用 。 此时 ImageNet 起到预训练的作用。

      (2) 如果目标训练集不够大 , 可以将底层的网络参数固定, 沿用ImageNet 上的训练集结果, 只对上层进行更新。 这是因为底层的网络参数是最难更新的, 而从ImageNet 学习得到的底层滤波器往往描述了各种不同的局部边缘和纹理信息, 而这些滤波器对一般的图像有较好的普适性。

      (3)直接采用 ImageNet 上训练得到的模型, 把最高的隐含层的输出作为特征表达, 代替常用的手工设计的特征(feature replacement)

    深度学习在视频分析上的应用以及发展:

      在将深度学习算法应用于视频分析过程中时,可以使用ImageNet学习获得的特征,但是由于视频的特殊性,其空间和时间维度上的差异,使得视频动态特征描述困难增加。在图像和视频应用中,深度模型的输出预测往往具有空间和时间上的相关性,因此在深度学习研究过程中,网络的结构化输出也是深度学习的一个研究重点。

      在视频分析中,将具体的研究内容同深度学习方法结合起来也是深度学习的一个研究重点。比如在图像处理应用最广泛的CNN(convolutional neural network)就是根据图像和视频分析中的特点和操作提出的新的网络结构和处理层。因此,如何结合应用自身特点,提出新的网络结构和层级结构也是深度学习的一个方向。

      2010年Alex提出AlexNet时,包含了5个卷积层和2个全连接层,到现在的GooLeNet已经有20,随着网络层数的增加,网络结构的复杂,通过反向传播算法来对深度网络的训练将越来越困难。因此,需要研究新的有效的网络训练和学习算法用以适应深度网络的需求。在将深度学习应用于具体应用时,深度学习算法并不是一个黑盒子。它与传统的计算机视觉系统有着密切的联系,神经网络通过联合学习、整体优化使得网络的性能大幅度的提升。与图像分析的各种应用的结合,推动了深度学习算法在网络的结构,层的设计以及训练方法上的研究。

      虽然深度学习在很多图像和视频分析应用中取得良好的效果,但是支撑其的背后理论并没有得到很好的解释。比如深度学习算法训练过程中何时取得最小值,何时进行收敛,在训练过程中丢失了那些信息,而学习到了那些有用的特征和信息,这些都无从所知。因此,如何对深度学习的结构和训练方法以及过程中的特征和信息进行量化分析也是深度学习应用中的一个研究热点。

  • 相关阅读:
    ASP.NET简单登录注册实例
    ViewState 视图状态对象实例
    重定向redirect与跳转forward区别
    request请求对象实例
    Page_Load 事件
    JQuery增删改查
    winfrom增删改查
    SQLHelper类
    html弹出div弹窗
    react diff算法
  • 原文地址:https://www.cnblogs.com/empty16/p/4863545.html
Copyright © 2011-2022 走看看