反向传播(Back Propagation,BP)算法
尽可能使用GPU,提速明显
主要部件
一、全连接层

实例:利用BP神经网络做车牌数字识别
-
预处理

上图分别为:原始RGB图像–>灰度化–>二值化处理得到黑白图像 -
使用5行3列的窗口在二值化处理过后的图像上进行滑动,计算白色像素所占的比例
当滑动到边缘可能出现越界情况时,可以补一列0或改变滑动窗口大小(变成5* 2等),最后得到5*5的矩阵

-
将5* 5的矩阵按行展开成1*25的行向量,作为神经网络的输入层

-
输出层,期望输出0-9,使用one-hot编码。0对应的编码为1000000000,1对应的编码为0100000000,以此类推


二、卷积层
-
把卷积核放到特征矩阵Image上进行滑动,每位对应相乘再相加得到一个值。每滑动一次得到一个结果,最后得到3*3的卷积结果
-
卷积目的:进行图像特征提取
-
卷积特性:拥有局部感知机制(滑动窗口在Image的局部上滑动);权值共享(卷积核不变)

-
与普通神经网络的比较:CNN大大减少所需要的参数

-
计算过程:卷积核1中的粉色在R上滑动,第一个位置得到0;卷积核1中的绿色在G上滑动,第一个位置得到0;卷积核1中的蓝色在B上滑动,第一个位置得到1,故卷积核1得到的黄色输出特征矩阵左上角为0+0+1=1;其他位置依次
,
注意:
由于输入特征矩阵为三维,故卷积核同样为三维
输出特征矩阵的层数与卷积核个数相同 -
加上偏移量bias的计算:
若卷积核1的偏移量为-1,则黄色输出特征矩阵变为

-
加上激活函数的计算

不建议使用很大的学习率进行学习,可能导致很多神经元失活 -
卷积核滑动过程中出现越界时,使用padding补0,补0之后的矩阵尺寸由4个因素决定

三、池化层
- 在卷积神经网络中,卷积层之间往往会加上一个池化层。池化层可以非常有效地缩小参数矩阵的尺寸,从而减少最后全连层中的参数数量。使用池化层即可以加快计算速度也有防止过拟合的作用。
- 在图像识别领域,有时图像太大,我们需要减少训练参数的数量,它被要求在随后的卷积层之间周期性地引进池化层。池化的唯一目的是减少图像的空间大小。
- 池化层目的:对特征图进行稀疏处理,减少数据运算量
- 最大下采样层,取最大值。即第一行第一个位置=max{1,1,5,6}=6;第一行第二个位置=max{2,4,7,8}=8;第二行类似

- 平均下采样层,第一个位置=(1+1+5+6)/4=3.25
- 池化在每一个纵深维度上独自完成,因此图像的纵深保持不变。即channel不变,只改变特征矩阵的w和h
- 一般池化和大小和步距一样

反向传播过程中
四、误差的计算


五、误差的反向传播



六、权重的更新

由于算力等等的限制多采用分批次样本进行求解

由于分批次样本求解的过程损失梯度总是指向当前批次最优的方向,因此引入优化器
优化器可以使网络得到更快的收敛
优化器optimazer
- SGD
缺点:
- 易受样本噪声的影响(当有数据标注错误时,某一批次的梯度方向可能不是指向正确的梯度方向)
- 可能陷入局部最优解

-
SGD+Momentum
解决了SGD中易陷入局部最优解的情况

-
Adagrad
缺点:学习率下降的太快可能还没收敛就停止收敛

-
RMSProp
改进了Adagrad优化器,多添加了 η 和 1 − η \eta和1-\eta η和1−η两个参数控制衰减速度

-
Adam

优化器比较

学习视频:https://www.bilibili.com/video/BV1b7411T7DA?t=10
https://www.bilibili.com/video/BV1M7411M7D2?t=83

6万+

被折叠的 条评论
为什么被折叠?



