卷积神经网络和人工神经网络的差异是什么?
利用卷积神经网络训练的数据预处理
全连接带来的问题:
1.参数w会非常多,这样的话就需要电脑的gpu性能足够好。
2.网络的学习能力会非常强大,较为精确的学习到当前图片或者当前文本的内容,容易出现过拟合的现象。
为了减少参数的数量,并能达到相同的训练效果,我们选用卷积神经网络。
卷积神经网络:
去均值的做法是相对原点做了一个平移,即将将所有点(空间向量)减去均值。有人做实验 发现在不做均值处理时收敛速度会很慢。
求均值的方式有两种,方法一,如Alexnet卷积神经网络,有1w张图像,每张图像是227x227x3的,也就相应的表示为一个三维的矩阵。它将这一万图像求和然后除以10000得到均值。方法二,如VGG卷积神经网络是将图像表示为三维的一个空间向量(R,G,B), 然后相应的每一个颜色通道上来求均值。
需要注意的一点是,是在训练集上求这个均值,然后测试集也要利用训练集的均值来进行去均值操作,因为测试集在某种意义上是没有全集的,所以我们只能用训练集的均值。不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以使得数据指标之间具有可比性。也有两种常见的归一化方法。
一、min-max标准化:
也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 - 1]之间。转换函数如下:
二、Z-score标准化方法:
这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1,转化函数为:
其中u为所有样本数据的均值,为所有样本数据的标准差。
- 降维和白化
卷积神经网络结构
卷积神经网络有两种神器可以降低参数数目,第一种神器叫做局部感知野。一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。网络部分连通的思想,也是受启发于生物学里面的视觉系统结构。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域的刺激)。
在图像处理中,往往把图像表示为像素的向量,比如一个1000×1000的图像,可以表示为一个1000000的向量。在上一节中提到的神经网络中,如果隐含层数目与输入层一样,即也是1000000时,那么输入层到隐含层的参数数据为1000000×1000000=10^12。卷积神经网络的局部关联作用可以使得每个神经元只和10×10个像素(局部图像)值相连,那么权值数据为1000000×100个参数,减少为原来的万分之一。而那10×10个像素值对应的10×10个参数,其实就相当于卷积操作。隐含层的每一个神经元都可以看做是一个filter,那么就相当于有10000个卷积核。可以把每个filter比作人,每个人有自己的看待事物的原则(权重w),我们需要多个人来捕捉不同的信息(一个人可能能看到另外一个人看不到的信息)来对图片信息进行学习。
而每一个神经元开一个窗口(receptive)通过滑动,对整幅图像感知(从左到右从上往下滑动),上图中的stride指滑动的步长。深度(depth)是指有下一层(隐层)有多少个神经元,或者叫filter,每个人看完之后就会得到自己观念中的一幅图,有n个人(filter)就会有n个图,即depth的大小。如果原图像大小是32x32的,而窗口大小是5x5,这样会导致窗口不能正好从最左侧不多不少的滑到最右侧。所以一般会通过对图像周围填充0来使得滑动窗口很合适的能从图像左侧滑到右侧。(步长小可以学习的很细致,但是太小时计算量就会很大)
上图中展示的卷积的过程,7x7x3的原图像,有w0和w1卷积核,即depth为2,3x3x3的窗口,窗口滑动步长为2,窗口中相应的权重与对应图像矩阵相乘然后求和,三个通道的值再对应相加得到输出值。最后生成3x3x2的矩阵,depth是2(两个过滤器)。
局部连接中,每个神经元都对应10x10的局部区域,隐含层有10000神经元,则每个对应100个参数,这100个参数在任何局部区域中的都是不变的,体现了一个人看待外界是都有一个不变的原则,即权值共享的原理。如下图,窗口在滑动过程中,四条连接线的权重(w1,w2,w3,w4)保持不变。
激励层
激励层中要判断哪部分信息要往后传递,那部分信息保留(做一个非线性的映射)
- 在神经网络中我们利用BP做反向传播利用sigmoid或者tanh作为激励函数,过程中会利用莲式求导法则,sigmoid或者tanh函数趋于平滑是求导后值趋近于零,那么在调节权重w时,w= w - wt, wt的值非常小,导致整个神经网络模型训练速度会非常慢。
2.针对sigmoid函数和tanh激活函数的问题,Relu运应而生。当x < 0时,y = 0; 当x > 0时, y=x; 但是当x < 0时,y值求导为0,会使得网络模型停止学习,由此提出了leaky Relu. 即当 x< 0时,y = ax, a可以取很小的值。
sigmoid函数可能会使得神经网络出现梯度消失。(但是RNN网络中的激活函数却不用relu,原因是使用relu会出现梯度爆炸问题,梯度消失可以通过一些方法进行调节,但是梯度爆炸很难解决。)
下采用使得图像的维度减少。
池化层可以采用最大池化或者平均池化的方法,上图中是利用了max pooling,窗口大小为2x2,步长为2.
卷积神经网络后面不一定要有全连接层,只是因为前面做了很多减少参数,降维等运算,简单理解全连接层的作用就是还原信息。