CNN卷积神经网络
一、概述
全连接层相较于卷积层的弊端:
难以提取局部不变特征(缩放、平移、旋转不影响语义信息)
CNN卷积神经网络的优势(减少参数量的手段)
局部连接:
权值共享:一个卷积层共用一个卷积核
池化操作:缩减特征图尺寸(下采样),增大感受野,进一步减少参数量
二、基础组件
1、基本构成:
输入层、卷积层、激活、池化层、全连接层
输入层:零中心化,归一化
卷积层:浅层:基础特征提取/深层:抽象特征提取
全连接层:特征组合分类评分
基本特征
局部连接:降低参数量
权值共享:一个卷积层共用一个卷积核(滤波器),降低参数量
平移不变性:捕获与图像整体空间位置无关的特征(图像不同位置出现的相似特征)
池化操作:缩减特征图尺寸,增大感受野,进一步减少参数量
2、卷积层:
定义
1、数学定义:
一维、二维卷积定义式
CNN中的卷积为数学中的互相相关
(原因:1、目标不同:卷积仅为提取特征。2、可变性不同:数学中的滤波器人为确定而CNN中的滤波器由学习得到)
2、深度学习定义:特征提取器(提取后得到特征图)
特点
- 参数共享:对图像的一部分有用的特征检测器(滤波器),对图像的另一部分也很可能是有用的
- 稀疏连接:在每一个卷积层,输出值仅取决于一小部分输入值
典型卷积核
1、低通滤波:卷积核绝对值小、处理图像变平滑、模糊、噪声减少
2、高通滤波:卷积核绝对值大、处理图像边缘明显、细节突出
3、1×1滤波器:特征降维(在通道数方向上进行降维(channel_num→fliter_num))减少参数 量和计算量
4、垂直和水平特征提取:vertical/horizontal
卷积核相关计算
1、卷积核运算:对应位置相乘再加(加权求和)
2、输入输出维度计算:
a、平面卷积的两种基本操作
padding
填充的作用:
- 防止图像大小的收缩(shrinking)
- 防止图像边缘像素信息被“轻视”(比如,如果不填充,图像左上角的像素只被卷积一次)
分类:
- Valid:未使用填充,卷积后图像变小
- Same:使用填充,卷积后图像大小不变。p=(k-1)/2
k为偶数:非对称填充导致的特征图空间漂移和对齐问题
stride
步幅的作用:
成倍缩小卷积输出的空间尺寸,且缩小倍数等于步幅大小
b、立体卷积
注:
1、立体卷积中一个标准卷积核中的不同fliter的尺寸必须相同;而其中参数不同对应提取不同方向尺度上的特征。
2、在GoogleNet的inception中,是并行使用多个不同的卷积,再在通道中进行堆叠,而不是使用不同尺寸的fliter滤波器。
3、参数量计算:
补充:
空洞卷积
空洞卷积“挖掉”的参数(即引入的零值)不影响最终的感受野大小
在感受野不变的前提下减少参数量/在参数量不变的前提下增大感受野
空洞卷积也叫扩张卷积, 在保持参数个数不变的情况下增大了卷积核的感受野, 同时它可以保证输出的特征映射的大小保持不变。 一个扩张率为 2 的 3×3 卷积核, 感受野与 5×5 的卷积核相同, 但参数数量仅为 9 个。
常用激活函数
卷积为线性操作
激活函数增强网络非线性建模能力
3、池化层
含义:
使用某一位置的相邻区域的总体特性来替代该位置的输出
目标:
1、在保留有用信息同时,减小输出特征图的大小(同时增大感受野),降低特征维度
2、减少参数量
3、防止过拟合(结合平移不变性理解)
分类:
1、最大池化
2、平均池化
维度和参数计算
池化层参数量为0!
4、感受野
计算公式
层数越深,感受野越大
eg:
三、基础卷积神经网络
1、AlexNet
- 第一个现代深度卷积网络模型
- 采用ReLU作为非线性激活函数, 使用Dropout防止过拟合
- 5个卷积层、 3个池化层和3个全连接层
2、VGG
- VGG采用连续的几个3× 3的卷积核代替AlexNet中的较大卷积核(多个小卷积核堆叠代替大卷积核):
- 使用3个3× 3卷积核来代替7× 7卷积核
- 使用2个3× 3卷积核来代替5× 5卷积核
- 优点: 在保证具有相同感知野的条件下:
- 提升了网络深度, 减小网络参数量, 从而提升了神经网络性能
- 更多非线性变换,增强了学习能力
- 7.3% top 5 error in2014ILSVRC定位任务第一名,分类任务第二名
3、VGG
2014 ILSVRC winner(错误率: 6.7%)
22层, 参数量 4M (vsAlexNet: 8层, 参数量60M, 错误率16.4%)
没有全连接层
引入1×1小卷积核
相当于直接加入非线性激活函数,提高模型的表达能力
通过升维和降维简化运算
inception中的1×1卷积简化运算示例
由多个Inception模块堆叠而成
- 一层并行使用多个不同尺寸的卷积核得到不同的特征进行拼接得到输出
- 不同大小卷积核→不同大小感受野→拼接意味着不同尺度特征融合
4、ResNet(残差网络)
2015年ILSVRC比赛分类任务第一名(152层, 错误率: 3.6%)
跳连/残差连接:以提升信息的传播效率, 使网络更容易优化
- 解决了机械累加模型深度而使网络退化问题(随着网络的深度增加, 准确度反而下降了 )
- 由梯度消失,模型过拟合等原因导致
ResNet快于VGGNet (也引入1×1卷积降维/减少全连接层)
5、MobileNet
Google团队提出, 专注于移动设备的轻量级神经网络 (性能较差)
深度可分离卷积,减少计算量
深度卷积(空间特征提取):卷积核宽 × 卷积核高 ×1× 输入通道数
逐点卷积(通道特征提取):1 × 1 × 输入通道数 × 输出通道数
计算验证:标准卷积参数量约为深度可分离卷积的8.41倍
eg:输入图尺寸为11211264, 卷积核尺寸3*3, 使用128个卷积核
v1缺点:深度可分离卷积中的深度卷积操作(逐通道处理降维),在低维空间后接ReLU激活函数,容易造成信息丢失(在高维度进行RELU运算信息丢失会很少)。
v2优化:
- 将RELU换为线性激活函数
- 先逐点卷积升维再深度卷积再逐点卷积降维
- 引入ResNet的shortcut结构
6、DenseNet
前面所有层与后面层均密集连接(Dense Connection)
通过特征在channel上的连接来实现特征重用(Feature Reuse)
优点:特征复用/减少参数量/缓解梯度消失/能看到全局特征,有正则化作用防止过拟合
缺点:内存占用高
四、卷积网络可视化
Conv:
浅层:(基础特征)颜色、边缘、纹理—>可复用
深层:(抽象特征)物体位置、语义类别—>新数据集特征
五、预训练与微调
1、为什么需要预训练和微调?
1、如果数据集量大:训练调参时间长
2、如果数据集量小:过拟合
3、参数量大:调参时间长、过拟合风险高
注:参数量大和数据集小都会导致过拟合,不要把这两个概念弄混了
4、其他:模型性能差、泛化能力差
2、什么是预训练和微调?
预训练:在大数据集上训练,训练浅层可复用通用特征
注:预训练并非必要
微调:小数据集上微调以优化性能,训练深层专业化特征
注:微调时可以采用比训练时更小的学习率
3、如何进行预训练和微调
1、数据集小,和原数据集相似:只需微调顶端线性分类层(输出层)
2、数据集大,和原数据集相似:小学习率微调较多的卷积层
3、数据集小,和原数据集差异明显:数据扩增
4、数据集大,和原数据集差异明显:重新训练