卷积神经网络-卷积层

卷积神经网络——卷积层

    • CNN怎么进行识别
    • 什么是卷积
    • 图像上的卷积
    • GIF动态卷积图
    • 权值共享

[1] https://blog.csdn.net/v_JULY_v/article/details/51812459
[2] https://blog.csdn.net/yjl9122/article/details/70198357
该博客主要是对网上知识点的学习和整理,方便日后复习。侵删。
卷积神经网络(CNN)一般由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT(输入层)-CONV(卷积层)-RELU(激活函数)-POOL(池化层)-FC(全连接层)

CNN怎么进行识别

当我们给定一个“X”的图案,计算机怎么识别这个图案就是“X”呢?一个可能的办法就是计算机存储一张标准的“X”图案,然后把需要识别的未知图案跟标准的“X”图案进行对比,如果二者一致,则判断未知图案是一个“X”图案。
卷积神经网络-卷积层_第1张图片
未知图案的局部和标准X图案的局部一个一个比对时的计算过程,便是卷积。卷积计算结果为1表示匹配,否则不匹配。

什么是卷积

对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的卷积操作,也就是卷积神经网络的名字来源。
非严格意义来讲,下图中的红框框起来的部分便可以理解为一个滤波器,即带着一组固定权重的神经元。多个滤波器迭加变成了卷积层。
卷积神经网络-卷积层_第2张图片
举个例子,下图中左边部分是原始输入数据,中间部分是滤波器filter,右边是输出的新的二维数据。
卷积神经网络-卷积层_第3张图片
中间滤波器filter与数据窗口做内积,计算过程为:
4x0 + 0x0 + 0x0 + 0x0 + 0x1 + 0x1 + 0x0 + 0x1 + (-4)x2 = -8

也就是说:卷积层的功能就是用来进行特征提取

图像上的卷积

在下图对应的计算过程中,输入是一定区域大小(width*height)的数据,和滤波器filter(带着一组固定权重的神经元)做内积后等到新的二维数据。
具体来说,左边是图像输入,中间部分就是滤波器filter(带着一组固定权重的神经元),不同的滤波器filter会得到不同的输出数据,比如颜色深浅、轮廓。相当于如果想提取图像的不同特征,则用不同的滤波器filter,提取想要的关于图像的特定信息:颜色深浅或轮廓。
卷积神经网络-卷积层_第4张图片

GIF动态卷积图

在CNN中,滤波器filter(带着一组固定权重的神经元)对局部输入数据进行卷积计算。每计算完一个数据窗口内的局部数据后,数据窗口不断平移滑动,直到计算完所有数据。这个过程中,有这么几个参数:
  a. 深度depth:神经元个数,决定输出的depth厚度。同时代表滤波器个数。
  b. 步长stride:决定滑动多少步可以到边缘。
  c. 填充值zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除。

下面是一张卷积动图,更清晰地展示卷积地过程。
卷积神经网络-卷积层_第5张图片
可以看到:

  • 两个神经元,即depth=2,意味着有两个滤波器。
  • 数据窗口每次移动两个步长取3*3的局部数据,即stride=2。
  • zero-padding=1。

然后分别以两个滤波器filter为轴滑动数组进行卷积计算,得到两组不同的结果。

结合上文的内容,就可以理解这个动图了:

  • 左边是输入(7x7x3中,7x7代表图像的像素/长宽,3代表R、G、B 三个颜色通道)
  • 中间部分是两个不同的滤波器Filter w0、Filter w1
  • 最右边则是两个不同的输出

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

值得一提的是:

  • 左边数据在变化,每次滤波器都是针对某一局部的数据窗口进行卷积,这就是所谓的CNN中的局部感知机制。
    打个比方,滤波器就像一双眼睛,人类视角有限,一眼望去,只能看到这世界的局部。如果一眼就看到全世界,你会累死,而且一下子接受全世界所有信息,你大脑接收不过来。当然,即便是看局部,针对局部里的信息人类双眼也是有偏重、偏好的。比如看美女,对脸、胸、腿是重点关注,所以这3个输入的权重相对较大。
  • 与此同时,数据窗口滑动,导致输入在变化,但中间滤波器Filter w0的权重(即每个神经元连接数据窗口的权重)是固定不变的,这个权重不变即所谓的CNN中的参数(权重)共享机制。
    再打个比方,某人环游全世界,所看到的信息在变,但采集信息的双眼不变。不同人的双眼 看同一个局部信息 所感受到的不同,即一千个读者有一千个哈姆雷特,所以不同的滤波器 就像不同的双眼,不同的人有着不同的反馈结果。

举一个例子讲解上面的动图:
卷积神经网络-卷积层_第6张图片
上图中的输出结果1具体是怎么计算得到的呢?其实,类似wx + b,w对应滤波器Filter w0,x对应不同的数据窗口,b对应Bias b0,相当于滤波器Filter w0与一个个数据窗口相乘再求和后,最后加上Bias b0得到输出结果1:
R通道(卷积)+G通道(卷积)+B通道(卷积)+Bias

1x 0 + 1x0 + (-1)x0 + (-1)x0 + 0x0 + 1x1 + (-1)x0 + -1x0 + 0x1
+
(-1)x0 + 0x0 + -1x0 + 0x0 + 0x1 +( -1)x1 + 1x0 + (-1)x0 + 0x2
+
0x0 + 1x0 + 0x0 + 1x0 + 0x2 + 1x0 + 0x0 + (-1)x0 + 1x0
+
1
= 1

权值共享

卷积神经网络-卷积层_第7张图片
如没有这个原则,则特征图由10个32x32x1的特征图组成,即每个特征图上有1024个神经元,每个神经元对应输入图像上一块5x5x3的区域,即一个神经元和输入图像的这块区域有75个连接,即75个权值参数,则共有75x1024x10=768000个权值参数,这是非常复杂的,因此卷积神经网络引入“权值”共享原则,即一个特征图上每个神经元对应的75个权值参数被每个神经元共享,这样则只需75*10=750个权值参数,而每个特征图的阈值也共享,即需要10个阈值,则总共需要750+10=760个参数。

所谓的权值共享就是说,给一张输入图片,用一个filter去扫这张图,filter里面的数就叫权重,这张图每个位置就是被同样的filter扫的,所以权重是一样的,也就是共享。

  • 对于多通道图像做1*1卷积,其实就是将输入图像的每个通道乘以系数后加在一起,即相当于将原图中本来各个独立的通道“联通”在了一起;
  • 权值共享时,只是在每一个filter上的每一个channel中是共享的;

你可能感兴趣的:(深度学习)