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

卷积神经网络(一)

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

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

一、概述

卷积神经网络网络(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 条评论
登录 后参与评论

相关文章

来自专栏机器之心

教程 | 初学者如何学习机器学习中的L1和L2正则化

选自Medium 作者:Prashant Gupta 机器之心编译 参与:陈韵竹、刘晓坤 训练机器学习模型的要点之一是避免过拟合。如果发生过拟合,模型的精确度会...

33410
来自专栏码洞

人工稚能之sklearn分类

分类算法和聚类比较类似,都是将输入数据赋予一个标签类别。区别是分类算法的分类是预先确定的,有明确含义的。而聚类的标签是从输入数据本身的分布中提取出来的一种抽象的...

691
来自专栏编程

梯度下降法及其Python实现

梯度下降法及其Python实现 基本介绍 梯度下降法(gradient descent),又名最速下降法(steepest descent)是求解无约束最优化问...

28310
来自专栏机器学习算法原理与实践

梯度提升树(GBDT)原理小结

    在集成学习之Adaboost算法原理小结中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度...

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

卷积神经网络详解

注:看本文之前最好能构理解前馈圣经网络以及BP(后向传播)算法,可以看之前发的相关文章或者看知乎、简书、博客园等相关博客。 卷积神经网络(Convolution...

2768
来自专栏机器学习原理

深度学习——CNN(2)池化层怎么反向传播?为什么采用小批量梯度下降?学习率设置

4763
来自专栏深度学习与计算机视觉

理解梯度下降在机器学习模型优化中的应用

认识梯度下降算法 这篇博客的内容是为了介绍梯度下降算法在模型优化中的作用,也就是说,正常的顺序是我们要学习一个模型(确定模型参数),在优化这么未知模型的时候,使...

2368
来自专栏大数据挖掘DT机器学习

梯度下降法求解逻辑回归

梯度下降法(Gradient Descent)是优化问题中一种常用的手段,一般用于凸函数问题(或者可以转换为凸函数的问题)的求解,而逻辑回归问题就可以转换为一...

2875
来自专栏机器学习算法原理与实践

卷积神经网络(CNN)反向传播算法

    在卷积神经网络(CNN)前向传播算法中,我们对CNN的前向传播算法做了总结,基于CNN前向传播算法的基础,我们下面就对CNN的反向传播算法做一个总结。在...

1110
来自专栏机器学习算法原理与实践

交叉验证(Cross Validation)原理小结

    交叉验证是在机器学习建立模型和验证模型参数时常用的办法。交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用...

582

扫码关注云+社区