阅读大概需要5分钟

跟随小博主,每天进步一丢丢

原文地址:

https://www.jianshu.com/p/fe428f0b32c1

视频地址:

https://www.youtube.com/embed/FmpDIaiMIeA

导读

当你听到说深度学习打破了某项新技术障碍,那么十有八九就会涉及到卷积神经网络。它们也被称作CNNs或着ConvNets,是深层神经网络领域的主力。它们已经学会对图像进行分类,在某些情况下甚至超过了人类。如果有一个方法证明了这种假设,那就是CNN。特别酷的一点就是,当你将它们分解为基本模块时,它们很容易被理解。这里有一个视频,很详细地讨论了关于这些图像问题。

LeNet-5

Classfication

先验工作

【Convolutional Deep Belief Networks】

【Playing Atari with Deep Reinforcement Learning】

【Robot Learning Manipulation Action Plans】

A toy ConvNet:X's and O's

识别一幅图片是包含有字母"X"还是字母"O"?

为了帮助指导你理解卷积神经网络,我们讲采用一个非常简化的例子:确定一幅图像是包含有"X"还是"O"?

这个例子足够说明CNN背后的原理,同时它足够简单,能够避免陷入不必要的细节。在CNN中有这样一个问题,就是每次给你一张图,你需要判断它是否含有"X"或者"O"。并且假设必须两者选其一,不是"X"就是"O"。理想的情况就像下面这个样子:

标准的"X"和"O",字母位于图像的正中央,并且比例合适,无变形

对于计算机来说,只要图像稍稍有一点变化,不是标准的,那么要解决这个问题还是不是那么容易的:

计算机要解决上面这个问题,一个比较天真的做法就是先保存一张"X"和"O"的标准图像(就像前面给出的例子),然后将其他的新给出的图像来和这两张标准图像进行对比,看看到底和哪一张图更匹配,就判断为哪个字母。但是这么做的话,其实是非常不可靠的,因为计算机还是比较死板的。在计算机的“视觉”中,一幅图看起来就像是一个二维的像素数组(可以想象成一个棋盘),每一个位置对应一个数字。在我们这个例子当中,像素值"1"代表白色,像素值"-1"代表黑色。

当比较两幅图的时候,如果有任何一个像素值不匹配,那么这两幅图就不匹配,至少对于

计算机来说是这样的。
对于这个例子,计算机认为上述两幅图中的白色像素除了中间的3*3的小方格里面是相同的,其他四个角上都不同:

因此,从表面上看,计算机判别右边那幅图不是"X",两幅图不同,得出结论:

但是这么做,显得太不合理了。理想的情况下,我们希望,对于那些仅仅只是做了一些像平移,缩放,旋转,微变形等简单变换的图像,计算机仍然能够识别出图中的"X"和"O"。就像下面这些情况,我们希望计算机依然能够很快并且很准的识别出来:

这也就是CNN出现所要解决的问题。

Features

对于CNN来说,它是一块一块地来进行比对。它拿来比对的这个“小块”我们称之为Features(特征)。在两幅图中大致相同的位置找到一些粗糙的特征进行匹配,CNN能够更好的看到两幅图的相似性,相比起传统的整幅图逐一比对的方法。

每一个feature就像是一个小图(就是一个比较小的有值的二维数组)。不同的Feature匹配图像中不同的特征。在字母"X"的例子中,那些由对角线和交叉线组成的features基本上能够识别出大多数"X"所具有的重要特征。

这些features很有可能就是匹配任何含有字母"X"的图中字母X的四个角和它的中心。那么具体到底是怎么匹配的呢?如下:

看到这里是不是有了一点头目呢。但其实这只是第一步,你知道了这些Features是怎么在原图上面进行匹配的。但是你还不知道在这里面究竟进行的是怎样的数学计算,比如这个下面3*3的小块到底干了什么?

接下来就跟进介绍里面的数学操作,也就是我们常说的“卷积”操作。

卷积(Convolution)

Convolution

当给你一张新的图时,CNN并不能准确地知道这些features到底要匹配原图的哪些部分,所以它会在原图中每一个可能的位置进行尝试。这样在原始整幅图上每一个位置进行匹配计算,我们相当于把这个feature变成了一个过滤器。这个我们用来匹配的过程就被称为卷积操作,这也就是卷积神经网络名字的由来。

这个卷积操作背后的数学知识其实非常的简单。要计算一个feature和其在原图上对应的某一小块的结果,只需要简单地将两个小块内对应位置的像素值进行乘法运算,然后将整个小块内乘法运算的结果累加起来,最后再除以小块内像素点总个数即可。如果两个像素点都是白色(也就是值均为1),那么1*1 = 1,如果均为黑色,那么(-1)*(-1) = 1。不管哪种情况,每一对能够匹配上的像素,其相乘结果为1。类似地,任何不匹配的像素相乘结果为-1。如果一个feature(比如n*n)内部所有的像素都和原图中对应一小块(n*n)匹配上了,那么它们对应像素值相乘再累加就等于n2,然后除以像素点总个数n2,结果就是1。同理,如果每一个像素都不匹配,那么结果就是-1。具体过程如下:

对于中间部分,也是一样的操作:

最后整张图算完,大概就像下面这个样子:

然后换用其他feature进行同样的操作,最后得到的结果就是这样了:

为了完成我们的卷积,我们不断地重复着上述过程,将feature和图中每一块进行卷积操作。最后通过每一个feature的卷积操作,我们会得到一个新的二维数组。这也可以理解为对原始图像进行过滤的结果,我们称之为feature map,它是每一个feature从原始图像中提取出来的“特征”。其中的值,越接近为1表示对应位置和feature的匹配越完整,越是接近-1,表示对应位置和feature的反面匹配越完整,而值接近0的表示对应位置没有任何匹配或者说没有什么关联。

这样我们的原始图,经过不同feature的卷积操作就变成了一系列的feature map。我们可以很方便,直观地将这整个操作视为一个单独的处理过程。在CNN中,我们称之为卷积层(convolution layer),这样你可能很快就会想到后面肯定还有其他的layer。没错,后面会提到。我们可以将卷积层看成下面这个样子:

因此可想而知,CNN其实做的操作也没什么复杂的。但是尽管我们能够以这一点篇幅就描述了CNN的工作,其内部的加法,乘法和除法操作的次数其实会增加地很快。从数学的角度来说,它们会随着图像的大小,每一个filter的大小和filter的数目呈线性增长。由于有这么多因素的影响,很容易使得这个问题的计算量变得相当的庞大,这也难怪很多微处理器制造商现在都在生产制造专业的芯片来跟上CNN计算的需求。

池化(Pooling)

Pooling

CNN中使用的另一个有效的工具被称为“池化(Pooling)”。池化可以将一幅大的图像缩小,同时又保留其中的重要信息。池化背后的数学顶多也就是小学二年级水平。它就是将输入图像进行缩小,减少像素信息,只保留重要信息。通常情况下,池化都是2*2大小,比如对于max-pooling来说,就是取输入图像中2*2大小的块中的最大值,作为结果的像素值,相当于将原始图像缩小了4倍。(注:同理,对于average-pooling来说,就是取2*2大小块的平均值作为结果的像素值。)

对于本文的这个例子,池化操作具体如下:

不足的外面补"0":

经过最大池化操作(比如2*2大小)之后,一幅图就缩小为原来的四分之一了:

然后对所有的feature map执行同样的操作,得到如下结果:

因为最大池化(max-pooling)保留了每一个小块内的最大值,所以它相当于保留了这一块最佳的匹配结果(因为值越接近1表示匹配越好)。这也就意味着它不会具体关注窗口内到底是哪一个地方匹配了,而只关注是不是有某个地方匹配上了。这也就能够看出,CNN能够发现图像中是否具有某种特征,而不用在意到底在哪里具有这种特征。这也就能够帮助解决之前提到的计算机逐一像素匹配的死板做法。

当对所有的feature map执行池化操作之后,相当于一系列输入的大图变成了一系列小图。同样地,我们可以将这整个操作看作是一个操作,这也就是CNN中的池化层(pooling layer),如下:

通过加入池化层,可以很大程度上减少计算量,降低机器负载。

Normalization

激活函数Relu (Rectified Linear Units)

这是一个很小但是很重要的操作,叫做Relu(Rectified Linear Units),或者修正线性单元。

对于输入的负值,输出全为0,对于正值,原样输出。关于其功能,更多详见 这里。

下面我们看一下本文的离例子中relu激活函数具体操作:

最后,对整幅图操作之后,结果如下:

同样地,在CNN中,我们这一系列操作视为一个操作,那么就得到Relu Layer,如下:

Deep Learning

最后,我们将上面所提到的卷积,池化,激活放在一起,就是下面这个样子:

然后,我们加大网络的深度,增加更多的层,就得到深度神经网络了:

然后在不同的层,我们进行可视化,就可以看到本文开头提到的先验知识里面的结果了:

全连接层(Fully connected layers)

根据结果判定为"X":

在这个过程中,我们定义这一系列操作为”全连接层“(Fully connected layers):

全连接层也能够有很多个,如下:

【综合上述所有结构】

这一整个过程,从前到后,被称作”前向传播“,得到一组输出,然后通过反向传播来不断纠正错误,进行学习。

反向传播 (Backpropagation)


Gradient Descent Optimizer

Hyperparameters

Application

Images

Soung

Text

每日一题

下列哪一项属于特征学习算法(representation learning algorithm)?

A、K近邻算法

B、随机森林

C、神经网络

D、都不属于

正确答案是:C

解析:

神经网络会将数据转化为更适合解决目标问题的形式,我们把这种过程叫做特征学习。

IELTS a bit

bullet n. 子弹;弹药;弹丸;着重号

ifs n. 不确定的事;无把握的事(if的名词复数)

推荐阅读:

一大批历史精彩文章啦

EMNLP 2018 | 为什么使用自注意力机制?


[透析] 卷积神经网络CNN究竟是怎样一步一步工作的?相关推荐

  1. 透析 | 卷积神经网络CNN究竟是怎样一步一步工作的?

    北京 | 深度学习与人工智能研修 12月23-24日 再设经典课程 重温深度学习阅读全文> 正文共6018个字109张图,预计阅读时间16分钟. 视频地址:https://www.youtube ...

  2. 卷积神经网络CNN究竟是怎样一步一步工作的?

    转载:https://www.jianshu.com/p/fe428f0b32c1 [透析] 卷积神经网络CNN究竟是怎样一步一步工作的? 视频地址:https://www.youtube.com/e ...

  3. 卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)

    卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习) 分享一些公式计算张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算. 以AlexNet网络为例,以下是该网络的参数结构图. A ...

  4. 卷积神经网络(CNN,ConvNet)

    卷积神经网络(CNN,ConvNet) 卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的.在短时间内,变成了一种颠覆性的技术,打破了从文本.视频到语音等多个领域所有最先进的算法,远远超出 ...

  5. 卷积神经网络(CNN)的简单实现(MNIST)

    卷积神经网络(CNN)的基础介绍见http://blog.csdn.net/fengbingchun/article/details/50529500,这里主要以代码实现为主. CNN是一个多层的神经 ...

  6. 卷积神经网络(CNN)实现CIFAR100类别分类

    卷积神经网络(CNN)实现CIFAR100类别分类 1. CIFAR100数据集介绍 这个数据集就像CIFAR-10,除了它有100个类,每个类包含600个图像.,每类各有500个训练图像和100个测 ...

  7. 卷积神经网络(CNN)简介

    卷积神经网络(CNN)简介 多层的线性网络和单层的线性网络没有区别,而且线性模型的能够解决的问题也是有限的 1. 更复杂抽象的数据 一个单隐含层有更多的神经元,就能捕捉更多的特征.而且有更多隐层,意味 ...

  8. 一文看懂卷积神经网络-CNN(基本原理+独特价值+实际应用)

    http://blog.itpub.net/29829936/viewspace-2648775/ 2019-06-25 21:31:18 卷积神经网络 – CNN 最擅长的就是图片的处理.它受到人类 ...

  9. 卷积神经网络(CNN)反向传播算法

    在卷积神经网络(CNN)前向传播算法中,我们对CNN的前向传播算法做了总结,基于CNN前向传播算法的基础,我们下面就对CNN的反向传播算法做一个总结.在阅读本文前,建议先研究DNN的反向传播算法:深度 ...

  10. 卷积神经网络(CNN)前向传播算法

    在卷积神经网络(CNN)模型结构中,我们对CNN的模型结构做了总结,这里我们就在CNN的模型基础上,看看CNN的前向传播算法是什么样子的.重点会和传统的DNN比较讨论. 1. 回顾CNN的结构 在上一 ...

最新文章

  1. 拦截器与filter的区别
  2. Angular变化检测机制:改善的脏检查
  3. 光端机的作用有哪些?
  4. BZOJ1423 : Optimus Prime
  5. python自动登录qq空间_python 利用splinter组件,自动登录QQ空间
  6. 浙江农林大学有计算机专业,浙江农林大学计算机科学与技术专业在职研究生
  7. inner join去除重复_SQL多表查询:join表联结
  8. SqlServer 2008的tempdb数据文件大小暴增处理
  9. 软件测试技术体系-专业术语
  10. Speedoffice(excel)如何运用公式通过身份证号码提取出性别
  11. 离线检查未安装的Windows更新
  12. 统计学中位数概念的理解
  13. python 和vba在财务上_Excel,VBA太烦!PowerBI太贵!可以用Python处理公司财务数据并实现可视化吗?...
  14. 智能家居系列之Home Assistant
  15. python 随机森林分类 DecisionTreeClassifier 随机搜索优化参数 GridSearchCV
  16. 《产品设计与开发(原书第5版)》——2.6 产品开发组织
  17. linux 基础上机练习,Linux上机练习题shell程序设计基础.docx
  18. 升级版剪刀石头布(表格的处理方法)
  19. vue 2.0系列QQ音乐播放器案例
  20. 传感器模拟器——python

热门文章

  1. 山寨式创业 八百客誓做“管理软件终结者 ”
  2. 2.15三亚,自由的一天
  3. java day62【 响应数据和结果视图 、 SpringMVC 实现文件上传 、 SpringMVC 中的异常处理 、 SpringMVC 中的拦截器 】...
  4. c#通过RFC调用SAP接口程序之输入输出参数案例
  5. Today Take a Look at Nike's Valentine's Day Sneakers
  6. talend工具中往oracle插数据报ORA-01461: can bind a LONG value only for insert into a LONG colum...
  7. python+request+Excel做接口自动化测试
  8. 勇者斗恶龙UVa11292 - Dragon of Loowater
  9. 当滚动页面到一定程度时,页顶菜单浮动固定在页面顶部
  10. 软件因丢失.dll文件(未找到)而无法启动?