文章目录
- 1、卷积层
- 1.1、激活函数
- 1.3、sigmoid
- 1.4、Tanh
- 1.5、ReLU
- 1.6、Leaky ReLU
- 1.7、误差计算
- 2、池化层
- 3、全连接层
- 4、CNN训练
参考链接1
参考链接2
1、卷积层
卷积层(Convolutional layer),这一层就是卷积神经网络最重要的一个层次,也是“卷积神经网络”的名字来源。卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。
卷积运算的目的是提取输入的不同特征,某些卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网路能从低级特征中迭代提取更复杂的特征。
卷积层的作用是对输入数据进行卷积操作,也可以理解为滤波过程,一个卷积核就是一个窗口滤波器,在网络训练过程中,使用自定义大小的卷积核作为一个滑动窗口对输入数据进行卷积。
卷积过程实质上就是两个矩阵做乘法,在卷积过程后,原始输入矩阵会有一定程度的缩小,比如自定义卷积核大小为3*3,步长为1时,矩阵长宽会缩小2,所以在一些应用场合下,为了保持输入矩阵的大小,我们在卷积操作前需要对数据进行扩充,常见的扩充方法为0填充方式。
卷积层中还有两个重要的参数,分别是偏置和激活(独立层,但一般将激活层和卷积层放在一块)。
偏置向量的作用是对卷积后的数据进行简单线性的加法,就是卷积后的数据加上偏置向量中的数据,然后为了增加网络的一个非线性能力,需要对数据进行激活操作,在神经元中,就是将没有的数据率除掉,而有用的数据则可以输入神经元,让人做出反应。
卷积核(是一种特征)对原图进行卷积,是把原图中包含这种特征提取出来
卷积计算(通过卷积核在图像上滑动计算,相乘、求和、取平均)结果等于1表示滤框中的值和卷积核的值完全一样
1.1、激活函数
激活函数,最常用的激活函数目前有Relu、tanh、sigmoid,着重介绍一下Relu函数(即线性整流层(Rectified Linear Units layer, 简称ReLU layer)),Relu函数是一个线性函数,它对负数取0,正数则为y=x(即输入等于输出),即f(x)=max(0,x),它的特点是收敛快,求梯度简单,但较脆弱。
1.3、sigmoid
Sigmoid函数是传统的神经网络和深度学习领域开始时使用频率最高的激活函数。
其优点主要是连续,平滑便于求导;
但是其的缺点也很致命:
1.梯度消失问题(Vanishing Gradient problem):观看图像可知当x>2或x<2时Sigmod输出趋于平滑,导致梯度减小,权重和偏置更新过慢导致网络不更新
2.非零均值特性(none-zero-centered):会使训练震荡达不到最优解,使收敛变慢
3.导数计算复杂,影响速度
1.4、Tanh
Tanh主要解决了Sigmod非零均值特性的问题,但是其还是存在计算复杂和梯度消失的问题。
1.5、ReLU
Relu的主要优点有:
1.大于0时,其导数恒为1,不会存在梯度消失的问题
2.计算速度非常快,只需要判断 x 是大于0还是小于0
3.收敛速度远远快于前面的 Sigmoid 和 Tanh函数
但是ReLu也是有着缺陷的:
1.非零均值特性
2.x<0时,输出恒为0.会使某些神经元永远不会被激活,进而导致参数永远不会更新
1.6、Leaky ReLU
Leaky ReLU 的提出主要是为了解决前面提到的Dead ReLu问题。因为当 x 小于 0 时,其输出不再是 0。虽然同时 Leaky ReLU 具有 ReLU 的所有优点。但是在实际操作中并没有完全证明好于 ReLU 函数。
1.7、误差计算
计算第一个隐藏的结果
计算y1和y2的结果
softmax计算
损失计算
误差反向传播,得到每个节点的损失梯度信息
权重更新(新值 = 旧值-学习率*损失梯度)
分批次训练(每求一次批次进行一次误差计算以及反向传播)
优化器作用就是为了让网络更快收敛
wt+1表示更新后的参数,wt表示更新前的参数a表示设置学习率g(wt)是我们所求的损失梯度
2、池化层
通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。池化方式一般有两种,一种为取最大值,另一种为取均值,池化的过程也是一个移动窗口在输入矩阵上滑动,滑动过程中去这个窗口中数据矩阵上最大值或均值作为输出,池化层的大小一般为2*2,步长为1
池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
池化层的作用是对数据进行降维处理,对于所有神经网络来说,随着网络深度增加,网络中权值参数的数量也会越来越大,这也是导致我们在训练一个大型网络时必须使用大型服务站和GPU加速了,但是卷积神经网络出了它本身权值共享和局部连接方式可以有效的降低网络压力外,池化层也作为一个减低网络压力的重要组成部分,经过卷积层后的数据做为池化层的输入进行池化操作。
池化层的具体作用:
特征不变性,也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。
特征降维,我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。
在一定程度上防止过拟合,更方便优化。
3、全连接层
全连接层( Fully-Connected layer), 把所有局部特征结合变成全局特征,用来计算最后每一类的得分。全连接层往往在分类问题中用作网络的最后层,作用主要为将数据矩阵进行全连接,然后按照分类数量输出数据,在回归问题中,全连接层则可以省略,但是我们需要增加卷积层来对数据进行逆卷积操作。
4、CNN训练
前向传播阶段:
选取训练样本(x,y),将x输入网络中。随机初始化权值(一般情况下选取小数),信息从输入层经过一层一层的特征提取和转换,最后到达输出层,得到输出结果。
反向传播阶段:
输出结果与理想结果对比,计算全局性误差(即Loss)。得到的误差反向传递给不同层的神经元,按照“迭代法”调整权值和偏重,寻找全局性最优的结果。
通过大量图片去训练这个模型,通过前向传播和反向传播的方法,神经网络得到一个结果,将其和真实的结果进行比较误差计算(损失函数),我们的目标就是将损失函数降到最低,通过修改卷积核的参数和全连接每一层的权重来进行微调,使得损失函数最小。