卷积神经网络 (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. 常用mac/unix/linux命令

    1.查询ip地址 ifconfig 2.查找服务器上应用程序的端口分配 grep telnet /etc/services (telnet) telnet使用TCP/UDP端口号23 grep dom ...

  2. Git如何修改一个过去的Commit

    假设我的git log 如下: commit 5511533dda6fee6982175fafca1f4bd5692e3d9c (HEAD -> trans, origin/trans) Aut ...

  3. docker幕布笔记

    幕布链接>>>>https://mubu.com/doc/l_KDT3S5w0

  4. Redis使用守护进程启动sentinel并指定其日志目录

    正常redis-server可以通过配置文件来指定守护进程启动以及指定日志路径,但sentinel就不一样了.正常启动redis的sentinel时,进程会直接在前台跑,一退出sentinel进程就关 ...

  5. mysql dump 完全备

    创建表: MariaDB [xuegod]> create database xuegod; MariaDB [xuegod]> use xuegod; MariaDB [xuegod]& ...

  6. hdu 2222 Keywords Search 模板题

    Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  7. LVS负载均衡基本原理

    负载均衡基本原理与lvs 基本介绍 1.1 负载均衡的由来 在业务初期,我们一般会先使用单台服务器对外提供服务.随着业务流量越来越大,单台服务器无论如何优化,无论采用多好的硬件,总会有性能天花板,当单 ...

  8. firewalld学习-zone的使用和配置

    原文地址:http://www.excelib.com/article/290/show zone文件标签名词解释 target:目标,这个前面学生也已经给大家介绍过了,可以理解为默认行为,有四个可选 ...

  9. POJ 3268:Silver Cow Party 求单点的来回最短路径

    Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15989   Accepted: 7303 ...

  10. python 数据处理 对csv文件进行数据处理

    数据如下图: 用python对数据进行处理: #读取csv文件内容并进行数据处理 import os import csv import datetime import re from itertoo ...