从神经网络到卷积神经网络
什么是计算机视觉,简单来说,计算机视觉就是让机器能自动地理解图片或视频。随着大数据时代的到来,含有更多 隐含层的卷积神经网络(Convolutional Neural Network),自提出以来就在计算机视觉领域的多个大规模识别任务上取得了令人瞩目的成绩,而传统的神经网络存在的诸多问题也得以有效解决,比如:权值太多,计算量太大;权值太多,需要大量样本进行训练等等。下面我们来证实认识一下卷积神经网络:
一、卷积神经网络
卷积神经网络是一种为了处理二维输入数据而特殊设计的多层人工神经网络,网络中的每层都由 多个二维平面组成,而每个平面由多个独立的神经元组成,相邻两层的神经元之间互相连接,而处于同 一层的神经元之间没有连接。CNN采用了权值共享网络结构使之更类似于生物神经网络,同时模型的 容量可以通过改变网络的深度和广度来调整,对自然图像也具有很强的假设(统计的平稳性和像素的局 部相关性)。因此,与每层具有相当大小的全连接网络相比,CNN能够有效降低网络模型的学习复杂 度,具有更少的网络连接数和权值参数,从而更容易训练。 卷积神经网络保持了层级网络结构,不同层次有不同形式(运算)与功能,如下图:
主要是以下层次:
1. 数据输入层/ Input layer
2. 卷积计算层/ CONV layer
3. ReLU激励层 / ReLU layer
4. 池化层 / Pooling layer
5. 全连接层 / FC layer
6. Batch Normalization层(可能有)
1)数据输入层/ Input layer
有3种常见的数据处理方式
a. 去均值 ==> 把输入数据各个维度都中心化到0
b. 归一化 ==> 幅度归一化到同样的范围
c. PCA/白化 ==> 用PCA降维(白化是对数据每个特征轴上的幅度归一化)
**************************去均值与归一化******************
**************************去相关与白化******************
2)卷积计算层/ CONV layer
a. 局部关联。 每个神经元看做一个filter,这里面有一个参数共享机制存在, 固定每个神经元连接权重, 可以看做模板
每个神经元只关注一个特性,那么需要估算的权重个数大幅度减少
b. 窗口(receptive field)滑动, filter对局部数据计算
c. 涉及概念:
深度/depth(像素通道个数)
步长/stride:窗口(卷积核)每次滑动的单元
填充值/zero-padding:两种方式:
1、SAME PADDING(给平面外部补0):
卷积窗口采样后得到一个跟原来平面大小相同的平面
2、VALID PADDING(不会超出平面外部):
卷积窗口采样后得到一个比原来平面小的平面
下图表示的就是用不同的卷积核过滤后得到的特征,可能是纹路啊,颜色深度啊等等。
3)激励层(ReLU)
把卷积层输出结果做非线性映射,常见的激励函数有下面这些:
1. Sigmoid(当加权输入值小于0时,梯度变化太小,无法训练)
2. Tanh(双曲正切)(同上)
3. ReLU(收敛快,求梯度简单,较脆弱,当输入小于0的时候,输出全部为0,梯度消失问题)
4. Leaky ReLU
5. ELU
6. Maxout
图像分别如下:
激励函数的选取:
首先试RELU, 因为快, 但要小心点,如果失效改用Leaky ReLU或者Maxout
4)池化层 / Pooling layer
它是夹在连续的卷积层中间,池化层可以非常有效地缩小矩阵的尺寸。从而减少最后全连接层中的参数。使用池化层既可以加快计算速度也有防止过拟合问题的作用。池化层前向传播的过程中也是通过一个类似过滤器的结构完成的,池化层中的计算不是节点的加权和,而是采用了更加简单的最大值或者平均值计算。使用最大值操作的池化层被称之为最大池化层(max pooling),使用平均值操作的池化层称之为平均池化层(average pooling),总的来说,池化层的作用是可以压缩数据和参数的量, 减小过拟合(我觉得有点像马赛克的感觉。。)
5)全连接层 / FC layer
在经过多轮卷积核池化层的处理之后,可以认为图像中的信息已经被抽象成了信息含量更高的特征,在特征提取完成之后,仍然需要使用全连接层来完成分类任务。(有仅有的信息把原来的信息给还原回来)
a. 两层之间所有神经元都有权重连接
b. 通常全连接层在卷积神经网络尾部
二、卷积神经网络训练算法
同一般机器学习算法相同, 先定义损失函数Loss function, 利用链式求导计算损失函数对每个权重的偏导数(梯度),然后根据梯度下降公式更新权重。训练算法依然是反向传播算法。 CNN中用的算法是SGD
1、SGD需要计算W和b的偏导
2、BP算法就是计算偏导用的。
3、BP算法的核心是求导链式法则, 利用链式求导法则, 逐级相乘直到求解出dW和db。
这里强烈推荐这篇博客,写的非常清晰明了。卷积神经网络权值训练
正则化与Dropout
显然,神经⽹络学习能⼒强可能会过拟合。
Dropout(随机失活)正则化: 别⼀次开启所有学习单元
Dropout防止过拟合的两种理解方式:
1)别让你的神经⽹络记住那么多东西(虽然CNN记忆⼒好)(就是⼀只猫⽽已, 要有⼀些泛化能⼒)
2)每次都关掉⼀部分感知器, 得到⼀个新模型, 最后做融合。不⾄于听⼀家所⾔。
三、总结
上面说了这么多,最后我们来聊一下CNN的优点和缺点:
1)优点
- 共享卷积核, 对高维数据处理无压力
- 无需手动选取特征, 训练好权重, 即得特征
- 深层次的网络抽取图像信息丰富, 表达效果好
2)缺点
- 需要调参, 需要大样本量, 训练最好要GPU
但是我表示在用GPU做训练的时候,刚开始报错,说是启动程序太多,歇菜了,关掉之后,再次程序启动,电脑声音超级响,感觉电脑随时都要废掉。。。。 - 物理含义不明确,抽象出来的特征,我们无法确定这些特征到底是哪方面