前言
机器学习基本知识——卷积网络基础
参考内容来自b站up主:
https://space.bilibili.com/18161609
一、卷积神经网络背景
卷积神经网络的历史:
二、卷积网络结构
1.全连接层
神经元
将神经元按列进行排列,列与列之间进行全连接,得到BP神经网络
BP算法包括信号前向传播和误差反向传播两个过程:
计算误差输出时按从输入到输出的方向进行;
调整权值和阈值则从输出到输入方向进行。
通过计算每个节点的偏导数,求得每个节点的误差梯度,将得到的损失值反向应用到损失梯度上就打到了误差的反向传播过程。
2.卷积层
卷积层是卷积神经网路中独特的网络结构。
卷积:一个滑动窗口在特征图上进行滑动,并计算(将卷积核上的值与特征图上的值对应相乘,再进行相加,就得到最后矩阵中的一个值,每滑动一步计算一个值,最终得到卷积结果)
卷积的目的就是为了进行图像的特征提取
卷积的特性
- 拥有局部感知机制:以滑动窗口的形式在特征图上进行滑动计算,所以具有局部感知能力
- 权值共享:滑动过程中,卷积核的值不会发生变化,所以又具有权值共享的特性
卷积的过程
实际应用过程中往往是对多维的特征矩阵进行卷积操作
卷积核的深度要和输入特征矩阵一致(这里的深度指的是channel,即通道数),都是三维的,最终卷积得到的矩阵是由三通道的输入特征矩阵和三通道的卷积核分别对应卷积,再对应相加后得到一个卷积矩阵
总结
1、卷积核的cahnnel与输入特征层的channel相同(都是三通道)
2、输出的特征矩阵channel与卷积核的个数相同(通过卷积核1和卷积核2最终得到一个两通道的输出特征矩阵)
思考
1、如果加上偏移量该如何计算
只需要将最终卷积得到的矩阵的每个元素和偏移量进行相加即可
2、加上激活函数该如何计算
常用激活函数
为什么要使用激活函数?
在线性的计算过程中引入非线性因素,使其具备解决非线性问题的能力
Relu激活函数实际上是将负值全部过滤掉,只保留了正值不变,在实际应用中使用较多
在反向传播误差的过程中,如果使用sigmoid激活函数,导数的求解非常麻烦
如果使用Relu激活函数,权重如果进入失活状态后无法被再次激活,所以在训练的过程中,建议不要一开始就使用特别大的学习率进行学习,否则很容易导致大量神经元失活
3、如果在卷积过程中出现越界情况该如何处理
一般强况下,可以使用padding的方式在图像的周围直接补零进行处理,补零后就能够正常地进行卷积,而不会出现越界的情况了
padding的像素p:一般实际应用过程中是两边同时补零,即左右上下进行对称的:
补零操作上图中只补了一边,所以只用加上一个p就够了
N = ( 4 – 3 + 1 )/ 2 + 1 = 2 ,所以最后得到一个2*2的特征矩阵
3.池化层
池化层的目的是为了对特征图进行稀疏处理,以减少数据运算量
MaxPooling下采样
上图是以一个2×2大小的池化核为例进行池化操作,左上角最大值为6,则得到的结果为6
AveragePooling下采样
池化层特点
1、没有训练参数,只是在原始的特征图上进行求最大值或者平均值的操作
2、它只会改变特征矩阵的宽度(w)和高度(h),并不会改变深度(channel)
3、一般池化核的大小(poolsize)和步长(stride)相同,可以将特征图进行一定比例的缩小,计算更加方便(这只是一般情况下,但并不绝对)