前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >吊炸天的CNNs,这是我见过最详尽的图解!(下)

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

作者头像
AI传送门
发布2018-06-21 15:03:14
1.6K0
发布2018-06-21 15:03:14
举报
文章被收录于专栏:AI传送门AI传送门

导读:卷积神经网络(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原理的同学们。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI传送门 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档