动图+独家思维导图!让你秒懂李宏毅2020深度学习(四)—— CNN(Convolutional Neural network)

系列文章传送门:

文章目录

  • 动图+独家思维导图!让你秒懂李宏毅2020深度学习(四)—— CNN(Convolutional Neural network)
  • CNN(Convolutional Neural Network)
    • Three Property for CNN theory base
    • 一张图搞定CNN(必看干货!)
    • 动图演示
    • What does CNN learn?
      • what does filter do
      • what does neuron do
      • what about output

CNN(Convolutional Neural Network)

前面我们介绍了Fully Connect Feedforward Network(全连接前馈⽹络),但是这种网络在运用到图像处理的时候,往往需要太多参数,因此进化出了CNN(Convolutional Neural network)来简化NN的架构,拿掉Fully Connected 的layer中的一些参数。

那怎么简化呢?这里提炼出CNN简化的三个property

Three Property for CNN theory base

  • Property1: Some patterns are much smaller than the whole image
  • Property2: The same patterns appear in different regions
  • Property3: Subsampling the pixels will not change the object

一张图搞定CNN(必看干货!)

博主花了许多心血将CNN的整个结构浓缩在这一张图中:

动图演示

由此可以看出CNN的本质就是就是减少参数的过程,如果对上面的某些过程还不了解,下面给出一些网络上博主认为比较好的动图供大家理解

1.卷积过程动图



2.卷积的计算

3.卷积对应于神经网络计算的动图

4.池化动图

What does CNN learn?

刚刚介绍了CNN的结构,接下来我们来分析下CNN的每一层到底学到了什么
以下图CNN为例:

先描述下图中所描述的过程:

  • 假设我们input是⼀个1×28×28的image
  • 通过25个filter的convolution layer以后你得到的output,会有25个channel,⼜因为filter的size是3×3,因此如果不考虑image边缘处的处理的话,得到的channel会是(28-2)×(28-2)的,因此通过第⼀个convolution得到25×26×26的cubic image(这⾥把这张image想象成⻓宽为26,⾼为25的cubic⽴⽅体)
  • 接下来就是做Max pooling,把2×2的pixel分为⼀组,然后从⾥⾯选⼀个最⼤的组成新的image,⼤⼩为25×13×13(cubic⻓宽各被砍掉⼀半)
  • 再做⼀次convolution,假设这次选择50个filter,每个filter size是25×3×3的话,output的channel就变成有50个,那13×13的image,通过3×3的filter,就会变成(13-2)×(13-2),因此通过第⼆个convolution得到50×11×11的image(得到⼀个新的⻓宽为11,⾼为50的cubic)
  • 再做⼀次Max Pooling,变成50×50×5

要分析第⼀个convolution的filter是⽐较容易的,因为第⼀个convolution layer⾥⾯,每⼀个filter就是
⼀个3×3的matrix,它对应到3×3范围内的9个pixel,所以你只要看这个filter的值,就可以知道它在detect什么东西,因此第⼀层的filter是很容易理解的。

但是你⽐较没有办法想像它在做什么事情的,是第⼆层的filter,它们是50个同样为3×3的filter,但是这些filter的input并不是pixel,⽽是做完convolution再做Max pooling的结果,因此filter考虑的范围并不是3×3=9个pixel,⽽是⼀个⻓宽为3×3,⾼为25的cubic(这里的高指channel),filter实际在image上看到的范围是远⼤于9个pixel的,所以你就算把它的weight拿出来,也不知道它在做什么。

what does filter do

来分析⼀个filter它做的事情:
我们把经过convolution layer中第k个filter卷积出来的matrix中的每一个element, 我们叫它 a i j k a_{ij}^{k} aijk​上标k表⽰这是第k个filter,下标ij表⽰它在这个matrix⾥的第i个row,第j个column接下来我们define⼀个 a k a^{k} ak叫做Degree of the activation of the k-th filter,这个值表⽰现在的第k个filter,它有多被activate,有多被“启动”,直观来讲就是描述现在input的东西跟第k个filter有多接近, 它对filter的激活程度有多少

第k个filter被启动的degree a k a^{k} ak就定义成,它与input进⾏卷积所输出的output⾥所有element的summation,以上图为例,就是这11×11的output matrix⾥所有元素之和,⽤公式描述如下:

即我们input⼀张image,然后把filter和image进⾏卷积所output的11×11个值全部加起来,当作现在这个filter被activate的程度

接下来我们要做的事情是这样⼦,我们想要知道第k个filter的作⽤是什么,那我们就要找⼀张image, 这张image可以让第k个filter被activate的程度最⼤;于是我们现在要解的问题是,找⼀个image x,它可以让我们定义的activation的degree a k a^{k} ak最⼤,即:

之前我们求minimize⽤的是gradient descent,那现在我们求Maximum⽤gradient ascent(梯度上升法)就可以做到这件事了

即把input x作为要找的参数,对它去⽤gradient ascent进⾏update,原来在train CNN的时候,input是固定的,model的参数是要⽤gradient descent去找出来的;但是现在这个⽴场是反过来的,在这个task⾥⾯model的参数是固定的,我们要⽤gradient ascent去update这个x,让它可以使degree of activation最⼤

上图就是得到的结果,50个filter理论上可以分别找50张image使对应的activation最⼤,这⾥仅挑选了其中的12张image作为展⽰,这些image有⼀个共同的特征,它们⾥⾯都是⼀些反复出现的某种texture(纹路),⽐如说第三张image上布满了⼩⼩的斜条纹,这意味着第三个filter的⼯作就是detect图上有没有斜条纹,要知道现在每个filter检测的都只是图上⼀个⼩⼩的范围⽽已,所以图中⼀旦出现⼀个⼩⼩的斜条纹,这个filter就会被activate,相应的output也会⽐较⼤,所以如果整张image上布满这种 斜条纹的话,这个时候它会最兴奋,filter的activation程度是最⼤的,相应的output值也会达到最⼤

因此每个filter的⼯作就是去detect某⼀种pattern,detect某⼀种线条,上图所⽰的filter所detect的就是不同⻆度的线条,所以今天input有不同线条的话,某⼀个filter会去找到让它兴奋度最⾼的匹配对象,这个时候它的output就是最⼤的

what does neuron do

我们做完convolution和max pooling之后,会将结果⽤Flatten展开,然后丢到Fully connected的neural network⾥⾯去,之前已经搞清楚了filter是做什么的,那我们也想要知道在这个neural network⾥的每⼀个neuron是做什么的,所以就对刚才的做法如法炮制

我们定义第j个neuron的output就是 ,接下来就⽤gradient ascent的⽅法去找⼀张image x,把它丢到neural network⾥⾯就可以让 的值被maximize,即:

找到的结果如上图所⽰,同理这⾥仅取出其中的9张image作为展⽰,你会发现这9张图跟之前filter所观察到的情形是很不⼀样的,刚才我们观察到的是类似纹路的东西,那是因为每个filter考虑的只是图上⼀部分的vision,所以它detect的是⼀种texture;但是在做完Flatten以后,每⼀个neuron不再是只看整 张图的⼀⼩部分,它现在的⼯作是看整张图,所以对每⼀个neuron来说,让它最兴奋的、activation最⼤的image,不再是texture,⽽是⼀个完整的图形

what about output

接下来我们考虑的是CNN的output,由于是⼿写数字识别的demo,因此这⾥的output就是10维,我们把某⼀维拿出来,然后同样去找⼀张image x,使这个维度的output值最⼤,即

你可以想象说,既然现在每⼀个output的每⼀个dimension就对应到⼀个数字,那如果我们去找⼀张image x,它可以让对应到数字1的那个output layer的neuron的output值最⼤,那这张image显然应该看起来会像是数字1,你甚⾄可以期待,搞不好⽤这个⽅法就可以让machine⾃动画出数字。
但实际上,我们得到的结果是这样⼦,如下图所⽰

上⾯的每⼀张图分别对应着数字0-8,你会发现,可以让数字1对应neuron的output值最⼤的image其 实⻓得⼀点也不像1,就像是电视机坏掉的样⼦,为了验证程序有没有bug,这⾥⼜做了⼀个实验,把上述得到的image真的作为testing data丢到CNN⾥⾯,结果classify的结果确实还是认为这些image就对应着数字0-8

所以今天这个neural network,它所学到的东西跟我们⼈类⼀般的想象认知是不⼀样的

那我们有没有办法,让上⾯这个图看起来更像数字呢?想法是这样的,我们知道⼀张图是不是⼀个数字,它会有⼀些基本的假设,⽐如这些image,你不知道它是什么数字,你也会认为它显然就不是⼀个digit,因为⼈类⼿写出来的东西就不是⻓这个样⼦的,所以我们要对这个x做⼀些regularization,我们要对找出来的x做⼀些constraint(限制约束),我们应该告诉machine说,虽然有⼀些x可以让你的y很⼤,但是它们不是数字

那我们应该加上什么样的constraint呢?最简单的想法是说,画图的时候,⽩⾊代表的是有墨⽔、有笔画的地⽅,⽽对于⼀个digit来说,整张image上涂⽩的区域是有限的,像上⾯这些整张图都是⽩⽩的, 它⼀定不会是数字

假设image⾥的每⼀个pixel都⽤ x i j {x_{ij}} xij​表⽰,我们把所有pixel值取绝对值并求和,这⼀项其实就是之前提到过的L1的regularization,再⽤ y i {y^i} yi减去这⼀项,得到

这次我们希望再找⼀个input x,它可以让 y i {y^i} yi最⼤的同时,也要让 ∣ x i j ∣ {|x_{ij}|} ∣xij​∣的summation越⼩越好,也就是说我们希望找出来的image,⼤部分的地⽅是没有涂颜⾊的,只有少数数字笔画在的地⽅才有颜⾊出现,加上这个constraint以后,得到的结果会像下图右侧所⽰⼀样,已经隐约有些可以看出来是数字的形状了

如果再加上⼀些额外的constraint,⽐如你希望相邻的pixel是同样的颜⾊等等,应该可以得到更好的结果

动图+独家思维导图!让你秒懂李宏毅2020深度学习(四)—— CNN(Convolutional Neural network)相关推荐

  1. 独家思维导图!让你秒懂李宏毅2020深度学习(五)—— Tips for Deep Leaning Why Deep?

    独家思维导图!让你秒懂李宏毅2020深度学习(五)-- Tips for Deep Leaning & Why Deep? 系列文章传送门: 独家思维导图!让你秒懂李宏毅2020机器学习(一) ...

  2. 独家思维导图!让你秒懂李宏毅2020深度学习(三)——深度学习基础(神经网络和反向传播部分)

    独家思维导图!让你秒懂李宏毅2020深度学习(三)--深度学习基础(神经网络和反向传播部分) 长文预警!!!前面两篇文章主要介绍了李宏毅视频中的机器学习部分,从这篇文章开始,我将介绍李宏毅视频中的深度 ...

  3. 独家思维导图!让你秒懂李宏毅2020机器学习(二)—— Classification分类

    独家思维导图!让你秒懂李宏毅2020机器学习(二)-- Classification分类 在上一篇文章我总结了李老师Introduction和regression的具体内容,即1-4课的内容,这篇我将 ...

  4. 独家思维导图!让你秒懂李宏毅2020机器学习(一)—— Regression回归

    独家思维导图!让你秒懂李宏毅2020机器学习(一)-- Regression回归 前言:博主为一名大二本科生,最近决心开始看李宏毅的深度学习系列课程,每学一个阶段决定写篇博客来归纳记录一下所学的东西, ...

  5. 为什么要学习思维导图?思维导图的作用

    常有人问,为什么要学习思维导图?思维导图有那么神奇吗?今天我来给大家分析一下思维导图到底有什么用. 一.为什么要学习思维导图 在生活中我们最常使用的一种能力就是思考,每当去计划一件事情或是去完成一件事 ...

  6. python变量命名规则思维导图_Python思维导图详解

    Python思维导图 Python思维导图详解 第一阶段:学习Python基础语法,主要学习变量的使用以及类型.变量的计算和输入输出.变量的命名.运算符.if判断语句.while循环语句.字符串.常量 ...

  7. 亿图脑图MindMaster思维导图及亿图图示会员-骨折啦

    亿图脑图MindMaster思维导图及亿图图示会员 先简单看一下这两软件: MindMaster 亿图图示 丰富的社区,便捷易操作的界面,还有耐看的UI设计:要是再有点特权,真的是锦上添花~ 如果需要 ...

  8. 关于主机的思维导图_思维导图正流行,现在教孩子还不晚(实操篇)

      清华爸+南大妈的育儿思考自留地 点击上方蓝字,即可成功订阅 *作者:小延妈,家有一年级男宝,南京大学新闻系毕业,资深文艺青年,古文爱好者.前几天,在一个"鸡娃"群中,有宝妈分享 ...

  9. 什么是思维导图?思维导图高效学习法

    什么是思维导图?思维导图高效学习法 思维导图是一张将思维形象化的方法,他简单却很有效,是一种实用性的工具,他运用图文并茂的技巧,把各级主题的关系相互隶属与相关的层级图表现出来,把主题关键词与图像.颜色 ...

最新文章

  1. python2.7除法_对python中的float除法和整除法的实例详解
  2. 知识图谱前沿跟进,看这篇就够了,Philip S. Yu 团队发布权威综述,六大开放问题函待解决!...
  3. 微信小程序(11)--购物车
  4. Springboot集成BeanValidation扩展一:错误提示信息加公共模板
  5. HDU 1033 水题
  6. python实现mini-batch_Mini-Batch 、Momentum、Adam算法的实现
  7. PPT(十)-动画基础知识学习
  8. Java 中 modifer #39;public#39; is reduntant for interface methods
  9. SQL Server 2008处理隐式数据类型转换在执行计划中的增强
  10. shell编程基础:逻辑运算
  11. bug篇——mysql排序混乱问题
  12. golang之strings
  13. Linux安装软件的三种方式
  14. CTF misc图片类总结(入门级)
  15. [迅为i.MX6ULL开发板学习]内核Logo 修改使用文档
  16. ERP - 国际贸易术语(Incoterm)总结
  17. Oracle、聚石塔
  18. 基于python学生档案管理系统的设计与实现.rar(毕业论文+程序源码+答辩PPT)
  19. 如何把二维码引入固定资产管理?
  20. [Pytorch]torch.nn.functional.conv2d与深度可分离卷积和标准卷积

热门文章

  1. 我理解的myisam引擎之一 myisam表特征
  2. UC、猎豹都在转型内容平台,工具内容化成大势所趋?
  3. 正大国际期货:易盛软件系统的介绍
  4. 中文繁体和简体相互转换simplified.txt文件
  5. idea多个项目合并一个窗口
  6. 互联网时代,加强数字技能人才培养成刚需
  7. 面试时,你被问到过 TCP/IP 协议吗?
  8. WEB小厂电商项目测试技术指南1.0
  9. 解决ios无法添加中文cookie的问题
  10. oracle字符转换为大写,oracle函数把字符串转换成小写