数据预处理

原始的训练数据中,由于每一维特征的来源以及度量单位不同,会造成特征值的分布范围差异很大,当计算不同样本之间的欧氏距离时,取值范围大的特征会起到主导作用。对于基于相似度比较的机器学习方法(如最近邻分类器),必须先对样本进行预处理。,将各维度特征归一化到同一取值区间,并且消除不同特征之间的相关性,才能获得理想的结果。

数据归一化对梯度的影响

取值范围不同会造成在大多数位置上的梯度方向并不是最优的搜索方向。当使用梯度下降法寻求最优解时,会导致需要很多次迭代才能收敛(优化路径呈"之"字型)。如果我们把数据归一化为取值范围相同,大部分位置的梯度方向近似于最优搜索方向。这样,在梯度下降求解时,每一步梯度方向都基本指向最小值,训练效率会大大提高。

这里我们举一个具体的例子来解释[1]

假如线性函数Ax+By+b=C,X维度数量级是十,Y的数量级是万,那么求出的A就比B大,那么在用梯度下降求解最优解过程中,对A求偏导每次变化是和X成线性的(结果只和x相关),对B求偏导是和B成线性的(结果只与y相关),这样就造成两个维度下降速度不一致的问题,在图像上面显示就是A每次走的step很小,B的step很大,可能导致某一个维度由于数量级较大已经到达最低点,而其他维度由于数量级的差异未到达最低点,先到达最低点的维度需要等待其他维度,走出的曲线震荡性便会较大。

神经网络中的归一化问题[2]

1. 在反向传播算法中有这样一个公式(详情可以看我的另一篇文章《深度学习——反向传播算法》):

 为第  层的误差,  为  层神经元的输出值。如果第  层权重的数量级很大,那么  数量级也会很大,(可以查看误差在不同层之间的关系式),这会导致梯度变化非常大,会给梯度下降优化带来问题。

2. 假设 w1 的范围在 [-10,10],而w2的范围在[-100,100],梯度每次都前进1单位,那么在w1方向上每次相当于前进了 1/20,而在w2上只相当于 1/200!某种意义上来说,在w2上前进的步长更小一些,而w1在搜索过程中会比w2“走”得更快。这样会导致,在搜索过程中更偏向于w1的方向。抛开哪种路线更有效于找到最佳解的问题不谈,两点之间直线距离最短,这种直角路线明显会更耗时间,所以不归一化,时间会明显增加。

缩放归一化

通过缩放将每一个特征的取值范围归一化到[0,1]或[-1,1]之间,对于每一维的特征x:

 分别是特征x在所有样本的最小值和最大值。

标准归一化(z-score归一化)

将每一个维度的特征都处理为符合标准正态分布  ,

 ,每一维特征都服从标准正态分布。

白化(Whitening)/球化[3]

白化是一种重要的与处理方式,用来降低输入数据特征之间的冗余性,输入数据经过白化处理后,特征之间相关性低,并且所有特征具有相同的方差。

白化具有2个目的:1. 使数据的不同维度去相关;2. 数据每个维度的方差为1。

为什么使用白化?

假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以用于训练时输入是冗余的。白化的目的就是降低输入的冗余性。

PAC白化

通过PCA将数据X降维以后得到Z,可以看出Z中每一维都是独立的(去相关),这时再除Z中每一维对应的方差,得到每一维方差均为1。如果k<n,就是PCA降维,如果k=n,则降低特征间相关性。这里的k是指PCA处理过后的特征数。

ZCA白化

只是在PCA白化的基础上做了一个旋转操作,使得白化之后的数据更加接近原始数据

ZCA白化首先通过PCA去除了各个特征相关性,然后是输入特征具有单位方差,此时得到PCA白化后的结果,然后再将数据旋转回去,得到ZCA白化结果

主成分分析(Principal Component Analysis,PCA)[4]

通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。

PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主成分,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。

协方差: 

协方差为正说明X和Y为正相关关系,为负代表X和Y为负相关关系,为0时代表X和Y独立。协方差绝对值越大,两者对彼此的影响越大,反之越小。

PCA过程

  • 特征中心化:即每一维的数据都减去该维的均值,每一维代表一个特征。  ,  代表每一维的均值。
  • 求特征协方差矩阵,如果数据为三维(x,y,z),(有三个特征值):

  • 计算协方差矩阵的特征值  和特征向量  。(特征向量均归一化为单位向量)
  • 将特征值按照从大到小的顺序排列,选择其中最大的k个,将其对应的k个特征向量分别作为列向量组成特征向量矩阵。其中k的选择标准一般情况下为:  。
  • 将样本点投影到选取的特征向量上。假设样例为m,特征数为n,减去均值后的样本矩阵为DataAdjust(m*n),协方差矩阵是n*n,选取的k个特征向量组成的矩阵为Eigenvector(n*k),那么FinalData(m*k)=DataAdjust(m*n) * Eigenvector(n*k)

这样就将原始样例的n维特征变为了k维,这k维就是原始特征在k维上的投影。

one-hot独热编码

对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征.并且,这些特征互斥,每次只有一个激活.因此,数据会变成稀疏的。

这样做的好处主要有:1. 解决了分类器不好处理属性数据的问题;2. 在一定程度上也起到了扩充特征的作用。

对于标签数据可以转化为独热编码形式,这对于网络的分类输出(softmax,多分类)而言,是更为实际的表达形式。

数据增强(Data Augmentation)[5]

深层神经网络一般都需要大量的训练数据才能获得比较理想的结果。在数据量有限的情况下,可以通过数据增强来增加训练样本的多样性, 提高模型鲁棒性,避免过拟合。

  • 翻转flip
  • 旋转rotation
  • 平移shift
  • 缩放resize/尺度变换Random Scale
  • 随机裁剪或补零Random Crop or Pad
  • 色彩抖动Color jittering:HSV颜色空间随机改变图像原有的饱和度和明度(即,改变 S 和 V 通道的值)或对色调(Hue)进行小范围微调。
  • 对比度变换contrast:在图像的HSV颜色空间,改变饱和度S和V亮度分量,保持色调H不变. 对每个像素的S和V分量进行指数运算(指数因子在0.25到4之间), 增加光照变化;
  • PCA抖动PCA Jittering:首先按照RGB三个颜色通道计算均值和标准差,再在整个训练集上计算协方差矩阵,进行特征分解,得到特征向量和特征值,用来做PCA Jittering;
  • 加噪声(Noise)
  • 特殊的数据增强方法:
    • Fancy PCA(Alexnet)& 监督式数据扩充(海康)
    • 使用生成对抗网络(GAN) 生成模拟图像

参考书籍:《神经网络与深度学习》—邱锡鹏

参考

  1. ^归一化在梯度下降中的作用 https://blog.csdn.net/golden_xuhaifeng/article/details/79742581
  2. ^神经网络为什么要归一化 https://blog.csdn.net/dbat2015/article/details/50008315
  3. ^白化:PCA与ZCA https://my.oschina.net/findbill/blog/543485
  4. ^【机器学习】--主成分分析PCA降维从初识到应用 https://cloud.tencent.com/developer/article/1337563
  5. ^深度学习之数据预处理 https://blog.csdn.net/P_LarT/article/details/84666624#onehot_230
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值