在初识神经网络(初识卷积神经网络CNN)篇,对卷积神经网络有了基本的认识。
不过也可以发现一个问题,输入是一张Image,数据信息是确定的;但CNN网络中的数据从哪来?
总不能随便放一个数到CNN网络里,进行图像识别;
想要CNN网络进行正确的识别工作,CNN网络中的数据(weights)需要进行事先训练;那怎么训练这些数据,才能让CNN网络正常工作呢?
这里举一个简单的神经网络例子,说明如何训练CNN网络中的数据(weights):
1 定义基础的神经网络模型:
下图是一个简单的神经网络模型:
(1)该神经网络由两个Fully-connected layers组成:
第一层Fully-connected layer,有两个kernels,第二层Fully-connected layer也是两个kernels,且大小均为211
(2)该神经网络的输入:
是由两个数据组成的Ifmap(Input Feature Map),大小为211
(3)将此Ifmap输入到该神经网络中,得到最后的输出类目:o1和o2
Ifmap—>神经网络—>o1,o2
2 初始化该神经网络
想要这个神经网络跑起来,已经有了输入的Ifmap数据,但是缺少神经网络中神经元的信息;所以,首先我们要进行初始化
初始化该神经网络中的4个kernels;由于是全连接层神经网络,该4个kernels的大小均为211,即211*4=8个数据
初始化4个kernels的偏置参数bias
给这8+4=12个数据一个随机化的数字,初始化该神经网络
3 进行前向推理
有了Ifmap,有了神经网络数据(weights+bias),此时我们就可以进行前向推理:
3.1 Ifmap经过神经网络第一层:
第一个Fully-connected layer的输入Ifmap数据就是(0.05, 0.10)
第一个kernel(w1=0.15,w2=0.20)的输出h1,就是:
同理,第二个kernel(w3=0.25,w4=0.30)的输出h2,就是:
给第一层Fully-connected layer加上一个Activation Function(Sigmoid):
输出h1,h2,就变成:
3.2 第二层:
此时,喂给第二个Fully-connected layer的数据就是 (0.59327 , 0.59688)
第二层第一个kernel(w5=0.40,w6=0.45)的输出o1,就是:
同理,第二个kernel(w7=0.50,w8=0.55)的输出o2同样可以计算得出。
给第二个Fully-connected layer加上Activation Function(Sigmoid):
此时(neto1,neto2)—>Sigmoid—>(o1,o2)
(o1,o2)=(0.75136507, 0.772928465)
4 更新网络
在第3节,得到经过初始化之后的神经网络的输出(0.75136507, 0.772928465);
但是,我们期待的输出是类目2,即期待输出为:(0.01 , 0.99)
此时,我们就要计算误差,并更新神经网络
4.1 求出总误差:
结合实际输出和期待输出,求出总误差:
所以,o1输出端的误差:
同理,o2输出端的误差:
从而,得出总误差:
4.2 对weights求偏导:
有了总误差之后,对前面的权重数据weights改变多少,可以相应纠正这个误差,得到正确输出呢?
我们在这里就可以求得weights对结果的影响大小,即对weight求偏导:
以对w5求偏导举例,即:
4.2.1 偏导内容
问题:w5经过几次计算,到得出最后的总误差?
首先,h1经由w5到neto1,neto1经过sigmoid到outo1,最后,outo1经过误差方差到Etotal;
所以,Etoal对w5求偏导,即等于:
4.2.2 偏导的第一部分:
在上面公式中,偏导的第一部分可以计算得出:
偏导第一部分得到数据:0.74136507
4.2.3 偏导第二部分:
得到数据:0186815602
4.2.4 偏导第三部分:
得到第三部分数据:0.593269992
4.2.5 偏导输出:
所以,总误差对w5的偏导输出即为:
4.3 更新weight:
在4.2节,我们已经知道w5对最后误差的影响,从而可以往正确方向修正w5得到正确输出;此时会用到学习率,学习率的定义代表了在这个方向上的步子;
此时,我们就能得到修正后的w5:
至此,w5就得到更新;
至于w1,w2,w3,w4,w6,w7,w8的更新,可以用同样的方法求得;
4.4 迭代
所有weights更新完后,就可以重新推理过程
把新误差,再次对weights求导,更新神经网络
逐渐迭代,直至神经网络得到想要的输出,至此整个神经网络训练完成。
5 一些问题:
在第4步,只是一个简单的训练原理,在实际中,会遇到各种问题;比如,过拟合,欠拟合…,等等,需要着手调整和解决
同时,学习率的挑选,也不能很随意;
这些问题,在实际过程中,都会遇到。
参考:
[1] https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/
[2]https://towardsdatascience.com/understanding-learning-rates-and-how-it-improves-performance-in-deep-learning-d0d4059c1c10
Original: https://blog.csdn.net/huayangshiboqi/article/details/121174972
Author: huayangshiboqi
Title: 卷积神经网络(CNN)的训练过程(Training)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/628968/
转载文章受原作者版权保护。转载请注明原作者出处!