主要内容
1. 神经网络
1.1 感知器
1.2 Sigmoid神经元
1.3 神经网络
2. 卷积神经网络CNN
2.1 卷积神经网络结构
2.2 数据输入层
2.3 卷积层
2.3.1 局部感知(Local Connectivity)
2.3.2 卷积计算
2.3.3 参数共享机制
2.4 激活函数层
2.5 池化层
2.6 全连接层
2.7 卷积神经网络优缺点
2.8 卷积神经网络fine-tuning
2.9 典型CNN
2.9.1 LeNet
2.9.2 AlexNet
2.9.3 VGGNet
3. 卷积神经网络总结
4. 参考链接
最近学习研究卷积神经网络CNN,现在参考各种资料总结一下,参考链接见文章最后。
首先介绍一下神经网络的基本知识,感知器,Sigmoid神经元以及神经网络在进行复杂逻辑表示时的优缺点。
再介绍CNN卷积神经网络对于全连接神经网络的改进,着重介绍卷积神经网络的各层是如何处理数据的。
最后介绍各种经典CNN网络的结构,LeNet,AlexNet以及VGGNet等。
假定现在要进行某种决策,影响最终决策的因素有很多并且影响因素数量巨大,其中因素与最终决策的具体逻辑关系难以直接表述,难以用准确的数学表达式来表示,难以用简单的条件来进行判断。因此需要构造一种模型,实现输入多个影响因素,输出最终决策结果,并且输入大量样本来不断学习,试图找出最终决策与多个影响因素之间的隐含关系,实际上是构造一种黑箱模型。
最初通过构造一种感知器模型来进行输入与输出的映射,感知器可以接收多个二进制输入,产生某个二进制输出,其基本模型如下所示。将多个输入结合以不同的权重W,在加以某偏移b,其结果Wx+b与零值比较,最终输出0或1。
最终输出结果相当于使用阶跃函数来决定0或者1。感知器模型的问题在于权重w与偏移b的任何微小改动,可能会造成结果的彻底改变。任何一个感知器的权重或者偏移细小的改变有时都能使得感知器输出彻底翻转,从0到1。这种翻转可能导致网络剩余部分的行为以某种复杂的方式完全改变
输入可以是多个变量,每个变量取值为0-1之间的任何值,将输入的多个变量进行结合Wx+b,最终结果经过Sigmoid函数来输出,输出值为0--1的一个概率值。使用Sigmoid神经元可以解决感知器过于敏感的问题。
由于单个Sigmoid神经元表示有限,这里可以采用多层神经网络来模拟某种复杂逻辑,一般来说神经网络从左到右依次为输入层,中间为隐藏层,隐藏层可以有多层,最后为输出层。从表现上看,神经网络通过神经元的连接,使得各种输入元素进行结合变换,通过权重,偏移以及激活函数的作用来模拟复杂情况下,大量输入因素是如何影响最终结果的。
普通神经网络是全连接网络,对于输入层来说即将每个输入与隐藏层的每个神经元都进行连接,其问题是连接数太大,权重和偏移参数太多,因此需要大量的样本来进行训练确定大量参数,时间成本太高,因此普通神经网络需要进行优化,重新进行设计。
卷积神经网络CNN属于神经网络的一种,CNN一般主要用来处理图像数据,可以利用CNN来进行图像分类,检测以及目标定位等。
利用CNN来识别手写字体,其CNN基本概念图如下所示:
由以上可知,CNN主要由以下网络层次组成,其中卷积层,池化层,全连接层可以进行多次组合:
1.输入层(Input layer)
2.卷积层(Convolutional layer)
3.激活函数层(线性整流层Rectified Linear Units layer, ReLU layer)
4.池化层(Pooling layer)
5.全连接层(Fully-Connected layer)
数据输入层主要是对原始图像数据进行预处理,主要有以下操作:
去均值:把输入数据各个维度都中心化为0,其目的是把样本的中心拉回到坐标系原点上。
归一化:幅度归一化到同样的范围,如下所示,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围。
PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化。
卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
普通神经网络把输入层和隐含层进行“全连接(Full Connected)“的设计。从计算的角度来讲,相对较小的图像从整幅图像中计算特征是可行的。但是,如果是更大的图像(如 96x96 的图像),要通过这种全联通网络的这种方法来学习整幅图像上的特征,从计算角度而言,将变得非常耗时。你需要设计 10 的 4 次方(=10000)个输入单元,假设你要学习 100 个特征,那么就有 10 的 6 次方个参数需要去学习。与 28x28 的小块图像相比较, 96x96 的图像使用前向输送或者后向传导的计算方式,计算过程也会慢 10 的 2 次方(=100)倍。
卷积层解决这类问题的一种简单方法是对隐含单元和输入单元间的连接加以限制:每个隐含单元仅仅只能连接输入单元的一部分。例如,每个隐含单元仅仅连接输入图像的一小片相邻区域。(对于不同于图像输入的输入形式,也会有一些特别的连接到单隐含层的输入信号“连接区域”选择方式。如音频作为一种信号输入方式,一个隐含单元所需要连接的输入单元的子集,可能仅仅是一段音频输入所对应的某个时间段上的信号) 每个隐含单元连接的输入区域大小叫r神经元的感受野(receptive field)。由于卷积层的神经元也是三维的,所以也具有深度。卷积层的参数包含一系列过滤器(filter),每个过滤器训练一个深度,有几个过滤器输出单元就具有多少深度。
定义卷积计算的核心变量:depth, stride 和 zero-padding。
卷积计算输入参数: 输入图片的高度 宽度 深度;filter单元的大小,步长stride以及pad 当计算图片边缘时需要以某种方式来进行边缘补偿。输出为特征图。以一张彩色图像为例,假定图片大小为32*32*3,其中图片的高为32,宽为32,深度为3,即每个像素点含有3个RGB颜色通道,每个颜色取值为0-255。卷积层的输入为图片数据以及多个filter处理单元,输出结果为多个特征图。
卷积的具体计算过程如下所示:对于图片的每一层深度可以认为是一个二维数组,对于filter处理单元的每一层也可以认为是一个二维数组,保持图片二维数组数据不动,filter处理单元依次以一定的步长进行处理操作,将filter中数据与原图片中对应位置数据进行相乘求和。
经过卷积计算之后,输出特征图的大小计算公式如下:
其具体的卷积计算动态过程如下所示:
在卷积层中每个神经元连接数据窗的权重是固定的,每个神经元只关注一个特性。神经元就是图像处理中的滤波器,比如边缘检测专用的Sobel滤波器,即卷积层的每个滤波器都会有自己所关注一个图像特征,比如垂直边缘,水平边缘,颜色,纹理等等,这些所有神经元加起来就好比就是整张图像的特征提取器集合。需要估算的权重个数减少: AlexNet 1亿 => 3.5w。一组固定的权重和不同窗口内数据做内积: 卷积。
卷积的效果直观展示:
激活函数层实现将卷积层的结果进行非线性映射。
CNN采用的激励函数一般为ReLU(The Rectified Linear Unit/修正线性单元),它的特点是收敛快,求梯度简单,但较脆弱,图像如下。
经过激活函数效果直观显示:
池化层用于压缩数据和参数的量,减小过拟合。如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
这里再展开叙述池化层的具体作用。
1. 特征不变性,也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。
2. 特征降维,我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。
3. 在一定程度上防止过拟合,更方便优化。
池化层用的方法有Max pooling 和 Average pooling,而实际用的较多的是Max pooling。
Max pooling计算方式如下所示,依次选定每个窗口内的最大值来代替窗口数据,即实现图片的压缩。
两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。
优点
• 共享卷积核,对高维数据处理无压力
• 无需手动选取特征,训练好权重,即得特征分类效果好
缺点
• 需要调参,需要大样本量,训练最好要GPU
• 物理含义不明确(也就说,我们并不知道没个卷积层到底提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)
何谓fine-tuning?
fine-tuning就是使用已用于其他目标、预训练好模型的权重或者部分权重,作为初始值开始训练。
那为什么我们不用随机选取选几个数作为权重初始值?原因很简单,第一,自己从头训练卷积神经网络容易出现问题;第二,fine-tuning能很快收敛到一个较理想的状态,省时又省心。
那fine-tuning的具体做法是?
• 复用相同层的权重,新定义层取随机权重初始值
• 调大新定义层的的学习率,调小复用层学习率
最早用于数字识别的CNN,如下图所示Lenet-5结构,输入为32*32的灰度图片,首先经过卷积层提取出6个特征图大小为14*14,经过池化实现特征图的压缩14*14,在经过一次卷积以及池化层,最后使用全连接层来实现最终手写数字识别。
2012 ILSVRC比赛远超第2名的CNN
输入图片经过两次卷积池化,再经过两次卷积,再经过一次卷积池化,最后经过两次全连接层。
LeNet更深,用多层小卷积层叠加替换单大卷积层
ZF Net, 2013 ILSVRC比赛冠军
GoogLeNet, 2014 ILSVRC比赛冠军
2014 ILSVRC比赛中的模型,图像识别略差于GoogLeNet,但是在很多图像转化学习问题(比如object detection)上效果奇好。
卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。
CNN一个非常重要的特点就是头重脚轻(越往输入权值越小,越往输出权值越多),呈现出一个倒三角的形态,这就很好地避免了BP神经网络中反向传播的时候梯度损失得太快。
卷积神经网络CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。
https://www.cnblogs.com/skyfsm/p/6790245.html
https://blog.csdn.net/liangchunjiang/article/details/79030681
http://cs231n.github.io/convolutional-networks/
https://www.cnblogs.com/nsnow/p/4562308.html
https://blog.csdn.net/ice_actor/article/details/78648780
https://www.jianshu.com/p/70b6f5653ac6
https://blog.csdn.net/sqy941013/article/details/80756862
https://blog.csdn.net/sinat_35821976/article/details/81503953
http://www.tensorfly.cn/home/?p=80