卷积神经网络(一)——卷积、边缘化与池化层

卷积神经网络(一)

——卷积、边缘化与池化层

(原创内容,转载请注明来源,谢谢)

一、概述

卷积神经网络网络(Convolutional Neural Network,CNN),是一种神经网络的模型,在计算机视觉(computer vision,CV)领域运用广泛。

计算机视觉,旨在完成图像分类、物体识别、图像合成创作等工作,主要难度在于输入的特征值非常多。

例如对于一个64*64像素的图片,就一共要处理12288个特征,而更大的图片则需要处理的特征值更多,这就导致使用原来机器学习的模型解决问题时,速度会很慢。而CNN正好可以解决这个问题。

二、边缘检测

边缘检测(edge detection),即检测物体在图片中的边界,这是cv的基础。边缘检测的方法,是通过构建过滤器,令图片的rgb值和过滤器进行卷积,得到的结果即检测出的结果。

1、卷积计算

这里先考虑黑白图片,则没有rgb三个值,只有1个值,表示这个点的亮度。假定滤波器是一个3*3的矩阵,值如下图所示,原图的灰度值矩阵为下图左边那副图所示,则进行卷积计算:

卷积计算的方式如下:

设原图为矩阵A,是一个6*6的矩阵;滤波器为矩阵B,是一个3*3的矩阵。

1)先把B放到矩阵A上,并且A的[1,1]元素与B的[1,1]元素对其,则重叠出3*3的矩阵。

2)再把重叠的位置,对应的元素相乘,得到1个3*3的矩阵,设为C。

3)把C的所有元素相加,得到卷积结果矩阵[1,1]位置的值。

4)这里采用的步长是1。则接下来把B的[1,1]与A的[1,2]对齐,在进行上面步骤的计算,得到结果矩阵[1,2]位置的值。当一行计算完成,则把B的[1,1]与A的[2,1]对齐,进行计算,以此类推。

在Python中,有conv_forward函数可以实现矩阵的卷积,TensorFlow中是tf.nn.conv2d函数。

2、垂直边缘检测

上述的计算,即实现了垂直物体的边缘检测,下图的例子更为直观:

可以看到,经过这种滤波器的卷积,可以突出图片的垂直形状的灰度值,这利于后续的计算。

3、水平边缘检测

类似的,还有水平边缘检测的滤波器,如下图所示:

4、其他边缘检测滤波器

除了用上面的滤波器,还可以使用其他的值来实现边缘检测,常用的有sobel滤波器和scharr滤波器,下图展示的都是垂直滤波器。如果需要水平滤波器,只需要把下面的矩阵,对应元素放置到旋转90°的位置即可。

三、Padding

1、现有问题

上面的边缘检测,可以看到进行卷积的时候,6*6的矩阵和3*3的矩阵,卷积的结果变成4*4,这样一来图片变小了,多进行几次卷积,会导致图片消失;另外还有一个问题,在于图片边缘的点,参与卷积的次数较少,这样会损失图片边缘的信息量。

2、padding介绍

为了解决这个问题,可以使用padding的方式。Padding=1,表示在原图的最外层,加上全部都是0的一层的值,把6*6的矩阵变成8*8的矩阵,此时在进行卷积,可以发现最终得到的还是6*6的矩阵。

3、padding公式

考虑Padding后,矩阵卷积的结果矩阵的维度的通用公式:n+2p-f+1,其中n表示原图是n*n的图片,f表示滤波器是f*f的矩阵,p即padding,如下图所示:

4、p的选择

P通常有两种选择方式:

1)valid卷积,即令p=0。

2)same卷积,即保证输出矩阵大小和输入矩阵一致,此时p=(f-1)/2

从这里也可以看出,滤波器的维度f通常需要是奇数,这样保证可以用same卷积,且有中心像素点,便于指出滤波器的位置。

四、步长

步长,即计算卷积过程中,每次移动过滤器的幅度。这里幅度既代表了水平移动的幅度,也代表了垂直移动的幅度。如下图所示:

综合考虑步长、padding后,计算两个矩阵卷积后的输出矩阵的维度大小的公式如下:

五、立体矩阵卷积

上面是假是定图片是黑白的,当考虑到rgb时,则变成3维的,这里要对应的修改滤波器的维度。

假设图片是6*6*3的矩阵,这里的6*6*3称为高*宽*通道(channels),需要注意的是,滤波器的channels值和图片的channels值必须一样,才能进行卷积。

则6*6*3的矩阵与3*3*3的矩阵,卷积的结果是4*4*1。

为了得到rgb的特征,可以分别用不同的滤波器与图片进行卷积,得到不同的结果。

因此引入了多重滤波的概念,即原图同时与两个滤波器进行卷积,会得到两个结果矩阵,这里把两个结果矩阵进行重叠,形成的立体矩阵,即为多重滤波的结果。

六、卷积神经网络

1、单层

考虑到神经网络的第l层,则对应的常用的参数符号如下图所示:

这里滤波器即为待计算的参数。

2、多层

一幅图片,要进行处理,通常需要经过若干次卷积,例如下图所示:

这里有个常用的卷积方法:通常随着卷积层数的增加,涉及到的滤波器个数增加,但是滤波器本身的尺寸不变。所以通常卷积多层后,图片会变得细长型,如上图所示。

七、池化层

除了卷积,cnn还需要池化层,便于提取卷积的结果。

池化层,也是一种矩阵的计算,如下图所示:

一个2步长、宽度2的最大值池化层,即取出矩阵每个2*2子矩阵的元素最大值。下图右边那个是结果,值为9 2 6 3

对于立体矩阵,则每一层的进行池化的操作。

除了最大值池化,还有平均值池化。但是通常最大值池化更长用。

需要说明的是,池化层只有滤波器尺寸f和步长s两个超参数,这两个参数是不需要经过fp、bp进行学习的,是初始就设定好的参数。矩阵经过池化层后的维度计算,和之前卷积的维度计算公式一致。

常用的超参数设定,f=2、s=2、p=0。

八、总结

1、计算过程

图片经过cnn后的计算,如下图所示:

通常,会经过若干的卷积层+池化层(经常把卷积层和池化层共称为1层)的操作,再把矩阵按顺序纵向排列成n*1的矩阵,接下来进行若干次全连接层的计算(全连接层即原来的神经网络的计算,每个元素都参与计算),最终再经过一层softmax计算,得到结果矩阵。

2、优点

卷积的计算,减少参数的参与,例如对于32*32*3的图片,要得到28*28*6的矩阵,普通的神经网络会经过约3072*4704≈1400万次的计算,而卷积只需要经过(5*5+1)*6=156次计算。

另外,卷积有三大特点:

1)参数共享:特定滤波器在图片任一小块都适用,可以共享特征。

2)稀疏连接:每一小部分的输出值,与图片其他部分无关。

3)平移不变:图片平移,由于和原图相似,卷积计算的结果也是相似的。

3、过程总结

如下图所示:

——written by linhxx 2018.03.06

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2018-03-06

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏灯塔大数据

原创译文|从神经网络说起:深度学习初学者不可不知的25个术语和概念(下)

人工智能,深度学习和机器学习,不论你现在是否能够理解这些概念,你都应该学习。否则三年内,你就会像灭绝的恐龙一样被社会淘汰。 ——马克·库班(NBA小牛队老板,...

4217
来自专栏Pytorch实践

深度学习之句子表达

在之前的文章里,我们介绍了词语表达的训练,使用skip-gram模型训练word2vec。既然词语能表达,那句子也同样能被分布式的向量表示。这里主要介绍几种句子...

40211
来自专栏机器学习算法与Python学习

干货 | 受限玻尔兹曼机基础教程

定义与结构 受限玻尔兹曼机(RBM)由Geoff Hinton发明,是一种用于降维、分类、回归、协同过滤、特征学习和主题建模的算法。 下载pdf,请后台回复关键...

46713
来自专栏人工智能LeadAI

监督学习中各算法优缺点及应用场景概览

记录一波监督学习算法的应用场景和优缺点。 高斯朴素贝叶斯 场景:该模型常用于性别分类(https://en.wikipedia.org/wiki/Naive_B...

4076
来自专栏专知

概率论之概念解析:极大似然估计

【导读】本文是数据科学家Jonny Brooks-Bartlett概率论基础概念系列博客中的“极大似然估计”一章,主要讲解了极大似然估计的若干概念。分别介绍了参...

2847
来自专栏MyBlog

时序数据异常检测(2)指数平滑方法

上文我们使用LOF-ICAD方法实现了时序数据的异常检测, 这次我们介绍一种更为常见的方法-------指数平滑.

471
来自专栏量子位

一文看懂各种神经网络优化算法:从梯度下降到Adam方法

王小新 编译自 Medium 量子位 出品 | 公众号 QbitAI 在调整模型更新权重和偏差参数的方式时,你是否考虑过哪种优化算法能使模型产生更好且更快的效果...

4417
来自专栏机器学习算法与理论

《白话深度学习与Tensorflow》学习笔记(7)RBM限制玻尔兹曼机

不受限的:在实际工程中用处不大,所以目前只需要研究受限玻尔兹曼机。 一层是可视化层,一般来说是输入层,另一层是隐含层,也就是我们一般指的特征提取层。 RBM是可...

34411
来自专栏书山有路勤为径

深度卷积网络:实例探究

介绍几种经典的卷积神经网络结构,分别是LeNet、AlexNet、VGGNet。 LeNet-5 LeNet-5主要是针对灰度设计的,所以其输入较小,为32...

674
来自专栏包子铺里聊IT

经典智能算法快速入门之神经网络——技术篇

在上一篇文章里,小编给大家概括地介绍了下神经网络的历史和应用。这次,小编要给大家细细讲解下神经网络的组成,和几种常见神经网络的模型及其适用领域。 基本组成 顾名...

3469

扫描关注云+社区