由于上周卷积神经网络学习的不够深入,因此这周学习卷积神经网络,通过带着老师提出的问题,我不断查阅资料,了解了卷积神经网络为什么叫“卷积”,了解了其每一层的作用以及对激活函数的选择。但是目前我对数学推导还没有掌握的那么深入,在接下来的时间里,我会继续加强学习,在大好基础的同时不断提升自己的实践能力。
卷积神经网络主要由这几类层构成:输入层、卷积层,ReLU层、池化(Pooling)层和全连接层(全连接层和常规神经网络中的一样)。将这些层叠加起来,就构建出了一个完整的卷积神经网络。在实际应用中往往将卷积层与ReLU层共同称之为卷积层,所以卷积层经过卷积操作也是要经过激活函数的。具体说来,卷积层和全连接层(CONV/FC)对输入执行变换操作的时候,不仅会用到激活函数,还会用到很多参数,即神经元的权值w和偏差b;而ReLU层和池化层则是进行一个固定不变的函数操作。卷积层和全连接层中的参数会随着梯度下降被训练,这样卷积神经网络计算出的分类评分就能和训练集中的每个图像的标签吻合了。
知道了神经网络的基本概念,那么我们就要了解,为什么要卷积,什么是卷积?
首先,我们要明白什么是卷积:所谓两个函数的卷积,本质上就是先将一个函数翻转(如下图1、2所示),也就是卷积的“卷”的由来,然后进行滑动叠加(如图3、4所示),在这个位置对两个函数的对应点相乘,这个过程是卷积的“积”的过程。
连续形式:
从上面两个公式可看出,我们令 x=τ,y=n-τ,那么 x+y=n
那么,为什么要用卷积神经网络呢?
全连接的形式:
图中s是由矩阵乘法产生,响应层的每一个神经元,都会受到输入层每一个神经元的影响,是一种稠密的连接方式。
卷积操作:
从上面两幅图可看出,与“全连接”相比,“卷积操作”更加简单。在全连接中,计算每层的输出时,权重矩阵中的元素只作用于某一个输入元素一次;而在卷积神经网络中,卷积核中的每一个元素将作用于每一个局部输入的特定位置上。根据参数共享的思想,我们只需要学习一组参数集合,而不需要针对每一个位置的每一个参数来进行优化学习,从而大大降低了模型的存储需求。
了解了卷积的基本概念,我们就需要考虑卷积神经网络各层之间的关系。
数据输入层主要是对原始数据进行初步处理,使卷积神经网络能有更好的效果。处理方法有:
灰度化
图片一般是通过一个三维矩阵存储的,矩阵的大小为(width,height,3),width是图像的宽度,height是图像的高度,3表示红(Red)、绿(Green)、蓝(Blue)三颜色通道。我们可以认为任何图片是通过不同程度的红色、绿色、蓝色叠加形成。那什么是灰度化呢?由于RGB不能反映图像的形状特征,只是从光学的原理上进行颜色的调配,而我们一般是需要提取图像的形状特征,所以可以将三通道的图片变成一通道,这个过程就是灰度化。
常用的灰度化方法
1、分量法:将图像R、G、B三分量中的一种分量作为灰度图像的灰度值。
2、最大值大:将图像R、G、B三分量中最大的分量作为灰度图像的灰度值
3、加权平均法:将图像R、G、B三分量以不同的权重进行加权平均。人眼对绿色敏感最高,对蓝色敏感最低,故采用心理学灰度公式:Gray = 0.114B + 0.587G + 0.299R
归一化
在神经网络中经常会使用sigmoid函数当做激活函数,sigmoid函数的函数值在[0, 1]之间,当输入{20,30,40,50,60}等远大于1的数据时,经过sigmoid函数的值将会非常的接近甚至是相等,这样就会无法起到应有的训练效果,将数据归一化就可以较好的解决这个问题。而且归一化可以使神经网络更快的收敛。
常用的归一化方法
1、min-max标准化: 也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 - 1]之间。转换函数如下:
2、Z-score标准化方法
这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1,转化函数为:
卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
我们可以把卷积核理解成一个过滤器,原图像经过卷积核的过滤后就可以得到这个图像的特征图谱,使用不同的卷积核就可以得到图像的不同特征。一般用一个正方形卷积核,遍历图片上的每一个像素点。图片与卷积核重合区域内相对应的每一个像素值乘卷积核 、内相对应点的权重,然后求和,再加上偏置后,最后得到输出图片中的一个像素值。
卷积层计算方法(F表示每一张特征图,W表示卷积核):
自然中很多的关系都是非线性的,因此,需要给卷积层输出的线性结果通过一个激活函数加一个非线性的关系。激活函数是参考了生物上神经元的机制,ReLU当输入小于0时,输出为零,即失效;大于零输出则为本身。
常用的非线性激活函数有sigmoid、tanh、relu等,前两者sigmoid/tanh比较常见于全连接层,后者relu常见于卷积层。
sigmoid的函数表达式如下:
因此,sigmoid函数g(z)的图形表示如下( 横轴表示定义域z,纵轴表示值域g(z) ):
压缩至0到1有何用处呢? 用处是这样一来便可以把激活函数看作一种“分类的概率”,比如激活函数的输出为0.9的话便可以解释为90%的概率为正样本。
ReLU激励层
实际梯度下降中,sigmoid容易饱和、造成终止梯度传递,且没有0中心化。怎么办呢?可以尝试另外一个激活函数:ReLU,其图形表示如下:
Leaky Relu
Relu 有一个问题就是所有负值输入后都立即变为零,这降低了模型根据数据进行适当拟合或训练的能力。这意味着任何给 ReLU 激活函数的负输入都会立即把值变成零。而且当 Relu 进入负半区的时候,梯度为 0,神经元此时不会训练,就会产生所谓的稀疏性。
Leaky Relu 是 Relu 的改进版本,当输入值是负值时,函数值不等于 0,给了一个很小的负数梯度值,α通常为 0.1。这个函数通常比 Relu 激活函数效果要好,但是效果不是很稳定,所以在实际中 Leaky ReLu 使用的并不多。 其函数图如下:
小结: 对于多层神经网络,用于隐藏层的激活函数通常为ReLu及其变体,这也是最常用的激活函数。
对于二分类网络,使用 sigmoid 作为其输出层的激活函数;对于多分类网络,使用 softmax 作为其输出层的激活函数。
池化,即取区域平均或最大(如下图所示),池化层夹在连续的卷积层中间,作用为1.使特征图变小,简化网络计算复杂度,减少下一层的参数和计算量,防止过拟合;2.进行特征压缩,提取特征,保留主要的特征;保持某种不变性,包括平移和尺度,尺度不变性也就是增大了感受野。。简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
1、flattening宽度多少合适?
张量扁平化(CNN的Flatten操作)是卷积神经网络中的一个常见操作。这是因为在全连接层接受输入之前,传递给全连接层的卷积层输出必须被扁平化。在CNN输入张量形状的文章中,我们了解到卷积神经网络的张量输入通常有4个轴,一个用于批处理大小,一个用于颜色通道,还有一个用于高度和宽度【即:批量大小、通道、高度、宽度】,要拉平张量,我们至少需要两个轴。这样一来,我们就可以从尚未平坦的东西开始。
2、全连接层能否使用dropout?
dropout 能够避免过拟合,我们往往会在全连接层这类参数比较多的层中使用dropout;在训练包含dropout层的神经网络中,每个批次的训练数据都是随机选择,实质是训练了多个子神经网络,因为在不同的子网络中随机忽略的权重的位置不同,最后在测试的过程中,将这些小的子网络组合起来,类似一种投票的机制来作预测,有点类似于集成学习的感觉。
本周继续上周的任务,学习卷积神经网络,解决了一些之前不理解的问题,相比上周,明显有了一定的进步,对卷积神经网络有了更加深入的了解,但是还远远不够,并且由于本周事情比较多,精度论文没有完成,下周会合理安排自己的时间,在完成任务的同时保证质量的不断提升。