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

【摘要】本文详细介绍了卷积神经网络的运行原理,特别是池化、全连接等过程。为了使大家更快、更轻松的入门,文章没有晦涩难懂的术语和公式,全部采用“图形”的方式来描述。文末的延展阅读部分,更加入了彩色图片卷积原理的手工演算过程,由浅入深,层层推进,希望你读得畅快!


上一节课,我们已经对输入图片做了“卷积”处理,将图片中所暗含的特征提取出来,未能听课的同学,可以查阅《吊炸天的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的所有流程,整合起来,即:

(点击图片,查看大图)


你可能感兴趣的:(AI)