当前位置:   article > 正文

卷积神经网络CNN_神经网络 特征筛选

神经网络 特征筛选

一、什么是神经网络

在这里插入图片描述
如上图所示,神经网络由输入层、隐藏层和输出层组成,每一层都由若干结点组成,每一个结点可以视为一个神经元
逻辑回归是一种广义的线性分类回归模型。逻辑回归的因变量是可以二分类,也可以多分类,但是二分类更为常用。
在这里插入图片描述上面函数通过线性拟合得到z,再将z代入到Sigmoid函数中得到了a。
在这里插入图片描述
如上图所示,纵坐标是a,当(z,a)=(0,0.5)时正好是整个图像的分界点。当z>0,说明函数值a在0.5的上方,属于一个类别;当z<0说明函数值a在0.5的下方,属于另一个类别。由此得到了一个分类器。
在这里插入图片描述
如上图,我们将分类器对应到神经网络上即为上图右边所示,x 1 _1 1,x 2 _2 2作为传到第一个神经元的输入,数字1是偏移项,把逻辑回归上的 θ 0 \theta_0 θ0看成神经网络上的b, θ 1 \theta_1 θ1看成w 1 _1 1 θ 2 \theta_2 θ2看成w 2 _2 2,就可以将刚才的逻辑回归化为一个非常简单的感知器,也可以看作没有隐层的神经元。g(z)在神经元中叫做激励函数,通过激励函数会得到一个概率值,用来判定样本属于这一类的概率。
在这里插入图片描述
如上图所示,如果不是直接从输入层到输出层,而是中间加了一个隐藏层,只是加的隐层数量比较少,例如上图只加了一层的隐藏层,这时就称为浅层神经网络。
在这里插入图片描述
当中间层增加了很多就称为深度神经网络DNN。

二、神经网络与其它线性分类器相比优势在哪里?

1、普通的线性分类器

在这里插入图片描述
如上图,传统的逻辑回归(LR)或线性支持向量机( linear SVM )做的事情很简单,找一条分界线,通过这条线去做判定,在直线的一侧认为是一种样本类型,在直线的另一侧被认为是另一种样本类型。当然也可以通过曲线分类。
在这里插入图片描述
如上图若是,也可以通过曲线分类,如果假如核函数,就会变成曲线,但是我们会发现很固定而且核函数也不是万能的,假如在曲线包围着的中间也有很多红色的点,在这种情况下不好拟合判定的边界,不容易将两个不同的类别区分开。

2、神经元可以完成逻辑与

在这里插入图片描述
这时应该怎么办呢?如上图所示, 假如现在有两个类别,0和1,当x的两个取值都为0或都为1是y值取1,而当x的两个值不同时y值取0。也就是将上图左边中的两个圆圈和两个叉号分开。我们会发现用之前的分类无法完成,而加入核函数又有些过于复杂。我们从另一个角度来解决这个问题,我们试图用线性组合的方式去完成一个非线性的切分,即一条直线切不开的话用两条直线切开。上图右边所示,p1上方属于1这一类,p1下方属于0这一类;p2上方属于0这一类,而p2下方属于1这一类。对两个线性分类器取“AND”操作即可完成。
在这里插入图片描述
在这里插入图片描述
AND操作过程如下,用刚才最简单的感知器,假设3条边已经给定权重,分别为-20、20、10。当两个x值同时取1时输出结果为10,在横轴取10的地方结果接近1,所以结果是1。当x 1 _1 1=1,x 2 _2 2=0时输出结果是-10,-10对应上面的函数是一个接近于0的值。
在这里插入图片描述
通过上面例子我们可以得知,给定一组权重可以得到一条直线,当给定另一组权重时可以得到另一条直线,把这二者组合起来就可以得到由线性直线组成的分类器,通过简单的线性加权就可以得到非线性的结果而不用很复杂的核函数。从神经网络的角度看相当于加了一个隐藏层,加了一个隐藏层能完成的东西就是原本非线性可分的东西现在已经可以切分。

3、神经元完成逻辑或

神经网络之所以强大是它能完成逻辑或操作。
当将线性分类器的逻辑与和逻辑或组合在一起,就能完美的对平面样本点进行分类。如下图所示:
在这里插入图片描述

三、神经网络到卷积神经网络

在这里插入图片描述
在开头我们说过神经网络的图如上所示,那么卷积神经网络和它是什么关系呢?
卷积神经网络依旧是层级网络,但层的功能和形式做了变化。
在这里插入图片描述
如上图所示,它现在每一层与每一层不再是像原来那样从上个神经元的输出直接做一个线性加权拿到结果,而是每一层有完全不同的功能。最开始是数据层,即要对数据有一个表示,数据层后面是卷积层(CONV),卷积层后面是激励层,RELU是激励函数的一种,再后面是池化层(POOL),在神经网络中我们看到的所有全连接的东西在卷积神经网络中也有体现,叫FC层。这些层次穿插。接下来我们依次来介绍每一层次。

1、数据输入层(Input layer)

主要功能是对数据进行预处理操作。有3种常见的图像数据处理方式。
(1)去均值:把输入数据各个维度都中心化到0,这里要注意只求训练集上图像的均值,然后将所有样本减掉这个均值,所有样本包括训练集和测试集。
在这里插入图片描述
(2)归一化:把所有的输入归一化到同样的范围。
在这里插入图片描述
(3)PCA/白化:用PCA降维;白化是对数据每个特征轴上的幅度归一化。
在这里插入图片描述
注意在卷积神经网路中只会做去均值,不会做归一化和白化。

2、卷积计算层(CONV layer)

在这里插入图片描述
是由原始神经网络映射到卷积神经网络的核心。卷积计算层具有局部关联性。每个神经元可以看作一个filter。
如上图所示,3是RGB3个颜色通道,32 ∗ * 32是像素点。首先定义了下一层有多少和神经元,这里是5个。卷积层只取了一个数据窗口,每次只和窗口中的样本点去做连接,而数据窗口会在平面内不断滑动,直到覆盖所有的样本点。
卷积层涉及到的参数有3个:
(1)深度depth:有多少个神经元,深度就是多少。经过卷积层的输出也会有depth,这个参数与有多少个神经元密切相关。
(2)步长stride:窗口滑动区域的长度,一次滑动的多少格,步长就是多少。
(3)填充值zero-padding:在外围填充数字的长度。假如是3 ∗ * 3的图像,滑动窗口定义的是2 ∗ * 2,步长为2,则当窗口移动时现有的大小没有办法是窗口正常滑动,所以会在外围补一圈,使窗口移到末尾时刚好除尽。这时填充值是1。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面三幅图是卷积过程,前面3个红色的矩阵是1个神经元,因为是RGB3通道,所以分别计算了3次。通过前后滑动窗口的移动我们可以发现步长为2,外面填充了1圈0,所以填充值为1,第一幅图中3个窗口对应位置的值相乘再相加得到最后的值-3。一组固定的权重和不同窗口内数据做内积的过程就是卷积过程。
此外我们发现卷积层具有参数共享机制,即对同一个神经元而言,不管窗口滑到哪,每个神经元连接数据窗的权重是固定的。 参数共享机制使得需要估算的权重个数大大减少。
神经元又称为filter的原因:一旦固定每个神经元连接权重,就可以将其看作模板,每个神经元只固定一组权重,所以只关注一个特性。

3、激励层

在这里插入图片描述
如上图所示,激励层要做的事情就是把卷积层输出结果做非线性映射。
我们人对于不同刺激的强度会具有不同的感知,类似的,激励函数来确定线性运算得到的结果给之后的神经元多大的刺激。通俗的说,卷积层拿到的值要经过激励函数来判定信号的强弱。如果是非常弱的信号,可能随着逐层传播最后会被消减掉,如果信号强,则激励函数把这个强信号约束了以下,然后传到下一层时让信号变成一个合理的大小。
非线性映射主要有如下几种:
1、Sigmoid
在这里插入图片描述
我们可以看到,当数据过大或过小时导数约等于0,这会出现问题,将不会再迭代下去。
2、Tanh
在这里插入图片描述
Tanh相对于Sigmoid的好处是对称中心回到了原点,但同样会面临和Sigmoid同样的问题。
3、 ReLU
在这里插入图片描述
优点是收敛快,求梯度简单;但是较脆弱。脆弱的原因是如果值不小心跑到了数轴左边,又会面临和上面相同的问题。
在这里插入图片描述
如上图所示,RELU如果在数据域中,会逐步优化,但是一旦跑出数据域就不会再回来。
4、 Leaky ReLU
在这里插入图片描述
针对 ReLU的不足,后来做了优化,形成了 Leaky ReLU。
函数为:
在这里插入图片描述
与ReLU相比,在数轴左边是不会出现导数约等于0从而停止迭代的情况。
优点是不会“饱和”或挂掉,计算也很快。
5、指数线性单元ELU
在这里插入图片描述
优点是所有ReLU有的优点都有,不会挂,输出均值趋于0。
但是因为有指数存在,计算量略大。
6、Maxout
在这里插入图片描述
它计算是线性的,不会饱和也不会挂掉,但缺点是多了好多参数。
上述就是常用的几种非线性映射,在实际使用是最好不要用sigmoid,我们可以首先选择RELU,但是在用到过程中要小心,如果RELU失效,我们可以试试Leaky ReLU或者Maxout。在某些情况下tanh也有不错的结果,但是很少。

4、池化层

池化层位置是夹在连续的卷积层中间,作用是压缩数据和参数的量,减小过拟合。
在这里插入图片描述
如上图所示,压缩后图像与原来图像内容差不多,但这是输出的数据量就减少了,之后和其连接的权重的边也会变少,所以在一定程度上可以压缩数据。
池化层一般有两种方式压缩数据,一种是Max pooling取最大值,另一种是average pooling取平均值。
在这里插入图片描述
上图是取最大值进行数据压缩。取好数据窗口,把窗口内最大的值取下来。上图由16个参数变为4个参数。

5、全连接层(FC layer)

在卷积神经网络尾部会有一个全连接层,两层之间所有神经元都有权重连接。因为前面卷积层不断的做参数共享把信息简化,而激励层激励函数滤掉一些很小的无关紧要的刺激,最后池化层再压缩数据,那么这样可能会使有用的信息损失掉一部分,所以最后加了一个全连接层试图用最后池化层保留的信息去尽量把原有信息还原回来。

5、CNN整体结构

一般CNN的结构依次是:
(1)INPUT
(2) [[CONV -> RELU]*N -> POOL]*M
中间是若干个卷积,在若干个卷积之后会接一个池化层进行下采样。
(3)[FC -> RELU]*K
可能后面会出现全连接层到激励层的情况。
(4)FC:最后是全连接层。

6、训练算法

同一般机器学习算法相同,先定义损失函数Loss function,衡量和实际结果之间的差距。然后找到最小化损失函数的W和b,CNN中最小化损失函数用到算法是SGD(随机梯度下降)。为什么用随机梯度下降而不是梯度下降呢?因为损失函数是一个非凸函数,当用随机梯度下降就出局部最低点时可能就不迭代了,而这个局部最低点可能与全局最低点相差很远。而SGD求出的偏导并不是全量数据的偏导,所以可能会跳过这个最低点,虽然不保证能拿到全局最低,但是SGD却能够找到与最低点比较接近的点。
SGD算法需要计算W和b的偏导,而计算偏导要用到BP算法,BP算法的核心是求导链式法则。
在这里插入图片描述
在这里插入图片描述
BP算法具体操作过程我们不再详细讲解过程,我的上一篇文章中有过程。
BP算法利用链式求导法则,逐级相乘直到求解出dW和db。再利用SGD/随机梯度下降,迭代和更新W和b。

7、卷积神经网络优缺点

1、优点
(1)共享卷积核,对高维数据处理无压力;
(2)无需手动选取特征,训练好权重,即得特征;
(3)分类效果好。
2、缺点
(1)需要调参,需要大样本量,训练最好要 GPU;
(2)物理含义不明确。

8、fine-tuning

fine-tuning就是使用已用于其他目标,预训练好模型的权重或者部分权重,作为初始值开始训练,这样做的原因是我们自己从头训练卷积神经网络容易出现问题,而fine-tuning能很快收敛到一个较理想的状态。我们要做的事情就是复用相同层的权重,新定义层取随机权重初始值,调大新定义层的的学习率,调小复用层学习率。

9、卷积神经网络常用框架

1、Caffe:源于Berkeley的主流CV工具包,支持C++,python,matlab;Model Zoo中有大量预训练好的模型供使用。
2、Torch:Facebook用的卷积神经网络工具包;通过时域卷积的本地接口,使用非常直观;定义新网络层简单。
3、TensorFlow:是Google的深度学习框架;TensorBoard可视化很方便并且数据和模型并行化好,速度快。

四、典型CNN

1、LeNet

这是最早用于数字识别的CNN。结构如下图:
在这里插入图片描述

2、 AlexNet

2012 ILSVRC比赛远超第2名的CNN,比LeNet更深,用多层小卷积层叠加替换单大卷积层。
在这里插入图片描述
在这里插入图片描述
注意CONV5层池化后是66256大小,MAX POOL3与FC6做了一个全连接,FC6与FC7又做了一个全连接,FC7与FC8也是全连接。
卷积层卷积之后输出的矩阵大小怎么计算呢?
(227-11)/4+1=55。4式步长为4,227是224+3,填充值为3。11是滑动窗口的大小。
第一层取了96个神经元,所以拿到的厚度是96。
参数估计:窗口是11 ∗ * 11=121,121每个点与下一个神经元连接时都有一条边,所以有121条边,而有RGB3个通道,每个通道都有121个窗口权重,所以要121 ∗ * 3,又由96个神经元,所以一共有11 ∗ * 11 ∗ * 3 ∗ * 96=35K个参数

3、ZF Net

2013年ILSVRC比赛冠军。
在这里插入图片描述

4、GoogLeNet

2014 ILSVRC比赛冠军
在这里插入图片描述
在这里插入图片描述

5、 VGGNet

2014 ILSVRC比赛中的模型,图像识别略差于GoogLeNet,但是在很多图像转化学习问题(比如object detection)上效果奇好。
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/862599
推荐阅读
  

闽ICP备14008679号