卷积神经网络基础
雏形:leNet(输出是灰度图)
1.发展过程
首先是提出了反向传播也就是BP神经网络->利用BP算法训练了LeNet5,标志着CNN面世->
2.全连接层
将图片进行灰度化,在进行二值化
使用五行三列的窗口进行窗口的滑动,每滑动到一个地方就计算白色占总的比例,如果窗口越界了可以补零或者改变窗口大小,然后得到5✖5矩阵,将其展开拼接成一个行向量
就可以把行向量当成神经网络的输入层
然后再看输出层
one-hot编码是我们常用的对标签进行编码的方式
这样就有了输入和期望的输出,就能对网络进行训练了
我们将输入层节点设为25,输出层设为10,隐藏层节点可以看情况设置
3.卷积层
是CNN中独特的网络结构
卷积其实就是一个滑动窗口在特征图上进行滑动并计算,以一个3*3的卷积核为例
卷积的目的就是进行图像特征提取
卷积具有两个特性:
1.拥有局部感知机制
2.权值共享
权值共享的优势
进一步进行了解卷积
假如我们输入一张彩色图像,他就分为RGB三个分量
输入特征矩阵
三个矩阵分别卷积后的矩阵相加得到输出矩阵
卷积核维度要和输入特征矩阵维度保持一致
卷积后进行求和操作得到一个卷积层,不同卷积核进行卷积得到不同输出特征矩阵,然后将不同卷积核得到的输出特征矩阵进行拼接,得到整个输出的特征矩阵
卷积层的特点:
1.卷积核的深度(channel)与输入特征层的深度(channel)相同
2.输出的特征矩阵深度(channel)与卷积核个数相同
问题1:加上偏移量bias该如何计算?
在每层输出特征矩阵中加上偏置即可
问题2:加上激活函数该如何计算?
为什么引入激活函数:是为了引入非线性因素,使其具备解决非线性问题的能力
常用的激活函数有
问题3:如果卷积过程中出现越界情况该怎么办?
使用padding方式在周围补上0
在卷积操作过程中,矩阵经卷积操作后的尺寸由以下几个因数决定:
1.输入图片的大小
2.Filter大小F*F
3.步长S
4.padding的像素数P,一般是左右上下都补零
4.池化层
池化层的目的是对特征进行稀疏处理,减少数据运算量
Max Pooling下采样层(取最大值作为特征输入值)
AveragePooling平均下采样层(相加取平均值)
池化层的特点:
- 没有训练参数
- 只改变特征矩阵的w和h,不改变深度channel
- 一般pool size和stride相同
5.补充:反向传播
5.1误差的计算
为什么要用softmax?
因为输出不满足一个分布,所以通过其满足一个概率分布
经过softmax处理后所有输出节点概率和为1
5.2损失的计算
输出节点之间互不相关指他们的指不满足任何的分布,比如我们判断一张图片是人还是男人,输出就是不相关的
得到误差之后就可以开始进行误差的反向传播
以w11(2)的误差梯度为例
把看作常数a1
对o1求偏导时o2就是常数
5.3权重的更新
在实际应用中往往不可能一次性将所有数据载入内存(算力也不够),所以只能分批次(batch)训练。也可就是将数据分成N等分
ImageNet项目是一个用于视觉对象识别软件研究的大型可视化数据库。超过1400万的图像被ImageNet手动注释,以指示图片中的对象
若使用整个样本集进行求解损失梯度指向全局最优方向
若使用分批次样本进行求解,损失梯度指向当前批次最优方向,训练过程更不平稳
5.4优化器(optimazer)
目的使网络得到更快的收敛
1.SDG优化器(Stochastic Gradient Descent):慢但是路径很正确
缺点:1.易受样本噪声影响(就是有些样本的标注可能是错误的) 2.可能陷入局部最优解
2.SGD+Momentum优化器:最常用
相较于SGD加上了一个动量,会考虑上一次的梯度方向,就可以有效抑制噪声的干扰
3.Adagrad优化器(自适应学习率):比较常用,效果好
缺点:学习率下降的太快可能还没收敛就停止了