一、卷积神经网络(CNN)
1、常见的CNN结构有:LeNet-5、AlexNet、ZFNet、VGGNet、ResNet等。目前效率最高的是ResNet。
2、主要的层次:
数据输入层:Input Layer
卷积计算层:CONV Layer
ReLU激励层:ReLU Incentive Layer(功能就是和激活函数一样,具有非线性的能力)
池化层:Pooling Layer(压缩形式,降低复杂度)
全联接层: FC Layer
备注 :Batch Normalization Layer
3、详解Input Layer
和传统的神经网络一样,首先需要对输入的数据进行预处理。
(1) 去均值:将输入数据的各个维度中心化到0,例如X1(1,2,5),那么平均值就是(1+2+5)/3 = 8/3,在用每一个元素减去8/3。
(2)归一化:将数据各个维度的幅度归一到同样的范围。(在去均值的基础上,再除以标准差)
(3)PCA/白化:(在cnn处理图片不用这个)
用PCA降维(去掉特征与特征之间的相关性)
白化石在PCA的基础上,对转换后的数据每个特征轴上的幅度进行归一化
例:(去均值和归一化)
例:PCA和白化
、
4、CONV Layer(卷积)
- 局部关联:每个神经元看做一个filter/kernal
- 窗口(receptive field)滑动,filter对局部数据进行计算
- 相关概念(深度:depth,步长:stride,填充值:zero-padding)
理解这张图
(1)可以把每一张图片分割成很多个神经元,如图最左边
(2) 每一个图片可用RGB(红、绿、蓝三个通道的颜色)三个方面来表示。
(3)filter可以看作是从几个角度来描述这个图片(比如说大小,形状),有几个角度,深度就是多少,那么每一个角度,就对应一组filter。
(4)如上图:一般的图片为正方形,步长s=2,窗口大小f=3,高度h=5,宽度w=5,填充p=1*2,满足(p+w-f+s)/s 能够被整除,输出为out输出矩阵的大小
卷积神经网络就是解决了全链接神经网络复杂度,进行局部感知,如 下图:
5、ReLU Layer(激活)
一班用ReLU,如果效果不好,可用Leak Relu
6、池化层 Pooling Layer
在连续的卷积层中间存在的就是池化层,主要功能是:通过逐步减小表征的空间尺寸来减小参数量和网络中的计算;池化层在每个特征图上独立操作。使用池化层可以压缩数据和参数的量,减小过拟合。
类似传统神经网络中的结构,FC层中的神经元连接着之前层次的所有激活输出; 换一句话来讲的话,就是两层之间所有神经元都有权重连接;通常情况下,在 CNN中,FC层只会在尾部出现
一般的CNN结构依次为:
INPUT
[[CONV -> RELU] * N -> POOL?]*M
[FC -> RELU] * K
[FC -> RELU] * K
FC
7、 初始化参数(在卷积神经网络中,可以看到神经元之间的连接是通过权重w以及偏置b实现的。在具 体的神经网络之前 ,需要初始化参数)
权重的初始化 :
一般方式:很小的随机数(对于多层深度神经网络,太小的值会导致回传的梯度非常小),一般随机 数是服从均值为0,方差未知(建议:2/n, n为权重数量,https://arxiv.org/pdf/1502.01852.pdf) 的高斯分布随机数列。
偏置项的初始化 :
一般直接设置为0,在存在ReLU激活函数的网络中,也可以考虑设置为一个很小的数字
8、卷积神经网络正则化和Dropout
神经网络的学习能力受神经元数目以及神经网络层次的影响,神经元数目越大, 神经网络层次越高,那么神经网络的学习能力越强,那么就有可能出现过拟合的问题 。
Regularization:正则化,通过降低模型的复杂度,通过在cost函数上添加 一个正则项的方式来降低overfitting,主要有L1和L2两种方式
Dropout:通过随机删除神经网络中的神经元来解决overfitting问题,在每次迭代的时候,只使用部分神经元训练模型获取W和d的值(
每次丢掉一半左右的隐 藏层神经元,相当于在不同的神经网络上进行训练,这样就减少了神经元之间的依 赖性,即每个神经元不能依赖于某几个其它的神经元(指层与层之间相连接的神经 元),使神经网络更加能学习到与其它神经元之间的更加健壮robust(鲁棒性)的 特征。另外Dropout不仅减少overfitting,还能提高准确率 )
9、卷积神经网络训练的方法
在神经网络中一般采用Mini-batch SGD,主要包括以下四个步骤的循环:
(1)采样一个batch的数据
(2)前向计算损失loss
(3)反向传播计算梯度(一个batch上所有样本的梯度和)
(4)利用梯度更新权重参数