是一种以卷积计算为核心的前馈运算神经网络模型,区别于低隐层全连接神经网络模拟轴突树突神经节点,卷积网络类似大脑识别物体的感受野,对特征进行从低维到高维的逐层抽象提取,学习到从边缘、方向、纹理低层特征到高层语义(物体、句子)的特征。
CNN快速发展,得益于LeNet-5、Alexnet(8层)、ZFNet、VGGNet(19层)、GoogleNet(24层)、ResNet等不同结构的设计出现。
主要设计思路:
卷积计算:卷积核在图像上按照步长移动,卷积核覆盖的区域内的每个通道图像数据和卷积核对应位置数值相乘求和。参考博客:yjl9122 博客2
卷积的作用就是通过卷积核(深度一般和输入图像相同)作用于图像局部区域获得图像的局部信息,增强提取特征(就是核里的数值和图像数值乘积求和作为输出),类似图像处理中的滤波器,输出的新图像称为feature map特征图。
上图就是两个卷积核,w1和w2,每个卷积核的深度(通道)为4,下一层输出就是两层。
超参数:
卷积核(卷积参数,convolution kernel或convolution filter)是一个矩阵,覆盖在图像上边移动边计算。深度不定。
卷积步长(stride):核在输入图像上的移动距离。
权重(weight):需要学习的部分, 就是学习到的核参数
权值共享(weight sharing):卷积核在移动过程中是不变的
偏置项(bias term):运算偏置,卷积核求积求和后加个常数,增加非线性。
卷积核作用:
整体边缘滤波器(Ke)、横向边缘滤波器(Kh)、纵向边缘滤波器(Kv)不同核值可以达到提取图像像素显著差异区域,消除差异小的区域,达到检测整体、纵向、横向边缘信息。Kh,Kv 一般也称为sobel滤波器。
池化操作类似特征的下采样(down-sampling),模仿人对视觉特征的降维抽象,池化操作的输入就是卷积输出的feature map,
提取高级特征。
就是减低卷积输出的特征向量,对池化核区域内的数据有目的选择。
操作运算类似卷积过程,只是不需要学习参数。只需要指明池化类型、池化核大小、池化步长这些超参数就可以,也决定了输出数据的大小维度。
模拟生物学中神经元的特性,输入信号到达一个阈值之后才会产生兴奋向下传递,又称非线性映射层(no=linearlity-mapping),增加网络表达非线性的能力。
在网络里对(权重 * 节点参数 * + 偏差 )的运算结果进行激活处理。抛掉一部分达不到阈值的输出。
sigmod函数(logistic):
输入无论多大多小输出都会被压缩到【0,1】之间。
由它的梯度(导数)函数图像知道,是一个尖峰型,尖峰两边很远的变量导数为0.在误差反向传播时导数处于这部分的误差很难传到钱层,导致参数无法更新,网络无法训练,引发饱和效应(staturation effect)。
ReLU函数(最常用):
准确说是Flatten层,将卷积层和池化层操作运算得到的抽象特征映射为一个高维向量(一维),然后用这个向量通过全连接层和分类输出拟合理想的函数,实现学习特征最后目标。方便计算概率和分类预测的输出。
这里要注意的是:随着向后运算的过程,每个卷积核的深度是变化的,如第三层feature_map是6 * 14 * 14,就是每单个卷积核深度为6,进行卷积运算求和加偏置等之后输出为1层feature_map,所以理论上是要有 16个(5 * 5 * 6)的卷积核。实际因为不是全连接,所以不需要那么多卷积核,可以看下文。
这里一个卷积核可以理解为深度为6,就是一个卷积核包含六个同样尺寸的卷积模板,因为输入是单层的,所以只进行了一次和卷积核的运算。
这里运算更看重卷积模板运算后的权和偏置,不在意卷积的时候每个模板不同位置的参数。
C3里卷积核与S2的特征图是部分连接的,每个卷积核可以看做由不同数量的卷积模板组成的,如下图,前面6次是3个模板作为一个卷积核,中间9个是5个模板作为一次卷积核,最后一次是与S2全连接,6个模板作为一个卷积核。
输入:S2 输出的6个池化特征图的组合,即与S2部分连接
卷积核大小:5 * 5 (步长 1)
卷积核种类:16 (决定输出特征也是16层)
输出2次卷积运算后的特征:10 * 10 (14-5+1) 对S2 输出的池化特征图进行组合,(6 + 9 +1)共16层输出。
训练参数(以6+9+1=16为例):
16层的C3输出特征图的前6种,是以S2里3个子特征图作为输入运算出来的。一个卷积核是含3个卷积模板。
C3输出的中间9个特征图,是以S2里的4个特征子图为输入运算出来的,一个卷积核包含4个卷积模板。
C3输出的最后1个特征图,以S2里的全部作为输入,一个卷积核包含6个卷积模板。
C3的总训练参数:6 *(3 * 5 * 5 + 1)+ 9 *(4 * 5 * 5 + 1)+6 * 5 * 5 + 1 =1516
网络连接数量:1516 * 10 * 10 = 151600 个
C3层输出特征图大小是10 * 10,S4输出是5 *5 ,只有1/4 大小了。
这里有120个卷积核,每个卷积核包含16个卷积模板,这样一个卷积核和S4运算一次相当与每个S4的输出特征图都连接了卷积模板。
这里全连接层有84个神经节点,和C5的120 维神经节点进行全连接。
一般会把卷积网络最终输出的N多维向量使用 softmax 函数转化为概率密度函数。之后可以作为分类判断,也可以结合样本ylabel求解交叉熵。
给参数加权重,加快收敛,防止过拟合。
参考博客:链接1 链接2
被drop的只是本轮不参与训练,下轮可能就会参与。
不宜过大,0.01和0.001为佳。一般都设为0.001
知乎专栏:
一个大卷积层替换为多层小卷积层结构:
1*1 的卷积核的作用:
改变特征图深度:升、降维(改通道数)、明显降低计算量
增加非线性:提高表达能力。
参考博客:1*1卷积CSDN 知乎回答
一般采用 2*2, 3 *3 较小的核,不丢弃过多。
现在最常用的非线性激活函数有relu,relu常见于卷积层。其他sigmoid/tanh比较常见于全连接层,都会或多或少有梯度爆炸或者梯度消失的问题。为了改进relu的死区问题还出现了几种衍生算法,一般不常用。
回归问题:
分类问题:
普通的梯度下降法在神经网络里不常使用,因为参数太多,无法同时更新所有的参数。
其他常用的可以在tensorflow.train.里面查看。知乎专栏
感谢:魏秀参博士-解析卷积神经网络的电子书以及众多优秀的博客作者。