1、对网络的权重进行随机初始化
2、对网络做前向计算,即将输入数据经过卷积、 Batchnorm, Scale、激活函数、池化等
层后,得到网络的输出值。
3、计算网络的输出值与期望的目标值( Ground Truth)之间的误差。。
4、当误差大于期望值时,将误差反传回网络中,依次求得池化、激活函数、 Scale,
Batchnorm、卷积等网络层的误差。
5、根据各层误差对各网络层的梯度进行计算,再由该梯度去更新特定网络层的参数(例
如卷积层的权重)。
6、重复步骤2到步骤5,反复循环迭代直到网络收敛到期望的目标为止。
为什么要进行归一化?
- 数据存在不同的评价指标,其量纲或量纲单位不同,处于不同的数量级。解决特征指标之间的可比性,经过归一化处理后,各指标处于同一数量级,便于综合对比。
- 求最优解的过程会变得平缓,更容易正确收敛。即能提高梯度下降求最优解时的速度
- 提高计算精度。
什么是激活函数?
神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。
什么是梯度下降?
梯度下降(gradient descent)在机器学习中应用十分的广泛,不论是在线性回归还是Logistic回归中,它的主要目的是通过迭代找到目标函数的最小值,或者收敛到最小值。
Batchnorm:是深度网络中经常用到的加速神经网络训练,加速收敛速度及稳定性的算法。直译过来就是批规范化。
我们都知道,深度学习的话尤其是在CV上都需要对数据做归一化,因为深度神经网络主要就是为了学习训练数据的分布,并在测试集上达到很好的泛化效果,但是,如果我们每一个batch输入的数据都具有不同的分布,显然会给网络的训练带来困难。另一方面,数据经过一层层网络计算后,其数据分布也在发生着变化,此现象称为Internal Covariate Shift,接下来会详细解释,会给下一层的网络学习带来困难。
Batchnorm是归一化的一种手段,极限来说,这种方式会减小图像之间的绝对差异,突出相对差异,加快训练速度。所以说,并不是在深度学习的所有领域都可以使用BatchNorm。
如果直接做归一化不做其他处理,神经网络是学不到任何东西的。
Batchnorm采用了yi=γx−i +β方式,
如果γ 和β分别等于此batch的方差和均值,那么yi不就还原到归一化前的x了吗,也即是缩放平移到了归一化前的分布,相当于batchnorm没有起作用,β 和γ 分别称之为 平移参数和缩放参数,这样就保证了每一次数据经过归一化后还保留的有学习来的特征,同时又能完成归一化这个操作,加速训练。
Scale
该方法将每个特征放缩到给定范围内(默认范围0-1)