吊炸天的CNNs,这是我见过最详尽的图解!(下)

导读:卷积神经网络(CNNs)在“自动驾驶”、“人脸识别”、“医疗影像诊断”等领域,都发挥着巨大的作用。这一无比强大的算法,唤起了很多人的好奇心。当阿尔法狗战胜了李世石和柯杰后,人们都在谈论“它”。

但是,

“它”是谁? “它”是怎样做到的?

已经成为每一个初入人工智能——特别是图像识别领域的朋友,都渴望探究的秘密。

本文通过“算法可视化”的方法,将卷积神经网络的原理,呈献给大家。教程分为上、下两个部分,通篇长度不超过7000字没有复杂的数学公式,希望你读得畅快。

下面,我们就开始吧!

上一节课,我们已经对输入图片做了“卷积”处理,将图片中所暗含的特征提取出来,未能听课的同学,可以查阅《吊炸天的CNNs,这是我见过最详尽的图解!(上)》

在提取特征的过程中,我们采用的是“过滤器中的数值,与原始图片中的相应数值,相乘、相加”的方法,例如:

事实上,在“卷积”过程中

上面这种对应数值相乘、再相加的计算,仅仅是“线性”计算;

而在现实世界中,很多很多的数据,都是“非线性”的。

所以,在“卷积”处理的后面,我们常常引入一个“非线性”的计算,来使得数据更加接近真实世界。

这个“非线性”计算,就是ReLU函数,它的图像形态犹如一条折线:

它就像是一个魔法袋子,所有经过它的数值:

如果是负数,出来的结果就是0 如果是正数或零,出来的结果仍是自己本身

ReLU计算,相当于把一条直线(“线性”)掰弯。

虽然,这种方法有点儿简单(……粗暴),但是,它能使我们最终的预测准确度得到提升。

具体到图片计算,ReLU相当于将“特征图片”中,像素值小于0的部分,全部变为0。

举个例子

假设经过“过滤器”提取后,得到的“特征图片”其像素值如左下图,那么,经过ReLU处理后,得到的“新的”特征图片会呈现右下图形态:

回到我们之前的例子中,在“卷积”的后面,再加上一步“ReLU计算”,即为:

因为我们之前使用的过滤器,其得到的数值,绝大多数均为正数,所以,经由ReLU处理后的图片,没有太大的改变,希望这并不影响你对于ReLU运算的理解。

当然,如果你的特征图片的尺寸很大的话,你还可以进一步添加“池化”的操作。

所谓“池化”,就是在保留图片主要信息的前提下,将图片的尺寸缩小。

池化的类型有很多种,诸如“最大池化”、“平均池化”、“求和池化”等等,它们的运算原理基本一致。

因为“最大池化”更为常用,所以我们重点介绍“最大池化”的运算过程。

假设经过ReLU处理后,我们得到的特征图片,如下图:

在对特征图片进行“池化”处理时,与“卷积”类似,需要我们设置2个超参数:

过滤器大小(F)滑动的步幅数(S)

这里,假设我们设置F=2,S=2,那么,“最大池化”为:

在每2*2(即4个)像素区域内,保留像素值最大的那一个,其余3个像素值抛弃。

如下图:

这样,经过“池化”处理,就将一个4*4大小的图片,缩小为2*2大小的图片了。

当然,在“池化”过程中,你也可以将超参数设置为F=3、S=2,只不过“F=2、S=2”更为常用。

回到我们之前的例子中,在“ReLU计算”的后面,再加上一步“最大池化”,即为:

(点击图片,查看大图)

故事至此,我们在第2个步骤中所涉及的所有环节,都已经学习完了。

回顾step2的整个流程:

输入图片 → 卷积 → ReLU → 池化(可选)

当然,你也可以不拘泥于此。有的时候,我们会进行多次卷积和池化,所以,更一般的形式:

举个例子:

★ 你可以构建2层“卷积 + ReLU”,如下:

输入图片 → 卷积 → ReLU → 卷积 → ReLU → 池化

★ 也可以构建2层“卷积 + ReLU + 池化”:

输入图片 → 卷积 → ReLU → 池化 → 卷积 → ReLU → 池化

当然,你还可以构建更多网络层,这里就不一一列举了。

温馨提示:

① “池化”层使用的过滤器,与“卷积”层使用的过滤器有所不同:

★ “池化”层的过滤器,其内部没有数值

因为“池化”层的过滤器,其功能只是将图片缩小,故其内部没有参数。

★ 在“池化”层中,仅有1个过滤器;而在“卷积”层中,可以设置多个过滤器

因为“卷积”层的过滤器,其功能是提取图片的特征,因而,我们使用不同的过滤器,可以提取不同的图片细节。

而“池化”层的过滤器,仅仅是为了缩小图片的尺寸,因而,使用一种过滤器,就可以达到这一目标,无需设置多个。

② 经过“卷积”处理后,得到的图片张数(即“图片深度”),应该等于该卷积层的过滤器个数;

而经过“池化”处理后,得到的图片张数(即“图片深度”),仍等于上一层的图片张数。

概念描述比较晦涩,直接看下图:

(点击图片,查看大图)

当仅有1个卷积层时,关于每一层的图片深度问题,尚且好理解(如上图所示)。

但是,当模型中含有多个卷积层,或者,输入的图片为彩色图片时,这个问题就容易被混淆,后面,我们在讲到彩色图片的图像处理时,仍会强调这个问题,此处,仅需记住这一概念就可以。

最后一步,该轮到我们的压轴大戏——“图片分类”了。

经过上面一系列的处理,此时得到的图片,已经可以被视为一串串简单的数字(即像素值)。

将这一个个的像素值,塞到我们初中就已接触过的表达式中:

x是谁?

还记得之前讲的计算机“眼中”的世界吗?

那一个格子、一个格子中的数字,就是x。

y是谁?

我们给每张图片打上的标签:这张图是“猫”、那张图是“狗”…… 统统这些标签,就是y。

θ是什么鬼?

当你给计算机很多组、很多组(x,y)时,它会自己去学习寻找x与y之间的关系,这个“关系”,就是θ。

当你拥有了θ,下一次,即使拿到一张没有打过标签的图片,你也可以通过已知的θ和x,知道y的取值,从而“知道图片里画的是什么?”。


所以,在“第3步 - 图片分类”中:

首先,需要把第2步得到的图片,其中的像素值“展开”。

为了方便大家理解,假设我们从第2步中,得到了2张2*2的图片,如果把它们的像素值“展开”,得到的效果为:

这样,我们就拿到了x。展开后所得到的

就是x。

在训练的最初,我们拥有每张图片的标签,即“我们已经拥有了y值”。

所以,在模型的最后,我们需要让计算机努力找到x-y之间的关系。

而寻找的办法,就需要依靠“全连接神经网络”:

所谓“全连接”,是指下一层的每一个神经元(即图中的“□”),与上一层的神经元全部相连,这里为了表达得更清晰,已经省去了中间的连接符。实际上,更多的时候,你会看到下面这样的图片:

不过,本文的重点不在于讲解“全连接神经网络”,如果你想了解更多相关的知识,可以关注微信公众号:AI传送门,来进行学习。

本文的核心在于卷积神经网络(CNNs)。

这里,你只需要记住2点:

① “全连接神经网络”可以帮助我们学习到参数θ。有了它,下一次再给计算机“看”图片时,计算机便会自动识别出图中的景象。

② 模型得到的最终结果,表示“图片为某种类别的概率”。注意:这里的概率之和,永远为1。

例如:

即计算机“判断”,最初输入的图片为“狗”。

我们将CNNs的所有流程,整合起来,即:

(点击图片,横屏查阅大图)

注意:手机和微信设置,均需开启横屏模式

恭喜你!

读到这里,卷积神经网络(CNNs)的所有环节,我们已经全部学习完了。

需要代码的同学,可以关注微信公众号:AI传送门,回复“CNNs代码”获得。

文章的最后,再来和大家讲一讲彩色图片的处理。

此部分内容属于延展阅读,学有余力的同学可以顺带了解下。

之前我们一直聊的是黑白图片(专业术语“灰度图”)的图像识别方法。

其实,彩色图片与灰度图类似,也是采用的如下流程:

唯一的区别在于:

在“第1步 - 读取图片”时,灰度图的深度仅为1,而彩色图的深度为3(彩色图片包含红R、绿G、蓝B,三种通道)

所以,彩色图片在进行第一层“卷积”时,需要同时处理3张图片(即“红、绿、蓝”)。

前面我们在处理灰白图片时,因为输入的图片其深度为1,所以我们采用的是大小为3*3,但是,深度为1的过滤器,例如:

而在处理彩色图片时,我们的过滤器,其深度增加为3,例如:

所以,如果我们在“卷积”层上,设置了2个过滤器,那么,它们的形态为:

以“第1个过滤器”为例,

当过滤器在图片上滑动时,

过滤器的“红色”层,负责提取原始图片“红色”通道的特征; 过滤器的“绿色”层,负责提取原始图片“绿色”通道的特征; 过滤器的“蓝色”层,负责提取原始图片“蓝色”通道的特征。

之后,将“红、绿、蓝”3层提取出的特征值相加,得到的最终值,就是“卷积”层输出的图片像素。

依然用例子来说明:

假设我们有一张宽、高、深为4*4*3的彩色图片。

并且,我们在“卷积层”,设置了2个过滤器,如下图:

(点击图片,查看大图)

那么,两个过滤器对彩色图片的特征提取方式为:

(点击图片,查看大图)

下面,让我们放慢动作,仔细看下,上述动图的运算过程:

当过滤器1滑过原始图片时,其运算步骤为:

step1: 过滤器先滑到原始图片“第一个3*3”的区域内。

step2: 过滤器与原始图片的对应元素“点乘”。(即对应元素相乘后、再相加)

step3: 将提取出的特征值:1,1,-2,三个数值相加。

step4: 相加后得到的结果“0”,此值即为“由第1个过滤器,提取出的第1个像素”。

重复3遍上述步骤,我们就能得到第1张完整的特征图片,这张图片是由过滤器1生成的,如下图:

同样的方法,我们可以使用“过滤器2”得到第2张特征图片:

而得到的两个结果:

就相当于下面的灰度图中,第1个“卷积”层得到的结果(见下图)。

只不过,在灰度图中,我们设置了4个过滤器,所以得到了4张“特征图”。

而在彩色案例中,我们仅设置了2个过滤器,所以,只得到了2张“特征图”。

(点击图片,横屏查阅大图)

而后面所有的流程,“ReLU → 池化 → 像素值展开 → 全连接 → 输出结果”,彩色图片的处理与灰度图一样,所以,具体的细节可以参考上面学过的内容。

温馨提示:

① 经过“卷积”后,输出的特征图片,其深度等于使用的过滤器个数

例如,

② 推广到更一般的情况,无论是灰度图片,还是彩色图片,当我们构建的模型中,有多个“卷积”层时,都要遵循“彩色案例”中的步骤,即“在做‘卷积’处理时,如果上一层图片是多层,那么,本层过滤器在遍历完多层图片后,需要将结果值相加“。

总结

用图片可以更形象的表述

人类:

计算机:

在构建模型时,需要我们设置的超参数有:

★ 卷积层: 过滤器的大小(F)、滑动的步幅数(S),以及过滤器的个数(K)

如果你期望输出的图片,与输入的图片尺寸一致,你还可以在原始图片的外围补零,补零的圈数P=(F-1)/2

★ 池化层:过滤器的大小(F)

在算法运行时,计算机会自己学习的参数有:

★ 卷积层: 过滤器中的具体数值。

★ 全连接层: 神经元的参数 θ

当计算机算出最优参数后,下一次,在输入一张没有打过标签的图片时,算法就能自动对图片做出分类。

结束语

卷积神经网络(CNNs)能够提取图像的核心特征,并使用这些特征,来识别包含类似特征的图像,在“自动驾驶”、“人类识别”、“医疗图像诊断”等方面,都发挥着极大的作用。

CNNs非常强大,或许在本文中,为了尽可能将算法可视化,所做的一些简化处理并不完美,但是,仍然希望本文能够帮助到更多正在学习CNNs原理的同学们。

原文发布于微信公众号 - AI传送门(aiportal)

原文发表时间:2017-08-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SIGAI学习与实践平台

文本表示简介

文本分类是自然语言处理中研究最为广泛的任务之一,通过构建模型实现对文本内容进行自动分类,有很多应用场景,比如新闻文章主题分类,产品评论情感分类,检索中用户查询的...

902
来自专栏郭耀华‘s Blog

批标准化(Batch Norm)

BN作用: 加速收敛 控制过拟合,可以少用或不用Dropout和正则 降低网络对初始化权重不敏感 允许使用较大的学习率 一、如何加速收敛? 通过归一化输入值/隐...

3954
来自专栏人工智能

最新机器学习必备十大入门算法!都在这里了

原文来源:KDnuggets 作者:Reena Shaw 「雷克世界」编译:BaymaxZ ? 我们向初学者介绍十大机器学习(ML)算法,并附上数字和示例,方便...

1927
来自专栏数据科学与人工智能

【算法】word2vec与doc2vec模型

小编邀请您,先思考: 1 word2vec算法原理是什么? 2 word2vec与doc2vec有什么差异? 3 如何做word2vec和doc2vec? 深度...

4887
来自专栏机器学习实践二三事

再看CNN中的卷积

这两天在看CS231n的课程笔记,结合着原版英文和知乎上中文版翻译在看,确实Andrej Karpathy写的很棒,很多都是些实践经验不仅仅是理论知识. 我结合...

18910
来自专栏李智的专栏

斯坦福CS231n - CNN for Visual Recognition(7)-lecture6梯度检查、参数更新

  梯度检查是非常重要的一个环节,就是将解析梯度和数值计算梯度进行比较。数值计算梯度时,使用中心化公式

882
来自专栏生信小驿站

gbm算法

gbm是通用梯度回归模型(Generalized Boosted Regression Models)简称。GBDT(Gradient Boosting Dec...

960
来自专栏数据科学与人工智能

【数据挖掘】文本挖掘:语义分析的一些方法

语义分析,本文指运用各种机器学习方法,挖掘与学习文本、图片等的深层次概念。 1 文本基本处理 在讲文本语义分析之前,我们先说下文本基本处理,因为它构成了语义分析...

7735
来自专栏智能算法

亚像素边缘的直线及圆弧的基元分割

从20世纪70年代起就有不少专家提出了一些有效的亚像素边缘定位的方法,如插值法、灰度矩法和一些组合的算法等。本文在前辈的基础上描述一种图像亚像素边缘检测方法,...

2766
来自专栏机器之心

业界 | 苹果发文:全局语义信息能否改进神经语言模型?

在 iPhone 上输入文本、发掘用户可能感兴趣的新闻、查明用户遇到问题的答案,以及其他语言相关的任务都取决于稳健的自然语言处理(NLP)模型。词嵌入是一类 N...

792

扫码关注云+社区