【机器学习算法】神经网络与深度学习-8 1.1.1 CNN卷积神经网络(Convolutional neural Networks )详解

目录

卷积神经网络(convolutional neural Networks CNN )

为什么需要卷积神经网络:

卷积神经网络CNN的前半部分的目的:

卷积层convolution,取得区域特征,和区域信息

池化层:Max pooling,进行取样,缩小图片。

卷积层神经网络

池化层神经网络

总结:


我的主页:晴天qt01的博客_CSDN博客-数据分析师领域博主

目前进度:第四部分【机器学习算法】

卷积神经网络(convolutional neural Networks CNN )

为什么需要卷积神经网络:

上次讲了DNN。它还有其他一些配合的total loss的方法,Learning rate的参数修正方法。

但是我们有了DNN是不是就可以完全解决一些复杂的问题呢?其实不然,DNN也有它的缺点,现在的图片随便都是1000*1000的光是输入层就是100万,这个倒是没关系,但是隐藏层的数量也不少,然后再把他们乘起来,他的参数量非常大。

我们要识别一个图像是鸟还是猫,我们其实不是看整张图像的信息,我们会去看图像里有没有鸟嘴,猫它有胡须,我们是根据区域信息来判断它是一只鸟还是一只猫。我们先看区域特征,再看全域特征。

而dnn是根据全域的信息来判断分析,这个第一个缺点参数量大,第二个效能比较差,比较不好。

CNN神经网络,是根据图像识别设计出来的,来改善DNN神经网络的一些缺点产生的,(后来也有用到其他方面)

如果你是一个全连接的神经网络,而且还是深层的神经网络,那么到最后结果的输出,会出现非常大的参数量。

如何才能突出区域的信息,这是CNN研究的重点。

一些特征pattern,我们能不能用一个神经元来侦查神经元是否有鸟嘴。不用看整个图像再判断图像里有没有鸟,我们只有看其中的一个区域有没有鸟嘴,就可以判断是不是鸟。

全连接是整个图像,现在就不要全连接,只要区域。

但是鸟嘴可能出现的位置各不相同

如果神经元分别负责各个地方查看有没有鸟嘴,那就很冗余。其实做的事都是一样的事。参数量说不定更多。

CNN的目的就是做同样的事情,只用一个神经元来判断是否有鸟嘴。这是CNN的第一个概念,为了节省神经元的数量,一样的事情,只用一个神经元处理。

CNN就是为了降低参数量,

它将一个清晰的图片进行一个取样。缩小。1000*1000——》500*500.取样(subsampling)一张很大的图片,我们会因为缩小而不能判断它是否是鸟吗,其实一般不会,subsampling是可以保留信息的,还是可以辨识出,除非缩小的太小。这样就可以有比较少的参数,我们不需要收集太多参数。

我们如何把这样的概念使用到实际情况,套用到神经网络里呢?

卷积神经网络CNN流程如下:

降低参数的方法是利用convolution卷积来套取区域信息,然后Max Pooling(常用)进行缩小,可以重复很多次,然后又参数一个新的图像,然后去截取他们的参数。这是的参数就是一个越来越具体化的参数。例如第一次卷积是找鸟图里的鸟嘴,第二次就是把鸟嘴和眼睛,皮毛组成头部的信息。信息会越来越明确。前面的这里两个步骤的重复其实就是在做特征的截取。

像我们做BP神经网络都是会先处理数据,把这些数据有用的信息截取出来,不用的全部信息而是使用已经判断的信息。

可是我们做图像识别的时候,我们用人去截取特征,那图像识别会变的非常简单,准确度会非常高。但是机器不能和人一样看羽毛,鸟嘴,只能看每个点的颜色,让我们去看点的颜色我们也看不出来,机器不像人一样,有视觉功能。所以它进行要透过卷积池化的过程,来截取特征,然后把它摊平放入神经网络。比如我们现在有1024*1024的图表,那我们就要摊平成100万的神经元。所以CNN本质上就是进行convolution和max pooling然后进行DNN判断。

DNN是CNN的后半部分。所以现在CNN我们只需要考虑前面两个部分。

卷积神经网络CNN的前半部分的目的:

区域特征,它实际运用的图像是原图的一部分。

区域信息,它会出现在图像的不同位置。神经元去检查的时候,用的是同一个神经元去检查。

Subsampling 取样:也叫池化,一般使用max pooling缩小变量,并且保证不会影响输出。

卷积层convolution,取得区域特征,和区域信息

怎么利用卷积convolution来取得它的区域特征,和区域信息呢:

首先我们要说明我们希望取得的特征Filter。(Matrix矩阵)。比如右上角的矩阵,就是需要截取斜线的特征filter,右下角就是希望截取直线的特征。可以有很多特征filter,大小也可以指定。

我们准备指定的大小是3*3的,也就是我们需要3*3的信息。

那我们如何把特征在图片的信息截取出来呢?方法是通过对二者进行累乘,每一个位置对于相乘,得到结果,然后向后一位再进行累乘。当然也可以向后两位,三位。区域信息一般不会因为这么小的变化出问题。

看上图可以发现第一个矩阵和特征矩阵累乘数值为3,第二个累乘结果为-1。

由左往右,由上往下。如果数值是3,那就说明有斜线的信息。

我们可以发现左上角有斜线信息,左下角也有斜线信息。也就是说特征会出现在图像的不同位置。我们考虑的是区域特征。

第一个特征找完,我们要找第二个特征,因为我们判断不是只有一个特征,而是具有多个特征。所以我们用相同的处理,把区域特征矩阵与图形相乘,乘积出来的结果被我们叫做特征图。

我们会发现,原图像大小是6*6,但是特征图会比原来的小,因为特征图也是有大小的。如果再做一次卷积,它还会比原来得到更小。所以卷积可以重复做好几次。卷积——池化——卷积——池化,就会变的越来越小。

有人觉得这样会有消息的流失。如果希望卷积结果与原来一样大,就要进行zero padding的动作补0的动作。每次我们第一个数值都在filter的最中间。如果filter更大,补0也要更大。然后再把原图消息与filter做相乘的动作。原来的图像是6*6卷积的结果还是6*6,就不会产生图像越来越小的情况。

但是如果是彩色图片。我们会把红色,绿色,蓝色的地方抽取出来,分为3个图,filter123就在这3张图中各做一次。我们rgb之后就会有3个特征图。

彩色图片也就是做多次的问题。

有一点需要说明一下,卷积神经网络中特征filter的选定值,这边的filter不是人去定的,人只需要定几个filter。机器会自动把特征filter学习出来。

池化层:Max pooling,进行取样,缩小图片。

如何利用max池化pooling缩小图片,进行取样。

我们把图片分为4块,如果最大值是3(对角线累加的值)就说明有出现这个特征。我们往往都是取最大值因为最大值往往能表现出是否出现这个特征。平均值之类的就不行。

左下角的特征图,我们就可以把他们的最大值写出来,3031,那么有只有4个综合的特征,达到降低我们的参数量。

右下角的特征图也是一样的。我们取最大值,-1,1,0,3

最终取特征结果如下:

这个就是我们的过滤器,学术是说代表一个通道,一个通道就代表一个特征,要取多少特征就是人为确定的,也就是我们要从图片中截取出多少个特征出来。不过这个特征是可以自动学习出来的。

这样我们就可以得到一张带有特征,而且比较小的新图片。

不仅如此,我们可以在新的图片上再产生新的图像。这就是我们CNN的过程。然后我们在将得到的图片进行一个摊平的动作,当做我们DNN的输入神经元。

这个的效果肯定是比较好的,因为DNN是把整个图片都当做它的神经元然后去跑整个神经网络。考虑整体信息不考虑区域信息。

CNN就是通过降维,考虑区域信息。来吧我们的特征输入,特征和特征之间的关系可以考虑整体的状况,所以它的效果一般都比不做卷积的DNN效果好很多。

卷积神经网络CNN我们其实可以把它当做DNN多做了一步图像的数字预处理,以及做一些降维的操作。

前置步骤的数据预处理(卷积和池化)是如何进行:

首先我们针对convolution,它其实就是在做矩阵对应位置的相乘然后累加。

这个是不是和我们之前神经元的组合函数有点相像,所以其实卷积convolution就是在做神经元的组合函数convolution部分。把它相对应的位置进行相乘。神经元就是原图片的矩阵。Filter这个部分,你可以把它当成神经元上面的权重(所以我们才说权重是机器学习来的,并且由我们确定几个特征)。Convolution进行组合函数之后,不需要经过激活函数,所以我们会忽略非线性的激活函数。把convolution的结果直接输出,也就是激活函数就是它本身(线性函数)。

卷积层神经网络

我们来仔细看下CNN卷积部分的神经网络:

权重filter其实就是神经键。我们可以发现我们神经元上并不是全连接,比如我们现在输入的权重值是3*3的,那么它就只会连接我们原图上的9个部分。它不是一个完全连接,参数量比较少。

然后我们考虑卷积的第二个特征。也是只会连接原图上的9个部分。

但是比较特别的地方是,第一个特征和第二个特征都会各自有9个神经元,一共16个神经元,但是它们的权重是完全相同的,因为他们是同一个filter。所以这16个神经元是统一更新的。所以它的参数量就会少。虽然它是16个神经元但是你可以把它当成一个神经元。因为权重值固定。弄16是因为要方便神经网络的运算。神经网络不是神经元越多参数就越多。要看它真正要调整的部分,Shared weighs

池化层神经网络

Max poling的神经网络设计就很简单了

它会连接其中的4个特征值,判断谁比较大。取最大值的运算,本质上是没有参数,不需要学习。需要学习的只有filter这个权重值。

总结:

卷积层(convolution layer)

进行特征的提取(降低参数量)

池化层(pooling layer)

特征聚合降维。(emm字面意义的降维,上面卷积层才是真正层面的降维)

全连接层(Fully-connected layer)

把局部特征装换为全局特征(DNN)

所以其实卷积神经网络就是比DNN多做了两步,卷积层和池化层。明天我们说明一下深度学习里面的递归神经网络Recurrent Neual Networks,RNN,我们其实神经网络到目前为止神经网络都是从左往右,或者从下往上。只能往前喂,不能back回来,RNN就可以吧权重等值进行一个反向传递,为什么要反向back回来呢?我们下次在仔细说明

猜你喜欢

转载自blog.csdn.net/qq1021091799qq/article/details/126025487