CNN卷积神经网络

来源:互联网 发布:重庆网络审批平台 编辑:程序博客网 时间:2024/06/05 20:34


上图中CNN要做的事情是:给定一张图片,是车还是马未知,是什么车也未知,现在需要模型判断这张图片里具体是一个什么东西,总之输出一个结果:如果是车 那是什么车

所以

最左边是数据输入层,对数据做一些处理,比如去均值(把输入数据各个维度都中心化为0,避免数据过多偏差,影响训练效果)、归一化(把所有的数据都归一到同样的范围)、PCA/白化等等。CNN只对训练集做“去均值”这一步。

中间是

CONV:卷积计算层,线性乘积 求和。RELU:激励层,上文2.2节中有提到:ReLU是激活函数的一种。POOL:池化层,简言之,即取区域平均或最大。

最右边是

FC:全连接层

这几个部分中,卷积计算层是CNN的核心,下文将重点阐述。


4 CNN之卷积计算层

4.1 什么是卷积

首先,我们来了解下什么是卷积操作。

对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。

比如下图中,图中左边部分是原始输入数据,图中中间部分是滤波器filter,图中右边是输出的新的二维数据。



分解下上图

\ 对应位置上是数字先乘后相加\ =\

中间滤波器filter与数据窗口做内积,其具体计算过程则是:4*0 + 0*0 + 0*0 + 0*0 + 0*1 + 0*1 + 0*0 + 0*1 + -4*2 = -8

4.2 图像上的卷积

在计算过程中,输入是一定区域大小(width*height)的数据,和滤波器filter(一组固定的权重)做内积后等到新的二维数据。

对于下图中,左边是图像输入,中间部分就是滤波器filter(一组固定的权重),不同的滤波器filter会得到不同的输出数据,比如轮廓、颜色深浅。相当于如果想提取图像的不同特征,则用不同的滤波器filter,提取想要的关于图像的特定信息:轮廓或颜色深浅。

如下图所示

\

4.3 cs231d的动态卷积图

如果初看此图,可能不一定能立马理解啥意思,但结合上文的内容后,理解这个动图已经不是很困难的事情。

下述动图中,左边是输入,中间部分是两个不同的滤波器Filter w0、Filter w1,最右边则是两个不同的输出。


随着左边数据窗口的滑动,滤波器Filter w0对不同的局部数据进行卷积计算。

值得一提的是:

左边数据在变化,即每次滤波器都是针对某一部分数据窗口进行卷积,这就是所谓的CNN中的局部连接机制。
与此同时,数据窗口滑动,但中间滤波器Filter w0的权重(即每个神经元连接数据窗口的的权重)是固定不变的,这个权重不变即所谓的CNN中的参数共享机制。

我第一次看到上面这个动态图的时候,只觉得很炫,另外就是据说“相乘后想加”,但到底具体是个怎么相乘后想加的过程则无法一眼看出,网上也没有一目了然的计算过程。本文来细究下。

首先,我们来分解下上述动图,如下图

\

接着,我们细究下上图的具体计算过程。即上图中的输出结果-1具体是怎么计算得到的呢?其实,类似wx + b,w对应滤波器Filter w0,x对应不同的数据窗口,b对应Bias b0,相当于滤波器Filter w0与一个个数据窗口相乘再求和后,最后加上Bias b0得到输出结果-1,如下过程所示:

 

-1* 0 + 0*0 + 1*0

+

0*0 + 1*0 + 0*1

+

0*0 + -1*2 + -1*0

 

+

 

0*0 + -1*0 + -1*0

+

-1*0 + 1*0 + -1*0

+

0*0 + -1*0 + 1*1

 

+0*0 + -1*0 + 1*0

+

0*0 + 0*1 + -1*0

+

0*0 + 1*0 + -1*1
+

1

=

-1

 

然后滤波器Filter w0固定不变,数据窗口向右移动2步,继续做内积计算,得到4的输出结果

\

最后,换做另外一个不同的滤波器Filter w1、不同的偏置Bias b1,再跟图中最左边的数据窗口做卷积,可得到另外一个不同的输出。

5 CNN之激励层与池化层

5.1 ReLU激励层

2.2节介绍了激活函数sigmoid,但实际梯度下降中,容易饱和和终止梯度传递,且没有0中心化。咋办呢,可以尝试另外一个激活函数:ReLU,其图形表示如下

\

ReLU的优点是收敛快,求梯度简单,但同时也比较脆弱。类似于C效率高,但里面的指针容易出错。对于有经验、且谨慎的人来说,还是值得首先尝试。

5.2 池化pool层

前头说了,池化,简言之,即取区域平均或最大,如下图所示

\

上图所展示的是取区域最大,即上图左边部分中 左上角4x4的矩阵中6最大,右上角4x4的矩阵中8最大,左下角4x4的矩阵中3最大,右下角4x4的矩阵中4最大,所以得到上图右边部分的结果:6 8 3



摘自 https://www.2cto.com/kf/201607/522441.html   "CNN笔记:通俗理解卷积神经网络"