首页 > 程序开发 > 综合编程 > 其他综合 >

王小草【深度学习】笔记第二弹--细说卷积神经网络

2016-10-25

先来回忆一下神经网络的结构,如下图,由输入层,输出层,隐藏层组成。每一个节点之间都是全连接,即上一层的节点会链接到下一层的每一个节点。

1. 神经网络与卷积神经网络

先来回忆一下神经网络的结构,如下图,由输入层,输出层,隐藏层组成。每一个节点之间都是全连接,即上一层的节点会链接到下一层的每一个节点。
QQ截图20160815145028.png-124.1kB

卷积神经网在神经网络的基础上有所变化。下图中,每一列都表示一个层级,这些层级的类型不同,有CONV,RELU,POOL,FC等。这些层的结构与功能下面会详细说。
QQ截图20160815145041.png-169.3kB

那么为什么我们要用卷积神经网去代替神经网络呢?

卷积神经网之所以这些年如此如火如荼,原因在于它在图像处理上的优秀变现。当然深度神经网络(DNN)也可以做图像识别。但是,我们知道图像的维度是非常大的,几千维的像素加上3维的颜色,假设DNN有两隐层,因为DNN是全链接,所以为产生几千维*几千维的权重需要被估计,这样的计算不是不可以,但是非常的消耗资源。而卷积神经网恰巧可以规避掉这个缺陷。

2. 卷积神经网络的层级结构

卷积神经网有如下层级结构,每一个层级下面都会详述。
QQ截图20160815150237.png-28.7kB

2.1 输入层

输入层我们可以看做是对数据做的预处理,数据的预处理使得输入数据的质量增高,从而也能配合模型做最优的结果。预处理的方式有如下几种:

1.去均值
去均值就是将输入数据的各个维度都中心化到0。求出原始数据的均值,然后将每个数据减去均值,计算后的新数据均值就变成0了。下图中直观可见,就是将数据的分布平移到以0为中心(每个特征的均值都是0)。

QQ截图20160815151024.png-70.5kBvc2z0ru3ts6no6iyu9K7tqjKxzAtMdauvOSjqaOs1eK49tTazbzP8cq2sfDW0LK7yrnTw6Os1eLA79a7ysfEw7P2wLTLtdK7z8KjrNLyzqrNvM/xtcRSR0KxvsC0vs3Kx9TaMC0yNTXWrrzko6y3+bbIysfSu9H5tcSjrLnKsrvQ6NKq1/a199X7oaPTyc/CzbzKx7np0ru7r7rztcTK/b7doaM8L3A+DQo8cD48aW1nIGFsdD0="QQ截图20160815151033.png-94kB" src="https://www.2cto.com/uploadfile/Collfiles/20161025/201610250933322038.png" title="\" />

这里有一点要注意,我们在读外文文献或翻译文献的时候,有点时候,normalized意思是正则化,大家学习的时候注意分辨就行。

3.PCA
PCA是主成分分析,一种降维的方法,经常被使用,可以解决共线性(特征之间彼此相关),同时也降低了维度,简化了模型,提高了模型的性价比。效果如下图

QQ截图20160815151837.png-63.6kB

4.白化
白化其实是指将特征转换成正态分布。但是这个我们一般不做,尤其是使用随机梯度法计算损失函数最小值的时候。效果如右下图

QQ截图20160815151844.png-86.8kB

2.2 卷积计算层

我们已经提过在图像处理上,之所以卷积神经网优于普通的深度神经网是因为它可以避免巨多维度的计算,那到底是如何避免的呢,卷积计算层绝对功不可没。

局部关联:
首先假设图像上的某个像素点与和它向邻近的点是相似的,也就是对于图像上的某块小区域,区域内的点因为相近,所以相似。

基于这个假设,某个神经元就可以只对这一块小区域做连线,但不是对整个小区域做一根连线,而是,对整个区域中的每个点做连接。这个小区域会移动的,它从左到右移动,然后向下一行再从左到右移动,将这个图片都遍历一遍,每一次移动都只是对新的小区域内的点做连接

看下图,蓝色框框内是一个层,这个层里有5个神经元,这5个神经元都是独立的个体,他们会各自对输入层(也就是粉红色区域)中的每个小区域都做一次遍历。
QQ截图20160815162622.png-35.3kB

这个窗口的滑动会涉及到下面几个参数:
1.深度depth:对应的是上图中蓝色区域内的神经元个数。
2.步长stride:是小窗口移动的步数,也就是移动的格子数,如果步长为2,那就是每次向右移动2个格子。
3.填充值zero-padding:小窗口根据给定的步长向有移动,最后一次移动可能会超出原有的区域,这个时候我们去认为地在外增加若干圈为0的小格子作为补全。

来看下面几个图的变化,可能会有助于理解:
左边紫色区域为输入层,有三个输入节点(分别是RGB),并在外围补了一圈为0的小格子。
中间粉色的为两个神经元,每个神经元分别要去对应三个输入节点,所有相应地有3个权重居中,格子里的数即为权重参数。
右边绿色的是卷基层的输出,上下两个分别对应粉色的两个神经元。

第一步,第一个神经元对输入层的三个节点的第一个窗口做内积计算,得到最终结果为绿色输出矩阵中第一列第一行的-3
QQ截图20160815162643.png-124.3kB

接着,小窗口右移两个步长,再做一次对应的内积,得到输出矩阵中第一行第二列的-3.
QQ截图20160815162656.png-119.9kB

接下去,以此类推:
QQ截图20160815162704.png-116.7kB

QQ截图20160815162713.png-131.2kB

在卷积层,假设每个神经元连接数据窗口的权重是一致的的,即权重共享机制。因为对于每个神经元它们的分工是独立相异的。比如,第一个神经元负责记录图像的颜色特征,第二个神经元负责关注图片的轮廓信息,第三个神经元负责关注图像的纹理特征…也就是说每个神经元只负责关注一个特性。
另外,因为权重共享机制,权重的维度便大大地降低了!
一组固定的权重与不同窗口内的数据做内积的过程,就叫做“卷积”。

2.3 激励层

激励层的功能就是把卷基层输出的结果做一个非线性的映射。关于非线性的映射我们在笔记第一弹中已经详细讲过,就是将线性函数的输出结果作为一个输入变量放进sigmoid函数中,输出的值范围就在[0,1]之间了。在卷计算机网的激励层,就是将卷积层的输出作为输入变量放进一个函数中,从而做一个非线性的转换。

在很多paper中会将激励层包含在卷积层中,这里我们将它单独作为一个层来看。

激励层的函数有多种,下面一一解释各个激励函数:

1.sigmoid
这个激励函数我们不陌生,是逻辑回归中的非线性转化函数,也是DNN中感知器中的激励函数。它的图形如下,当z=0时,g(z)=0.5,当输入z > 0,输出 > 0.5,y = 1。当输入z < 0,输出 < 0.5,y = 0。

但是!我们一般不使用sigmoid函数来作为卷积神经网络的激励函数。因为它存在一个严重的缺陷:当输入的z很大的时候,输出的值就会无限逼近与1,那么此时的斜率就几乎约等于0了(无限接近1的时候几乎是在一条平行线上了)。而当我们使用BP算法利用随机梯度下降反向传播损失的时候,会去求损失函数的偏导数,梯度为0导致&Delta;w = 0。这叫“梯度弥散”形成了“饱和”。一旦出现这个问题,激励函数就挂掉并不得抢救。在模型的运行过程中,会发现损失不小却一直维持在一个水平不在下降。

QQ截图20160816095118.png-30.1kB

2.Tanh
Tanh是与sigmoid类似的,也是呈现一个S型,与sigmoid存在相同的的“梯度弥散”问题。
不同之处就是中心点为0。

QQ截图20160816095130.png-25kB

3.RELU(The Rectified Linear Unit/修正线性单元)
RELU是卷计神经网络中最常用的激励函数,如下图,它是由两条射线组成:
当x > 0时,y = x,类别为1
当x < 0时,y = 0,类别为0

当x > 0 ,y不会随着x的增大而接近某个值,梯度(斜率)永远为1.因为BP算法中需要裘每一层的梯度,而RELU求解梯度的简单行提高了BP算法的效率。

但是RELU也有缺点,它比较脆弱,若输入的数据在某一个幅度范围内,它收敛地非常非常快,但是一旦超出了这个范围,就会不再被激活了。所以使用RELU要非常小心,要去监控它的输入与输出是否活跃,一旦挂掉边无法在激活。

QQ截图20160816100542.png-22.7kB

4.Leaky ReLu
这个函数的形式如下,a是一个参数
QQ截图20160816102529.png-8.8kB QQ截图20160816102542.png-11.8kB

这也是一个由两条射线组成的函数,与RELU不同的是,当x<0时,形成的是一条斜率为a的射线。
这样保证了无论x取什么值,都会求到不等于0的斜率,在SGD反向传播时避免了”饱和”,而且计算得也很快。

QQ截图20160816102412.png-25kB

5.ELU指数线性单元
ELU的函数如下形式:
QQ截图20160816103305.png-17.6kB

当x > 0 时,仍然与前两个激励函数相同
当x < 0 时,时一条在x轴下方y轴左边的指数函数。

ELU具备了RELU的所有优点,而且不容易挂掉,输出的均值区域0.
但是缺点是,因为指数的存在,计算量略大。

QQ截图20160816103247.png-58kB

6.Maxout
函数形式如下:
QQ截图20160816103728.png-17.5kB

由函数可见Maxout也是由两条直线拼接起来的。

Maxout的优点是计算是线性的,不会饱和,不容易挂掉。
但缺点是增加了参数的数量(函数中的两个w和b)。

激励层的经验:

QQ截图20160816104036.png-51.3kB

2.4 池化层 pooling layer

池化层是夹在连续的卷基层中间的(卷基层中包含了激励层)

池化层的过程非常简单,就是将数据进行压缩,比如下图,将一张图片的维度进行压减。
QQ截图20160816110803.png-45.7kB

压减的形式是这样的,之前我们假设过一个点与它邻近的点有相似性,所以针对同一个窗口内的点,我们选其中一个点或是一个数来代替窗口内的所有点。下图中,将图片分成了4各区域,每个区域中选出了最大值的点来代替整个区域,于是4*4的维度就压缩到了2*2了。另外也可以去窗口内的均值来代替。

QQ截图20160816111007.png-83.5kB

这个过程叫做downsampling,向下取样。有两个优点,
第一,压缩了数据和参数的量。
第二,缓解了过拟合。

2.5 全连接层 FC layer

全连接的方式其实就是深度神经网络中的连接方式。通常全连接层放在卷积神经网络的尾部。

之所以在最后还要使用全连接是为了还原信息。虽然全连接会增加非常多的参数以及计算的复杂度,但是只在最后一层进行全连接还是可以承受的,况且它可以还原更多信息量,总体而言“性价比”比较高。

总结:
至此,我们解释了卷积神经网络中的5个主要的层次,一般CNN的结构依次是:

QQ截图20160816111655.png-12.8kB

3. 案例过程展示

将以下这张美女图作为CNN的输入
QQ截图20160816113325.png-218.3kB

第一层卷基层的输入的权重矩阵与输出。左边每一列是一个权重,我们发现每个格子中的形状各异,这个可以理解为每个权重矩阵都会关注某个特征,比如下半部分有颜色说明关注的是图片的颜色,有些关注的是从左导游的文理,有些关注的是从上到下的纹理,等等
QQ截图20160816113335.png-166.8kB

到第二层卷基层,其实我们人眼已经无法去分辨图片中的是什么了。
QQ截图20160816113348.png-217kB

QQ截图20160816113358.png-118.5kB

QQ截图20160816113410.png-120.5kB

QQ截图20160816113421.png-111.3kB

4.CNN优缺点

4.1 优点

1.共享卷积核(卷基层共享权重矩阵),对高维数据处理无压力(适合图像处理)
2.无需手动选取特征,训练好权重,即得特征。
3.分类效果好

4.2 缺点

1.需要调整参数,需要大样本,训练最好要有GPU
2.是一个黑盒,物理含义不明确

相关文章
最新文章
热点推荐