CNN基本模块(https://www.cnblogs.com/fydeblog/p/7450413.html)
CNN由输入和输出层以及多个隐藏层组成,隐藏层可分为卷积层,池化层、激活层和全连通层。
1.输入层
CNN的输入一般是二维向量,可以有高度,比如,RGB图像
2.卷积层
卷积层是CNN的核心,层的参数由一组可学习的滤波器(filter)或内核(kernels)组成,它们具有小的感受野,延伸到输入容积的整个深度。 在前馈期间,每个滤波器对输入进行卷积,计算滤波器和输入之间的点积,并产生该滤波器的二维激活图(输入一般二维向量,但可能有高度(即RGB))。 简单来说,卷积层是用来对输入层进行卷积,提取更高层次的特征。
- 在信号与系统中,输入对一个系统的响应是等于输入信号e(x)与系统函数h(x)进行卷积,h(x)可以看作一个滤波器,它会对输入信号进行筛选,选择和它类似的信号,其他则过滤掉。
- 我们还可以想想数字图像处理这门课,我们在提取图像的边缘特征时,用到的一个卷积核,名字叫sobel算子,它与图像进行卷积,就可以得到边缘,这个原因是有sobel算子与图像边缘的结构相似,所以才能提取出来,这个可能更容易理解卷积层的作用,但不同的是这里的卷积层参数未知,需要学习才能得到。
例子:
对图像和滤波矩阵进行逐个元素相乘再求和的操作就相当于将一个二维的函数移动到另一个二维函数的所有位置,这个操作就叫卷积或者相关。卷积和相关的差别是,卷积需要先对滤波矩阵进行180的翻转,但如果矩阵是对称的,那么两者就没有什么差别了。(https://blog.csdn.net/guotong1988/article/details/51821799)
(蓝框里的矩阵和红框滤波器对应相乘,再相加之后加入偏置1,得到-3,其中步长为2)
左边数据在变化,即每次滤波器都是针对某一部分数据窗口进行卷积,这就是所谓的CNN中的局部连接机制。与此同时,数据窗口滑动,但中间滤波器Filter w0的权重(即每个神经元连接数据窗口的的权重)是固定不变的,这个权重不变即所谓的CNN中的参数共享机制。
3. 池化层
池化层又称下采样,它的作用是减小数据处理量同时保留有用信息,它是怎么做到的呢?
答:通常池化层是每邻域四个像素中的最大值变为一个像素(这就是下一讲要降的max_pooling),为什么可以这么做呢?这是因为卷积已经提取出特征,相邻区域的特征是类似,近乎不变,这是池化只是选出最能表征特征的像素,缩减了数据量,同时保留了特征。池化层的作用可以描述为模糊图像,丢掉了一些不是那么重要的特征.
4.激活函数层
如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。激活函数不是真的要去激活什么。在神经网络中,激活函数的作用是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题。
以sigmoid为例(https://www.imooc.com/article/35821)
(https://blog.csdn.net/program_developer/article/details/78704224)
5.全连通层
这个层就是一个常规的神经网络,它的作用是对经过多次卷积层和多次池化层所得出来的高级特征进行全连接(全连接就是常规神经网络的性质),算出最后的预测值。
6.输出层
输出层就是对结果的预测值,一般会加一个softmax层。
CNN的特点
这里主要讨论CNN相比与传统的神经网络的不同之处,CNN主要有三大特色,分别是局部感知、权重共享和多卷积核。
1.局部感知
局部感知就是我们上面说的感受野,实际上就是卷积核和图像卷积的时候,每次卷积核所覆盖的像素只是一小部分,是局部特征,所以说是局部感知。CNN是一个从局部到整体的过程(局部到整体的实现是在全连通层),而传统的神经网络是整体的过程。
2.权重共享
传统的神经网络的参数量是非常巨大的,比如1000X1000像素的图片,映射到和自己相同的大小,需要(1000X1000)的平方,也就是10的12次方,参数量太大了,而CNN除全连接层外,卷积层的参数完全取决于滤波器的设置大小,比如10x10的滤波器,这样只有100个参数,当然滤波器的个数不止一个,也就是下面要说的多卷积核。但与传统的神经网络相比,参数量小,计算量小。整个图片共享一组滤波器的参数。
3.多卷积核
一种卷积核代表的是一种特征,为获得更多不同的特征集合,卷积层会有多个卷积核,生成不同的特征,这也是为什么卷积后的图片,每一个图片代表不同的特征。
实例(https://blog.csdn.net/happyer88/article/details/46762919)
L1层: 输入图像: 28X28
C2层: 卷积核大小:5X5 >输出特征图大小:24X24 (28-5+1)X(28-5+1)
卷积核数量:6个 > 输出特征图数量:6
S3层: 输入特征大小:24X24X6
输出特征图大小:12X12 (24\2)X(24\2)
C4层: 输入特征大小: 12X12X6
卷积核大小:5X5 > 输出特征图大小:8X8 (12-5+1)X(12-5+1)
卷积核数量:12个 > 输出特征图数量:12(卷积核数量决定输出特征图数量)
S5层: 输入特征大小:8X8X12
输出特征图大小:4X4 (8\2)X(8\2)
FC层: 输入节点:4X4X12=192
权重 W=10X192
输出层: 10X1