你所不能不知道的CNN

作者: 陈欣 2017-12-25 13:26:36

说起CNN,最初人们想到的都是某电视台,但等过几年,人们想起的多半是深度学习了。

应该说, CNN是这两年深度学习风暴的罪魁祸首, 自2012年, 正是它让打入冷宫的神经网络重见天日并且建立起自己在人工智能王国的霸主地位。

如过你认为深度学习是只能用来理解图像的,你就大错特错了, 因为它的用途太广了,上至文字,中有图像, 下至音频, 从手写数字识别到大名鼎鼎的GAN对抗学习, 都离不开它。

不过要了解CNN,还是拿图像做例子比较恰当。一句话来说CNN图像处理的本质,就是信息抽取, 巨大的网络可以抽取一步步得到最关键的图像特征, 我们有时也叫自动的特征工程。

CNN的建造灵感来自于人类对视觉信息的识别过程。 人脑对物体的识别的第一个问题是: 对应某一类对象的图像千千万, 比如一个苹果, 就有各种状态的成千上万状态, 我们识别物体的类别,事实上是给这成千上万不同的图片都打上同一个标签。

你所不能不知道的CNN
CNN的灵感来自人大脑

物理里管这种一个事物的结果与一些列的变化都没有关的特性,叫不变性, 比如如果你转动一个苹果任何一个角度它都是苹果, 这就是苹果有旋转不变性,但是数字6就不行, 如果你给它旋转特定角度它就变成9了, 它就没有旋转不变性。

我们人通常可以无视这些变化认出事物来,也就是把和这种变化有关的信息忽略。如果我们对图像进行识别, 事实上我们的算法就要有人的这种本领, 首先让它学会什么东西与真实的物体信息是无关的。

就拿数字识别举个例子吧, 一个数字是什么,虽然与旋转的角度有关系, 但与它在图片中的上下左右没关系, 我们管这种不变性叫平移不变性。

解决这个问题,最粗暴的一个方法是制造很多的样本,比如把“1” 放在很多不同的位置,然后让机器在错误中学习。 然后穷尽所有的位置, 不过我相信没有人是这么完成对物体的识别的。

那怎么办?CNN中的卷积正是这一问题的答案,因为卷积操作本身具有平移不变性(我知道听起来不明觉厉 ,请看下文)。

卷积,顾名思义, “卷”有席卷的意思,“积“ 有乘积的意思。 卷积实质上是用一个叫kernel的矩阵,从图像的小块上一一贴过去,一次和图像块的每一个像素乘积得到一个output值, 扫过之后就得到了一个新的图像。我们用一个3*3的卷积卷过一个4*4的图像, 看看取得的效果。

你所不能不知道的CNN
卷积的数学过程

一个卷积核就像一个小小的探测器, 它的DNA是被刻录在卷积核的数字里的, 告诉我们它要干什么, 而卷积核扫过图片,只要它的DNA是不变的,那么它在图片上下左右的哪个位置看到的结果都相同, 这变是卷积本身具有平移不变性的原理。 由于这种不变性, 一个能够识别1的卷积在图片的哪个位置都可以识别1,一次训练成本,即可以对任何图片进行操作。

图像处理领域,卷积早已有另一个名字 , 叫做滤镜,滤波器, 我们把图像放进去,它就出来一个新图像,可以是图像的边缘,可以是锐化过的图像,也可以是模糊过的图像。

如果大家玩过photoshop, 大家都会发现里面有一些滤镜,比如说锐化,模糊, 高反差识别这一类,都是用着类似的技术,这样的技术所作的事情是图像的每个小片用一个矩阵进行处理,得到一个画面的转换 。 我们有时候会说低通和高通滤镜 ,低通滤镜通常可以用来降噪, 而高通则可以得到图像的细微纹理。 你玩photoshop,玩的就是卷积,卷积核里面的数字定了, 它的功能也就定了。

为什么这样做有效果了?因为图像的特征往往存在于相邻像素之间, kernel就是通过计算小区域内像素的关系来提取局部特征,可以理解为一个局部信息的传感器, 或物理里的算子。

比如提到的边缘提取滤镜, 它所做的物理操作又称为拉普拉斯, 只有像素在由明亮到变暗的过程里它才得1, 其他均得0,因此它所提取的图像特征就是边缘。 事实上我们知道图像中的信息往往包含在其边缘,你给以一个人画素描, 一定能够完全识别这个人 。 我们通过寻找到信息的关键载体-边缘, 而把其他多余的信息过滤掉,得到了比第一层更好处理的图像, 大大减少了需要搜索图像的可能性。

你所不能不知道的CNN
卷积的边缘抽取过程

常用于卷积的Kernel本质是两个: 第一, kernel具有局域性, 即只对图像中的局部区域敏感, 第二, 权重共享。 也就是说我们是用一个kernel来扫描整个图像, 其中过程kernel的值是不变的。这点就可以保证刚刚说的平移不变形。 比如说你识别一个物体, 显然你的识别不应该依赖物体的位置。 和位置无关, 及平移不变。

那卷积如何帮你从不同的图形中识别数字1了?数字的尖锐的线条会让卷积的值很高(响起警报)。无论你1出现在图像中的哪一个位置, 我的局部扫描+统一权重算法都给你搞出来, 你用同一个识别1的卷积核来扫过图片,voila,任何一个位置我都给你找出来。

那卷积和神经网络有什么关系了?答案是卷积扫过图像,每一个卷积核与图像块相乘的过程,都可以看作是一个独立的神经元用它的神经突触去探测图像的一个小局部,然后再做一个决策,就是我看到了什么或没看到什么。整个卷积过程, 不就对应一层神经网络吗?啊哈, 整个卷积过程相当于一层神经网络!

你所不能不知道的CNN
一个个小探测器一般的神经元

刚刚说了卷积是一个能够对图片中任何位置的同一类信息进行抽取的工具, 那么我们还讲到我们除了抽取, 还要做的一个工作是,取出重要信息,扔掉不重要的,实现这一个的操作,叫做pooling

但是大家注意,这个时候如果原图像是28*28, 那么从kernel里出来的图形依然是28*28, 而事实上, 事实是上, 大部分时候一个图像的局部特征的变化都不会是像素级。我们可以把局部特征不变形看做一个假设, 把这个假设作为一个数学公式加入到卷积层里帮我们过滤冗余信息, 这就是pooling所做的事情 -也就是扔掉你周边得和你长得差不多得那些像素。

你所不能不知道的CNN
Max Pooling的数学过程

Pooling的本质即降采样,以提升统计效率,用一个比较冠冕的话说是利用局部特征不变性降维 ,pooling的方法很多,常见的叫做max pooling,就是找到相邻几个像素里值最大的那个作为代表其它扔掉。

这样经过从卷积到pooling的过程, 在识别1的任务里,我们可以验明在每个小区域里有没有存在边缘, 从而找到可能存在1的区域。 在pooling的终结点, 我们得到的是一个降低维度了的图像,这个图像的含义是告诉你在原有的图像的每个区域里是含有1还是不含有1, 又叫做特征图。

好了,我们可以从一堆图片中识别出1了, 那么我们怎么搞定2呢? 我们把2写成一个Z型, 你有没有思路我们如何做到这点? 我们不能只识别竖着的线条,还需要识别横向的线条,记住,一个卷积层只搞定一个特征,如果你既要找竖线也要找横线, 我们需要两个不同的卷积层,并且把他们并联在一起,

你所不能不知道的CNN
手写数字识别

然后呢? 横线对应一张特征图, 竖线对应另一个张特征图, 如果要识别2, 你无非需要比较这两张特征图,看是否有哪个位置两个特征图同时发生了警报(既有横线又有竖线)。

这个比较的过程,我们还是可以用一个卷积搞定(理由依然是平移不变性)!

这个时候, 新的卷积层对之前并连的两个卷积的结果做了一个综合, 或者说形成了一个特征之特征, 即横向和竖线交叉的特征。

这里把我们的理论可以更上一层路。 深度意味着什么? 我们想一下, 要正确的识别一个图像,你不可能只看变,也不可能只看边角, 你要对图像的整体有认识才知道张三李四。 也就是说我们要从局部关联进化到全局关联, 真实的图像一定是有一个全局的,比如手我的脸, 只有我的眼镜,鼻子耳朵都被一起观察时候才称得上我的脸,一个只要局部,就什么都不是了。如何提取全局特征?

从一个层次到另一个层次的递进, 通常是对上一层次做横向以及纵向的整合(图层间的组合或图层之内的组合或两者),我们的特征组合是基于之前已经通过pooling降低维度的图层,因此事实上每一个神经元决策的信息相对上一层都更多,我们用一个学术名词 – 感受野来表述一个神经元决策所涵盖的像素多少, 上一层次看到更多的输入神经元, 因此感受野看更多了 。 越靠近顶层的神经元, 所要做的事情就越接近全局关联。

你所不能不知道的CNN

你所不能不知道的CNN
越深,感受野越大, 表示越抽象

这和物理学的一个基本方法--尺度变换有着异曲同工之妙(我们后面讲), 也是提取全局信息的一个非常核心的办法,我管它叫级级递进法。 你一级一级的进行对画面进行降采样, 把图像里的四个小格子合成一个, 再把新的图像里四个小格子合成一个, 直到一个很大的图像被缩小成一个小样。每一层的卷积,都不是一个卷积,而是一组执行不同特征提取的卷积网络,比如我刚刚说的 不同方向的边缘沟成的一组卷积, 你可以想象后面有不同大小的角度组成的一组网络, 他体现了在一个空间尺度上我们所能够达到的特征工程。

如此级级互联, 越靠上层感受野就越大。 整个CNN网络如同一封建等级社会,最上层的,就是君王,它是整个集团唯一具有全局视野的人,下一级别, 是各大领主,然后是领主上的风尘,骑士,知道农民(底层神经元)。

我们把刚刚的全局换一个词叫抽象。深度卷积赋予了神经网络以抽象能力。 这样的一级级向上卷积做基变换的过程,有人说叫搞基(深度学习就是搞基),深一点想叫表征, 和人的思维做个比喻就是抽象。 抽象是我在很深的层次把不同的东西联系起来,CNN教会了我们事先抽象的一种物理方法。

到目前为止, 我所描述的是都是一些人工的特征工程,即使网络在深,顶多说的上是深度网络,而与学习无关。我们说这样一个系统(mxnxpxz), 我们要人工设计,几乎穷经皓首也可能做的都是错的。我们说, 这样的一个结构, 只能靠机器自己学,这就是深度学习的本质了, 我们通过几条basic假设(正则)和一个优化函数,让优化(进化)来寻找这样一个结构。 Basic假设无非图像的几个基本结构, 体现在几个不变形上,物理真是好伟大啊。

深度学习的训练,就是计算机帮助人完成了机器学习最难的一步特征工程(特征工程本质就是基变换啊)。以前人类穷尽脑汁思考如何做图像识别, 是寻找人是如何识别图像的, 希望把人能用来识别物体的特征输入给计算机, 但是现在通过深度卷积,计算机自己完成了这个过程。

卷积网络在2012 年的发展趋势, 大家可以关注几个方向:

1, 更深的模型 : 从AlexNet到VCG19 ,High way network 再到残差网络, 一个主要的发展趋势是更深的模型。 当你采用更深的模型,经常你会发现一些神奇的事情发生了。 当然网络的宽度(通道数量)也在增加。

你所不能不知道的CNN
这只是最初级的CNN

你所不能不知道的CNN
这也只是小菜一碟

2, 更通畅的信息交换 : 深,带来的第一个问题是训练困难, 反向传播难以传递。 从残差网络, 到目前开始流行的Dense Network, 一个主要的发展趋势是不同层级间的信息的交换越来越通畅。 我们逐步在不同层之间加入信息的直连通道。

你所不能不知道的CNN
Dense Network

3, 与监督学习之外的学习方法的结合, 如迁移学习, 半监督学习, 对抗学习, 和强化学习。 后两者的有趣程度远超监督学习。

4, 轻量化, CNN网络越来越深, 使得网络的文件动辄装不下, 这点使得CNN网络的轻量化部署成为重点, 我们希望在性能和能耗中取中。 一个很好的办法是对网络权重进行减枝,去掉不重要的权重, 另外一个是把每个权重的数据位数本身缩减,甚至是使用0和1表示, 虽然看上去我们丢失了很多信息, 但是由于巨大网络中的信息是统计表达的,我们到底损失多大还真不一定。

你所不能不知道的CNN
酷似生物过程的剪枝处理

以上是CNN的小结, 不要以为图像处理与你无关,我刚刚说的其实一篇文章如果你把它转化为一个矩阵无非一个图像, 一段音频你给它转换成一个矩阵无非一个图像, 你看, 都可以和CNN挂钩。

我想说,无论你是做什么的, 无论是苦逼的计算机工程师, 游戏设计师,还是外表高大上的金融分析师,甚至作为一个普通消费者, 你的生活以后都和CNN脱不开干系了 , 预知更多情报还请关注:

巡洋舰的深度学习实战课程, 手把手带你进行深度学习实战, 课程涵盖机器学习,深度学习, 深度视觉, 深度自然语言处理, 以及极具特色的深度强化学习,看你能不能学完在你的领域跨学科的应用深度学习惊艳你的小伙伴,成为身边人眼中的大牛。刚刚讲的方法都将在课程里详细展开。

CNN 深度学习 网络
上一篇:智能机器人关键技术:推动制造领域智能化改造 下一篇:未来智能手机或将消失?华为将推智慧手机取而代之!
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

18个挑战项目带你快速入门深度学习

AlphaGo 大战李世?h之后,深度学习技术便在国内变得异常火。吸引了大批的技术人员争相学习,那么到底如何才能更快速的入门深度学习呢?下面给大家介绍的 18 个挑战项目,通过实践动手带你快速入门深度学习!

实验楼 ·  4天前
盘点 | 8个你可能不知道的深度学习应用案例

深度学习与传统机器学习系统的不同之处在于,它能够在分析大型数据集时进行自我学习和改进,因此能应用在许多不同的领域。

天极网 ·  4天前
神经网络中的各种损失函数介绍

不同的损失函数可用于不同的目标。在这篇文章中,我将带你通过一些示例介绍一些非常常用的损失函数。这篇文章提到的一些参数细节都属于tensorflow或者keras的实现细节。

人工智能遇见磐创 ·  2019-10-08 15:39:54
2019年较热门的5大深度学习课程

今天,我们将和大家盘点一下,当下较流行的深度学习资源/课程,可以帮助你们提升深度学习技能。

猿哥 ·  2019-09-26 05:16:24
DeepMind一次性开源3个新框架!深度强化学习应用落地即将迎来春天?

深度强化学习(Deep Reinforcement Learning,DRL)一直是近年来人工智能的一些重大突破的核心。然而,尽管 DRL 有了很大的进步,但由于缺乏工具和库,DRL 方法在主流解决方案中仍然难以应用。

杨鲤萍 ·  2019-09-20 09:38:18
一步一步带你完成深度学习与对象检测之人脸识别

要进行人脸识别,就要搜集用户的人脸图片,我们从网站上搜集了几个明星的照片来进行本期文章的分享。此部分文章是人脸识别的第一部分,人脸数据的搜集与提取,后期我们分享人脸识别系统的神经网络训练与人脸识别。

人工智能研究所 ·  2019-09-18 07:20:34
看懂这十步,8岁的小朋友都能理解深度学习

如果对当今人工智能的主流技术——深度学习没有了解,可能真的会有人觉得,当前的科学家们在创造无所不能、无所不知的电影AI形象。那么,如何用最浅显的方式,给大众解释什么是深度学习呢?快来看看吧!

佚名 ·  2019-09-17 16:56:39
PyTorch版《动手学深度学习》开源了,最美DL书遇上超赞DL框架

李沐等人的开源中文书《动手学深度学习》现在有 PyTorch 版实现了。不论是原书中的示例代码,还是实战项目,原来的 MXNet 都可以无缝转化到 PyTorch 代码。

ShusenTang ·  2019-09-17 10:23:45
Copyright©2005-2019 51CTO.COM 版权所有 未经许可 请勿转载