卷积神经网络(CNN)

在人工神经网络中介绍过神经网络的结构:
卷积神经网络(CNN)_第1张图片
卷积神经网络是人工神经网络的变形体,即对功能和形式做了变化,通常用于图像数据处理,结构如下:
卷积神经网络(CNN)_第2张图片
从上图中我们可以看出卷积神经网络比起人工神经网络多了很多层级结构,卷积神经网络可以分为:
(1)数据输入层(input layer)
(2)卷积计算层(CONV layer)
(3)ReLU激励层(ReLU layer)
(4)池化层(pooling layer)
(5)全连接层(FC layer)
(1)数据输入层有3种常见的图像数据处理方式
去均值:就是求解数据样本的均值然后将每一个样本点减去均值,这样就能实现将输入数据各个维度都中心化到0
归一化:让样本点的幅度都归一化到同样的范围。通常有两种归一化的方法线性函数归一化(Min-Max scaling),公式为:
Xnorm=XXminXmaxXmin X n o r m = X − X m i n X m a x − X m i n
Xmin X m i n Xmax X m a x 是数据集的最小值和最大值。另一种方法是0均值标准化(Z-score standardization),公式为:
z=xμσ z = x − μ σ ,其中 μ μ σ σ 是样本点的均值和方差,这种方法可以将原始数据归一化为均值为0,方差为1的数据集。
PCA/白化:PCA是用来降维的,白化是对数据每个特征轴上的幅度归一化。
卷积神经网络(CNN)_第3张图片
上图描述了原始数据集经过去均值和归一化后得到的数据集。
卷积神经网络(CNN)_第4张图片
上图描述了原始数据集经过去相关和白化后得到的数据集。
(2)卷积计算层/CONV layer
我们知道对于图像具有局部关联的特性,也就是说相邻像素点之间的数据是相似的,没有过大的变化。窗口(receptive field)可以看作是在图像上滑动的小格子,如下图所示,例如我们的图像为32*32, 我们的窗口可以为3*3,窗口在图像矩阵上进行滑动,每个神经元(下图中的一个圆圈带表一个神经元)看做一个filter,对局部数据进行计算。
卷积神经网络(CNN)_第5张图片
深度(depth):下一层神经元的个数,在上图中神经元的数量为5所以深度为5
步长(stride):滑动的方式,例如3*3的窗口可以每次滑动一个格,也可以滑动两个格。在下图中我们可以看出窗口每次滑动两个单元格,所以步长为2.
填充值(zero-padding):例如我们如果有4*4的单元格,我们用3*3的窗口去滑动,当取步长为2时就没办法滑动因为没有足够长的单元格,为了能使窗口从头滑到最后,这时就需要在原始数据周边填充若干圈0。在下图中因为窗口为3*3,步长为2,没有足够的单元格来滑动到最后,所以在原始的数据周边填充了一圈0.
卷积神经网络(CNN)_第6张图片
卷积神经网络(CNN)_第7张图片
卷积神经网络(CNN)_第8张图片
卷积层另一个重要的性质就是参数共享机制,每个神经元连接数据窗的权重是固定的,每个神经元只关注一个特性(例如图像的纹理,颜色等)。参数共享机制使得需要估算的权重个数大大减少。
(3)激励层(ReLU):就是用来将卷积层输出的结果做非线性的映射。有几种常见的激励函数:sigmoid, Tanh(双曲正切), ReLU, Leaky ReLU, ELU, Maxout.
Sigmoid函数:图像如下,
卷积神经网络(CNN)_第9张图片
值域为[0, 1],但是这个函数值域接近于0或1是斜率变化很小,在根据斜率更新权重时变化很小,很难得到我们想要的权重。
Tanh 函数:
卷积神经网络(CNN)_第10张图片
与sigmoid函数类似,只是值域为[-1, +1], 与sigmoid相同,调整权重是也会遇到相同的问题。
ReLU(The Rectified Linear Unit/修正线性单元):
卷积神经网络(CNN)_第11张图片

y=x(x>0)0(x<=0) y = { x ( x > 0 ) 0 ( x <= 0 )

优点是收敛快,求梯度简单,因为对x求导数结果为1.但是这个函数较脆弱,因为在x<=0是导数为0,所以如果使用这个激励函数尤其需要注意数据的输入以及在训练过程中观察是否程序已经不能继续训练了。
Leaky ReLU: f(x)=max(αx,x) f ( x ) = m a x ( α x , x )
卷积神经网络(CNN)_第12张图片
如上图所示,是由两段线段构成,这个函数不会饱和挂掉,计算速度也很快。
ELU:
$y=x(x>0)α(ex1)(x<=0) $ y = { x ( x > 0 ) α ( e x − 1 ) ( x <= 0 )
$
卷积神经网络(CNN)_第13张图片
ELU具有所有ReLU 的优点,不会挂掉,输出均值趋于0.但是因为指数的存在使得计算量略大。
Maxout:
max(wT1x+b1,wT2x+b2) m a x ( w 1 T x + b 1 , w 2 T x + b 2 )
Maxout的计算是线性的,是由两条直线拼接起来的,不会饱和或挂掉。但是多了很多参数。
根据经验,CNN中通常不用sigmoid,首先尝试使用ReLU,因为计算速度快,如果ReLU失效了,再尝试使用Leaky ReLU或者Maxout。
(4)池化层(pooling layer)
池化层在连续的卷积层和激励层之间,用来压缩上一层输出的数据和参数的量和减小过拟合。
卷积神经网络(CNN)_第14张图片
在上图中,224*224*64的data经过池化层做了压缩后变为112*112*64.
通常有两种常见的池化,max pooling和average pooling.
卷积神经网络(CNN)_第15张图片
上图中是2*2的filter,步长是2,经过max pooling压缩后选取最大的像素点,如果是用average pooling就计算平均值后用均值代表需要压缩的像素点。
(5) 全连接层(FC layer)
两层之间所有的神经元权重连接(与人工神经网络的连接方式类似)
通常全连接层在卷积神经网络的尾部。

通常一个完整的卷积神经网络结构依次为:
1. INPUT
2. [[CONV -> RELU]*N -> POOL?]*M
3. [FC -> RELU]*K
4. FC

为了加深对卷积神经网络层级结构的理解,下面举一个简单的例子,下图有一种图片,
卷积神经网络(CNN)_第16张图片
经过第一层卷积层之后如下:
卷积神经网络(CNN)_第17张图片
左面的是filters,右面的是选取的几个filters的data,因为每个filter只对应一种图片的特性,从data的图片中我们可以看出有些filter对应的是轮廓,有些事灰度,但是有些所对应的性质是我们无法用肉眼识别出来的。
下面是经过第二层卷积层后得到的:
卷积神经网络(CNN)_第18张图片
从图片中我们可以看出filters比第一层卷积层时更多了,同时data也更加抽象了。

下面简单描述一下卷积神经网络的训练算法:
同一般机器学习算法类似,先定义loss function用来衡量实际结果和预测结果之间的差异。
找到最小的损失函数W和b,在CNN中使用的算法是SGD。
SGD需要计算W和b的偏导: fracdydt=fracdydxfracdxdt f r a c d y d t = f r a c d y d x f r a c d x d t
计算偏导可以用BP算法,BP算法的核心是求导链式法则:

你可能感兴趣的:(机器学习,分类,神经网络)