本文主要参考以下链接:
Google《Tensorflow实战》
http://neuralnetworksanddeeplearning.com/chap6.html
http://cs231n.github.io/convolutional-networks/
https://blog.csdn.net/marsjhao/article/details/72900646
https://blog.csdn.net/cxmscb/article/details/71023576
本文将分为以下几个部分进行讲解:
一、从神经网络到卷积神经网络
二、深入卷积神经网络
三、经典卷积神经网络
四、总结
一、从神经网络到卷积神经网络
上面是最基本最普通的神经网络,卷积神经网络跟它是什么关系呢?
其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进。比如下图中就多了许多传统神经网络没有的层次。
下一节将从以下5层来对神经网络进行介绍:
1、 数据输入层/ Input layer
2、卷积计算层/ CONV layer
3、ReLU激励层 / ReLU layer
4、池化层 / Pooling layer
5、全连接层 / FC layer
二、深入卷积神经网络
【2.1 数据输入层】
对原始图像数据进行预处理:
去均值:把输入数据各个维度都中心化为0,如下图所示,其目的就是把样本的中心拉回到坐标系原点上。
归一化:幅度归一化到同样的范围,如下所示,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围。
PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化
在CNN的输入层中,(图片)数据输入的格式与全连接神经网络的输入格式(一维向量)不太一样。
CNN的输入层的输入格式保留了图片本身的结构(多维向量)。
黑白: 28×28
RGB: 3×28×28
【2.2 卷积计算层】
在卷积层中有2个重要的概念:
local receptive fields(感受视野)
shared weights(共享权值)
设移动的步长为1:从左到右扫描,每次移动 1 格,扫描完之后,再向下移动一格,再次从左到右扫描。
【2.3 激励层】
激励层主要对卷积层的输出进行一个非线性映射,因为卷积层的计算还是一种线性计算。使用的激励函数一般为ReLu函数:
f(x)=max(x,0)
卷积层和激励层通常合并在一起称为“卷积层”。
【2.4 池化层】
池化层夹在连续的卷积层中间,用于压缩数据和参数的量,减小过拟合。
简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
池化层用的方法有Max pooling 和 average pooling,而实际用的较多的是Max pooling。
这里就说一下Max pooling,其实思想非常简单。
【2.5 全连接层】
两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。
也就是跟传统的神经网络神经元的连接方式是一样的:
【2.6 卷积神经网络的优缺点】
优点:
• 共享卷积核,对高维数据处理无压力
• 无需手动选取特征,训练好权重,即得特征分类效果好
缺点:
• 需要调参,需要大样本量,训练最好要GPU
• 物理含义不明确(也就说,我们并不知道没个卷积层到底提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)
三、经典卷积神经网络
LeNet,这是最早用于数字识别的CNN
AlexNet, 2012 ILSVRC比赛远超第2名的CNN,比LeNet更深,用多层小卷积层叠加替换单大卷积层。
ZF Net, 2013 ILSVRC比赛冠军
GoogLeNet, 2014 ILSVRC比赛冠军
VGGNet, 2014 ILSVRC比赛中的模型,图像识别略差于GoogLeNet,但是在很多图像转化学习问题(比如object detection)上效果奇好
【3.1 LeNet】
第一个卷积神经网络,1994年由Yann LeCun基于1988年以来的工作提出,并命名为LeNet5。
贡献:
在神经网络中引入卷积层
引入下采样
卷积+池化(下采样)+非线性激活的组合是CNN的典型特征
使用MPL作为分类器
【3.2 Dan Ciresan Net】
2010年,Dan Claudiu Ciresan和Jurgen Schmidhuber实现了第一个GPU神经网络。
【3.3 AlexNet】
AlexNet是2012年ImageNet比赛的冠军,第一个基于CNN的ImageNet冠军,网络比LeNet5更深(8层)。
贡献:
使用ReLU作为非线性激活函数
数据扩增
使用最大池化
使用dropout避免过拟合
使用GPU减少训练时间
从AlexNet之后,深度学习就变成了一种叫做”解决任务的更大规模的神经网络”的技术。
【3.4 VGGNet】
VGG是2014年的ImageNet分类的亚军,物体检测冠军,使用了更小的卷积核(3x3),并且连续多层组合使用。
贡献:
更深
连续多个3x3的卷积层
VGG论文的一个主要结论就是深度的增加有益于精度的提升,这个结论堪称经典。
【3.5 GoogleNet】
GoogLeNet是2014年的ImageNet图像分类的冠军,比VGG19多3层,而其参数却只有AlexNet的1/12,同时获得了当时state-of-the-art的结果。
Inception模块使用1x1的卷积(bottleneck layer)减少了特征数量,同时,分类器部分只保留了必要的一个全连接层,极大的降低了运算数量。Inception模块是GoogLeNet以更深的网络和更高的计算效率取得更好的结果的主要原因。此后,Inception模块不断改进,产生了Inception-2和Inception-3。
【3.6 ResNet】
卷积神经网络模型的发展历程一次次证明加深网络的深度和宽度能得到更好的效果,但是后来的研究发现,网络层次较深的网络模型的效果反而会不如较浅层的网络,称为“退化”现象,如图所示。
退化现象产生的原因在于当模型的结构变得复杂时,随机梯度下降的优化变得更加困难,导致网络模型的效果反而不如浅层网络。
ResNet的基本思想是引入了能够跳过一层或多层的“shortcut connection”,即增加一个identity mapping(恒等映射),将原始所需要学的函数H(x)转换成F(x)+x,而作者认为这两种表达的效果相同,但是优化的难度却并不相同,作者假设F(x)的优化会比H(x)简单的多。这一想法也是源于图像处理中的残差向量编码,通过一个reformulation,将一个问题分解成多个尺度直接的残差问题,能够很好的起到优化训练的效果。
四、总结
卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。
卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。
【FAQ】
1.神经网络Vs传统机器学习?
2.CNN与NN输入层的不同?
3.为什么要卷积?
4.为什么要池化?
5.为什么要dropout?
6.损失函数?
7.为什么要softmax?
五、代码
【附上个人git完整代码地址:https://github.com/Liuyubao/Tensorflow-CNN】
领取专属 10元无门槛券
私享最新 技术干货