卷积神经网络 (Convolutional Neural Networks,简称CNN),是一种经典的神经网络算法。由于在图像识别领域取得的良好效果,随着人工智能的火热,它也受到越来越多的关注。CNN的核心概念卷积、池化听起来好像很神秘,了解之后会发现其实也并不复杂。本文试图用通俗的语言,简明扼要地介绍这些关键的概念,给读者带来一个直观的理解。作者在文章最后给出了一些参考资料,以便读者进一步参考。

一、为什么要提出CNN?

我们知道CNN是一种基于神经网络的算法。而传统的神经网络,多层感知机(MLP),在图像识别领域的效果并不好。原因也很容易理解:按照传统网络的观点,要处理图像,需要将图片按行展开,每一个像素就是一个输入。可想而知,参数数量会多么巨大,而这又会带来更多问题:需要庞大的数据集、漫长的训练时间不说,还容易带来让人头疼的过拟合问题。

以手写体识别为例,一个图像经过平移、旋转、缩放等变换会呈现出不同的姿态。人类很容易应对这种变换,但是对于传统的神经网络来说,其泛化能力就不足以处理这些变换了。

还有一个问题,图像本身带有拓扑结构——典型的二维结构。而传统的全连接网络不能有效利用这种结构。在进入神经网络之前,这些重要的结构信息就已经被破坏掉了。为了解决上面提到的各种问题,LeCun在1998年提出了LeNet,从此CNN应运而生。

二、什么是卷积?

首先来看看“卷积”这个关键概念。首先需要明确的是,卷积不是在CNN中被提出的,而是一种有着广泛应用的数学运算,有明确的数学定义和物理意义。在图像处理领域常常使用卷积操作,很多图像处理操作比如模糊、锐化等都可以通过卷积来实现。

下面来看看CNN中卷积运算是怎么进行的:对于给定的一幅图像来说,给定一个卷积核,卷积操作就是根据卷积窗口进行加权求和。卷积窗口在整个图片上滑动,在每一个位置输出一个数值,最终仍然输出一个矩阵。如下图所示:

在图像处理中,卷积核是已知的。而在CNN的卷积层,卷积核的参数也是需要训练的。在LeCun的论文中,他使用局部感受野的概念来解释其原理。考虑到人类在感知目标时总是从局部到总体、从片面到全面的,这样就从神经科学的角度解释了卷积层的原理。本文从另一个角度解释,卷积可以视为图像处理的操作,但是图像变换的参数是未知的,需要从数据集中学习得到。这正是机器学习方法擅长的套路。

希望上面的解释能使读者对卷积产生一个直观的认识。实际上CNN中的卷积和数学上的卷积并不完全一致,如果想要进一步理解卷积的概念和应用,可以参阅下面给出的参考资料。

  • http://setosa.io/ev/image-kernels/,以交互的方式理解图像处理中的卷积
  • https://www.zhihu.com/question/22298352/answer/228543288,对卷积运算的通俗理解
  • https://blog.csdn.net/lz0499/article/details/70195284,从数字信号处理角度理解卷积,包括在图像领域中的应用

三、什么是池化?

LeNet5中第一个隐藏层是卷积层,第二个隐藏层就是池化层。池化,实际上也没有听上去那么神秘,其实就是图片下采样 (sub-sampling)。具体来说就是对图片的每个子区域进行聚合统计,例如最大值、平均值等。得到的效果是相邻的几个像素合并成一个像素。下面举一个例子 (2, 2) 最大池化的例子。

假设原图是一张4 * 4的图片,(2, 2) 池化就是对相邻的4个像素,取最大值作为下采样后的像素值。计算过程如下所示:

经过此次下采样,我们得到处理后的图片为:

池化的方法还有很多,比如可以使用不同的聚合函数,还有重叠采样的池化等。那么在神经网络中加入池化层有什么作用呢?首先,很明显地,经过池化后像素点的个数大大减少了,训练参数的数量也随之下降。在计算能力足够的情况下是不是就不需要池化了呢?也不是的,池化的过程省略掉了图片的一些细节,这样有利于避免过拟合,增加模型的泛化性能。

四、全连接层

在经过若干次卷积和池化之后,特征图被送到全连接层进行分类。全连接层的功能相当于经典的前向全连接网络,因此作为分类器是非常自然的。回过头来看CNN的整体架构,可以把卷积和池化的步骤看做是特征提取的过程,把最后的全连接层看做一个分类器。这就回归到机器学习的经典套路了,理解这种结构也比较自然了。

五、总结

本文简要介绍了CNN中的几个关键性的概念,力图清晰,不求全面。最后,作者也是刚刚接触深度学习不久,如有谬误之处,还请批评指正。

参考资料

  • 《Gradient-Based Learning Applied to Document Recognition》,LeCun经典之作
  • https://blog.csdn.net/hjimce/article/details/47323463,包含了理论和实战部分
  • https://my.oschina.net/u/876354/blog/1620906,给出了很不错的例子
  • https://blog.csdn.net/qianqing13579/article/details/71076261:翻译了LeNet论文部分篇章

CNN核心概念理解的更多相关文章

  1. Spark核心概念理解

    本文主要内容来自于<Hadoop权威指南>英文版中的Spark章节,能够说是个人的翻译版本号,涵盖了基本的Spark概念.假设想获得更好地阅读体验,能够訪问这里. 安装Spark 首先从s ...

  2. Kubenetes 核心概念理解

    Kubernetes 是一个具有自动控制 .自动纠错功能的资源管理系统 可以把 Node , Pod , Replication Controller , Service 等都看做是一种 " ...

  3. 领域驱动设计(DDD)部分核心概念的个人理解

    领域驱动设计(DDD)是一种基于模型驱动的软件设计方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践 ...

  4. 领域驱动设计(DDD)部分核心概念的个人理解(转)

    领域驱动设计(DDD)是一种基于模型驱动的软件设计方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践 ...

  5. 理解maven的核心概念

    原文出处:http://www.cnblogs.com/holbrook/archive/2012/12/24/2830519.html 好久没进行java方面的开发了,最近又完成了一个java相关的 ...

  6. 大数据核心知识点:Hbase、Spark、Hive、MapReduce概念理解,特点及机制

    今天,上海尚学堂大数据培训班毕业的一位学生去参加易普软件公司面试,应聘的职位是大数据开发.面试官问了他10个问题,主要集中在Hbase.Spark.Hive和MapReduce上,基础概念.特点.应用 ...

  7. 十分钟带你理解Kubernetes核心概念

    什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成K ...

  8. Maven(三)理解Maven核心概念

    转载自: http://www.cnblogs.com/holbrook/archive/2012/12/24/2830519.html 本文以类图的方式,介绍maven核心的12个概念以及相互之间的 ...

  9. DDD战略设计相关核心概念的理解

    前言 本文想再讨论一下关于领域.业务.业务模型.解决方案.BC.领域模型.微服务这些概念的含义和关系.初衷是我发现现在DDD领域建模以及解决方案落地过程中,常常对这些概念理解不清楚或者有歧义,导致我们 ...

随机推荐

  1. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:禁用状态

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. NO26 Linux的文件权限--chmod--Linux删除文件说明--suid--sgid

    chmod命令改权限:  suid: sgid:

  3. Java 实现 POS 打印机无驱打印

    来源:https://www.ibm.com/developerworks/cn/java/j-lo-pos/index.html 行业需求 我们是一家专业做酒店餐饮软件的公司,餐饮软件一个重要的功能 ...

  4. P1069 微博转发抽奖

    P1069 微博转发抽奖 转跳点:

  5. LoNg wAy tO Go

    觉得一个电子工程师/硬件工程师应该有下面的能力: 1.模拟/数字电路的分析和设计.教科书上讲的都应该会,包括分离元件和运放的信号放大,滤波,波形产生,稳压电源,逻辑化简,基本触发器,基本计数器.寄存器 ...

  6. 我的第一个爬虫【python selenium】

    去年写的一个小功能,一年过得好快,好快! 目的:爬取京东商品详情页面的内容(商品名称.价格.评价数量)后存储到xls文档中,方便商家分析自己商品的动态. 软件:chrome(windows).chro ...

  7. 实训30 延时中断组织块0B20仿真

    实训30 延时中断组织块的仿真试验   问题1 系统功能块SFC中提供了一些查询中断状态字的指令,举例说明 例如 SF34 "QRY_DINT" 用来查询 "延时中断&q ...

  8. leetcode(数据结构)—— 镜像二叉树

    镜像二叉树,力扣上面的的题目,这道题很简单,放出来的原因是它要求用两种解法来写这道题——递归和迭代,而且数据结构学到了树,记录自己学习的过程,以免忘了,没地方找. 题目的意图很明显,就是然你写个程序看 ...

  9. UVALive - 7752 Free Figurines

    题意:有n个娃娃,如果大娃娃j直接套小娃娃i,则fa[i] = j.若fa[i] = 0,则该娃娃自由.给出每个娃娃初始的父亲,和改变后的父亲,在满足以下合法操作的条件下,问最少需要多少次变换. 1. ...

  10. 51nod 1055:最长等差数列

    1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题  收藏  取消关注 N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 ...