老卫带你学---神经网络与CNN

老卫带你学—神经网络与CNN


1.什么是神经网络

首先这是一个简单的神经网络模型,包含input layer(输入层),hidden layer(隐藏层),output layer(输出层)

不过这样说,可能表达的不是很清楚,因为到底什么是神经元?神经网络与传统分类算法有什么联系?

那么我们从逻辑回归来讲讲他与神经元的关系



我们的逻辑回归给出三个参数来计算x1,x2。蓝色实线是关于z的概率曲线。当z越小的时候,g(z)越小,其概率越小。当z越大的时候,g(z)越大,其概率越大。当z=0时,其函数对应的是一条过a=0.5的直线。直线以上,分为正样品;直线以下,分为负样品。这就是最简单的一种二分类模型。那么如果我们将其1,x1,x2当做神经元,将系数当做权重,这样我们就得到了从逻辑回归衍生出来的最简单的神经网络。将神经元与权重进行线性拟合,然后得到z,(这里的z,在神经网络中称之为激励函数),最终得到属于正样本的概率a。这就是最简单的分类模型。


当然了,我们通过逻辑回归得出的神经网络,是很简单的一种模型,只存在输入层与输出层。那么为了使得具有更好的性能,我们可以在中间加上隐藏层,让他们再多进行一个线性拟合。当隐藏层少的时候,我们就称之为浅层神经网络。

同样的,如果我们的隐藏层多的话,我们称之为深度神经网络。

2.神经网络与传统机器学习方法有什么优势

我们知道什么是神经网络了之后,那么我们就需要明白为什么我们需要使用神经网络,难道传统的机器学习方法不行吗?神经网络到底有什么它自己的优点?

那么简单的一句答案就是:神经网络的分类效果更好

传统的机器学习方法,比如LR(logic regression)逻辑回归,SVM(support vector machine)支持向量机,这些方法都是通过学习一条分类界线,来将不同种类的样本分开。

可是这是最简单的一种分类情况,要是分类的情况很复杂的话,该如何进行处理呢?比如下图的这种情况。

这种情况下,使用传统的分类算法,不是说分不出来,而是需要采用非线性拟合的方法进行对这条边界的学习。可是要是红点在绿点里也有分布,那么所画出的分类界限就是一条扭曲的曲线,计算过程非常的复杂。所以当分类情况复杂的时候,采用传统的机器学习的方法会使得计算过程变得复杂。那么在这种情况下就体现了神经网络的优势,神经网络最大的优势就是可以进行AND,OR操作

逻辑与(AND)操作:

可以通过训练得到weight权重,来调整分类界限的直线,当一条直线确定好了以后,我们可以再加一层hidden layer,通过设置合适的weight权重,使得生成另外一条直线,这样就使得两条直线所包含的区域分为一类。根据分类的复杂程度增加额外的hidden layer。

逻辑或(OR)操作:

同样的可以通过设置weight权重来进行逻辑或(OR操作)。

通过逻辑与和逻辑或就可以处理比较复杂的分类情况。比如下图这种情况,就可以通过神经网络简单的分类出来。

所以,总结一下,神经网络通过其逻辑与和逻辑或的强大功能可以处理更加复杂的分类情况,其分类效果也比传统的机器学习方法要好。

3.详谈卷积神经网络

convelution nerve network(卷积神经网络)是目前很热的一种神经网络,很多其他的网络也是基于CNN来扩展而来的。

与神经网络相比,卷积神经网络依旧是层次网络,但层的功能与形式发生了改变。

卷积神经网络分为五个层次,分别为:

  • data layer(数据层);
  • convelution layer(卷积计算层);
  • ReLU layer(激励层);
  • Pooling layer(池化层);
  • FC layer(全连接层)

接下来针对每一层的功能与作用进行详细的介绍

Data Layer(数据层)

数据层的作用就是对数据进行预处理操作。

比较常见的数据操作方式有以下三种:

  • 去均值
  • 归一化
  • PCA/白化

去均值:把输入数据各个维度都中心化到0。求出训练集的均值,然后将训练集的数据减去均值,这样就可以使得整体的数据靠近0,使得数据中心化到0。这样数据集分布更加均匀和对称,提高后期的训练精度。要是不进行去均值的操作,会出现梯度回传的问题。

归一化:将数据集的范围缩至一定范围内,比如原数据的范围在0-10000之间,我们可以将其压缩至0-100的范围内。但是我们在图像处理中不需要进行这一步,因为图像中的RGB值的范围就是0-255之间。

PCA/白化(去相关):我们有的时候的数据集展示出来是有一定斜率的,那么这样的数据集它们之间是存在相关性的,我们需要将其数据的幅值减少,变成垂直的分布,这样可以去相关性。白化就是将垂直化以后的数据集,在进行一定的归一化而得到的数据集。

谨记:在图像数据处理中,只需要进行去均值,而不需要进行归一化与PCA/白化

convolution layer(卷积计算层)

通过data layer的数据,会进入卷积计算层,这一层的主要目的是得到图片的feature。convolution layer中有许多的神经元,这些神经元我们称之为卷积核或者过滤器(filter)。该层具有局部关联性。设置一个窗口来进行滑动,以一定的步长。每滑动一次得到的窗口会和后面的卷积核进行计算得到一个结果,直到窗口滑动到头为止。

这里写图片描述

这里我们定义几个概念:

  • depth(深度):我们从卷积层得到的结果的深度是由我们的神经元个数决定的,有多少个神经元,深度就有多少。
  • stride(步长):滑动窗口每次滑动的距离
  • zero-padding(填充):有的时候我们的滑动窗口与原图片的大小有冲突,这时可以在图片周围进行填充,以满足滑动窗口的要求。

那么滑动窗口是如何进行计算的呢?滑动窗口会和卷积核进行点对点的相乘,然后再将这些数相加。(这里要注意,卷积核也是有深度的,不是一个一维矩阵,而是根据图片的深度来调整的,比如一个RGB三通道的图片,其所需要的卷积核也是三层)

这里写图片描述

这里写图片描述

在卷积层有一个特别重要的特性,那就是参数共享机制,即我们的我们每个神经元连接滑动窗口的权重w是固定的,不用每次滑动窗口,权重都需要改变。因为我们固定的每个神经元连接滑动窗口的权重,所以我们可以将其看做一个模板,每个神经元关注的是图片的一个feature。

这里写图片描述

这里写图片描述

这里写图片描述

Relu 激励层

激励层把卷积层的输出数据再进行非线性映射。因为我们的filter将卷积核与滑动窗口进行了内积之后,会得到很多的信号,而以我们人类大脑为例,有些微小的信号是不足以决定我们做什么事的,往往是比较刺激的信号来决定我们来做什么事,那么我们采用数学的方法来模拟一个过程,将这些信号处理为合适的刺激信号,以保证传到下一个层次时,可以保持这样的信号大小关系。

这里写图片描述

激励层就是一个函数,将卷积层输出结果做非线性映射。一般我们的卷积层的函数有以下几个:

这里写图片描述

sigmoid

sigmoid函数图像如下:

它有一个致命的问题,那就是越往右,我们所得到的偏导为0,可是大家都知道,我们在训练的时候,是需要通过BP来得到梯度,然后再使用SGD进行梯度下降,如果梯度为0,我们就很难在学到新的东西。

这里写图片描述

Tanh

同时期有人做了一定的优化,提出tanh函数,函数图像如下:

这样可以将对称中心变为0,使得我们BP的时候,有正有负,不会让梯度值膨胀到非常大的地步。但是这样依旧没有处理越往右,偏导为0的问题。

这里写图片描述

Relu

后来就有paper为了解决这种问题,提出了Relu函数,函数图像如下:

右面的值的梯度永远不会为0,而且我们的梯度永远为1,大大的提高了我们收敛的速度,有人做过统计,其收敛的速度是sigmoid的6倍,但是呢,如果不小心数据跑到了左边,依旧会造成梯度为0的问题。

这里写图片描述

leaky Relu

leaky Relu在原来的基础上又加入了0.01这个非常小的参数,使得左边的值的梯度不会为0,这样我们的值不会饱和也不会挂掉,计算也很快。函数图像如下:

这里写图片描述

Elu

后来又有人提出了Elu这个函数,这个函数有Relu的所有优点,并且可以使得均值趋于0。我们在data layer中,有一个去均值的操作,为了使得数据在0处对称,数据有正有负,这样会让后续的数据处理更加的利于学习。而我们通过Relu之后的数据是不对称,所以Elu就是为了解决这样的问题。

函数图像如下:

这里写图片描述

Maxout

同时期又有人提出了Maxout,因为我们在Relu中是两条直线,所以Maxout的作用就是定义两条直线,两条直线的拼接。并且计算是线性的,不会饱和不会挂掉,多了好些参数。

这里写图片描述
这里写图片描述

最后对激励层做一个总结:

这里写图片描述

Pooling layer(池化层)

我们通过conv layer之后,为了知道相关的刺激,我们采用激励层。然后随着几层conv layer之后,数据会变得非常大,这时候需要对数据进行压缩的功能,Pooling layer就是为了解决这样的问题。Pooling layer一般放在连续的Conv layer中间,压缩数据和参数的量,下采样,减少过拟合。

这里写图片描述

池化层一般有两种方式:

  • Max Pooling
  • Average Pooling

一般我们会采用Max Pooling,因为Max pooling会将数据的特征更好的保留下来。

这里写图片描述

FC layer

因为我们通过conv layer之后还要经过Relu layer和Pooling layer,所以为了还原原始图像应有的信息,在这里做一个全连接层,各个神经元之间均有连接。

这里写图片描述

总结一下CNN训练的过程:

这里写图片描述

最后也谈一下CNN的优缺点:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/yixieling4397/article/details/81030422