本文共 776 字,大约阅读时间需要 2 分钟。
在构建模型的时候,对数据进行预处理和批标准化特别重要,因此模型训练并不容易,特别是一些非常复杂的模型,并不能很好的训练得到收敛结果,所以对数据增加预处理,同时使用批标准化能够得到非常好的收敛结果,这也是卷积神经网络能够训练到非常深的层的一个重要原因。
1. 数据预处理
目前数据预处理最常见的方法是中心话和标准化(归一化),中心化相当于修正数据的中心位置,实现方法非常简单,就是在每个特征维度上减去对应的均值,最后得到0均值的特征。标准化也非常简单,在数据变成0均值后,为了使得不同的特征维度有着相同的规模,可以除以标准差近似为一个标准正态分布,也可以依据最大值和最小值将其转换为(-1, 1)之间,也就是归一化,下面是一个简单的图示:
另外,还有一些方法比如PCA等。
2. Batch Normalization
前面在数据预处理的时候,我们尽量输入特征不相关且满足一个标准的正态分布,这样模型的表现一般也较好。但是对于很深的网络结构,网络的非线性层会使得输出的结果变得相关,且不再满足一个标准的N(0, 1)的分布,甚至输出的中心也发生了偏移,这对于模型的训练,特别是深层的模型训练非常困难。所以在2015年一篇论文提出了这个方法,批标准化,简而言之,就是对于每一层网络的输出,对其做一个归一化,使其服从标准的正态分布,这样后一层网络的输入也是一个标准的正态分布,所以能够较好的进行训练,加快收敛速度。
batch normalization的实现非常简单,对于给定的一个batch数据B = {x1,x2, ... ,xn}算法的公式如下:
公式(1)、(2)计算出一个batch中数据的均值和方差,接着使用公式(3)对batch中的每一个数据做标准化,是为了计算稳定引入的一个小常数,通常取10的负5次幂,最后利用权重修正得到最后的输出结果。
转载地址:https://blog.csdn.net/weicao1990/article/details/100523332 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!