CNN及常用框架
一、神经网络:
增加少量隐层(浅层神经网络),增加中间层(深度神经网络,DNN)。神经网络应用在分类问题中效果好,LR或Linear SVM,线性分割都可用于分类。
二、卷积神经网络(CNN):
卷积神经网络依旧保存了层级结构,但层的功能和形式发生了变化。
分别有:数据输入层、卷积计算层、激励层、池化层、全连接层
1、数据输入层(Input layer)
(1)去均值:把输入数据各个维度都中心化到0(只计算训练集上的均值)(对应下图2的平移)
(2)归一化:幅度归一化到同样的范围(RGB的范围本身是在一定的范围 里0~255,所以一般不需要归一化)(对应于下图3)
(3)PCA/白化:用PCA降维;白化是对数据每个特征轴上的幅度归一化
下图是进行去相关和白化的操作
(2)卷积计算层(CONV layer)
a.局部关联。每个神经元看做一个filter,通过窗口(receptive field)滑动,filter对局部数据计算。有多少个filter,depth就是多少。
b.固定每个神经元连接权重,可以看做一个模板,每个神经元只关注一个特性
c.需要估计权重个数减少:AlexNet 1亿=>3.5w
d.一组固定的权重和不同窗口内数据做内积:卷积
详细可参考此论文:http://blog.****.net/v_july_v/article/details/51812459
(3)激励层(ReLU)
把卷积层输出结果做非线性映射(Sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Maxout)
现在主要用的是ReLU(The Rectified Linear Unit,修正线性单元):收敛快,求梯度简单,较脆弱,所以要小心使用(比如在中间打印一下梯度,是不是变为0了,以防止饱和)。以下是它的函数曲线
ReLU优化有一个缺点,就是一旦进入到左边的区域,就会挂掉,下面对ReLU做了一点小的修改。
一般首选ReLU,如果ReLU失效,则会使用Leaky ReLU或Maxout;不用Sigmoid,某些情况下tanh倒是有不错的结果,但是很少。
(4)池化层(Pooling Layer):Max pooling和average pooling
夹在连续的卷积层中间,用于压缩数据和参数的量,减少过拟合。
(5)全连接层(FC layer)
两层之间所有的神经元都有权重连接,通常全连接在卷积神经网络尾部。尽量使用最后全连接层的学习去还原原来的信息
(6)输出层
总结:
一般CNN结构依次为:
- INPUT
- [[CONV -> RELU]* -> POOL?] *M
- [FC -> RELU] *K
- FC
卷积神经网络的优缺点:
优点:
共享卷积核,对高维数据处理无压力;
无需手动选取特征,训练好权重,即得特征
分类效果好
缺点:
需要调参,需要大样本量,训练最好要GPU
物理含义不明确
典型的CNN:LeNet、AlexNet、ZF Net、Google Net、VGGNet(速度没有Google Net快,但是图像转化学习效果很好)、ResNet
CNN常用框架:Caffe、Torch、TensorFlow