一、CNN发展简史
CNN可以有效降低传统神经网络(全连接)的复杂性,常见的网络结构有LeNet、AlexNet、ZFNet、VGGNet、GoogleNet、ResNet等。
1.CNN典型的几种结构:
- LeNet(1998年 ): 开启深度学习元年
- AlexNet(2012年 ): 错误率 15.3%
- ZFNet(2013年 ): 错误率 14.8%
- VGGNet(2014年 ): 亚军,错误率 7.3%
- GoogleNet(2014年 ): 冠军,错误率 6.67 %
- ResNet(2015年 ): 错误率 3.6 %
2.CNN网络的主要应用场景:
- 图像分类
- 目标检测
- 图像分割
- 语义分割?
二、CNN网络的主要层次
1.输入层(Input Layer)
网络数据输入之前要进行数据预处理。
数据预处理原因:
输入数据的单位如果不一样,会导致神经网络收敛速度慢。
激活函数是有值域限制的,所以需要将输入数据映射到激活函数的值域范围内。数据预处理方式:
1)去均值
2)归一化
3)PCA降维、白化
白化:在PCA的基础上,对转换后的数据 每个特征轴上进行归一化处理。
* 实际应用中,一般并不会使用PCA和白化的操作。
2.卷积层(CONV Layer)
:给定一张输入图片,用一个filter去扫描这张图,filter里面的数就叫做权重,而这张图的每个位置是被同样的filter扫的,所以卷积计算的权重是一样的,这就是权值共享。
卷积计算过程如下图所示:
3.激活层(Activiation Layer)
激活层:将卷积层的输出结果再做一次非线性的转换。
常用的激活函数有:Sigmoid、Tanh、Relu、Leaky Relu、Maxout等。
-
Sigmoid函数
优点:简单,容易理解
缺点:容易产生(即梯度消失or爆炸爆炸)
数学公式:
导函数:
图像:
-
Tanh(双曲正切)函数
优点:易理解,0中心化
缺点:容易产生
数学公式:
导函数:
图像:
-
Relu函数
缺点:没有边界
优点:相比于Sigmoid和Tanh,具有更快的收敛速度
数学公式:
导函数:
图像:
- 首先使用Relu,如果效果不好,考虑使用Leaky或者Maxout。
- sigmoid激活函数在CNN中一般不用,而tanh激活函数只在某些特定场景下效果好。
4.池化层(Pooling Layer)
池化层可以压缩数据减少参数量,减小过拟合。有两种池化层:最大池化和平均池化。(一般选择最大池化)
5.全连接层(FC Layer)
全连接层目的:对卷积观测到的局部信息进行整合,得到全局信息。
6.Batch Normalization层
在网络每一层输入前,插入一个BN归一化层,将输入数据处理为服从高斯分布的数据,然后再进入网络的下一层。
BN层一般放在卷积层后,池化层前:
- 卷积层 --> Relu激活层 --> BN层 --> 池化层
- 卷积层 -->BN层 --> Relu激活层 --> 池化层
BN层作用:
- 防止梯度消失
- 加快网络训练速度
- 抑制网络过拟合。