深度神经网络中处理数据和训练模型的一些技巧

  • 1 数据预处理
  • 1.1 中心化
  • 1.2 标准化
  • 1.3 PCA
  • 1.4 白噪声
  • 1.5 小结
  • 2 权重初始化
  • 2.1 全0初始化
  • 2.2 随机初始化
  • 2.3 稀疏初始化
  • 2.4 初始化偏置(bias)
  • 2.5 批标准化(Batch Normalization)
  • 3 防止过拟合
  • 3.1 正则化(Regularization)
  • 3.2 Dropout
  • 参考资料


在开始训练网络之前,良好的数据处理和参数初始化能够很快达到事半功倍的结果。在模型训练中采用一些训练技巧,能够使得模型最后达到sate-of-art的效果。

1 数据预处理

1.1 中心化

  • 数据预处理中一个最常见的处理办法,就是每个特征维度都减去相应的均值实现中心化,这样可以使数据变成0均值,特别对于一些图像数据,为了方便,将所有的数据都减去一个相同的值。

1.2 标准化

  • 在使得数据都变成0均值之后,还需要使用标准化的做法,让数据不同的特征维度都有着相同的规模。有两种常用的方法:一种是除以标准差,这样可以使得新数据的分布接近标准高斯分布;还有一种做法就是让每个特征维度的最大值和最小值按比例缩放到-1~1之间。
  • 如果知道输入不同特征有着不同的规模,那就需要使用标准化的做法让他们处于同一个规模下面,这对于机器学习算法而言是非常重要的。
  • 每种做法处理完数据之后的效果。

1.3 PCA

  • PCA是另外一种处理数据的方法,在进行这一步以前,首先会将数据中心化,然后计算数据的协方差矩阵。假设输入的是神经网络和大数据 神经网络大数据处理_神经网络和大数据,那么通过神经网络和大数据 神经网络大数据处理_初始化_02能够得到这个协方差矩阵。
  • 这个协方差是对称半正定的,可以通过 这个协方差矩阵来进行奇异值分解(SVD),然后对数据进行去相关性,将其投影到一个特征空间。取一些较大的、主要的特征向量来降低数据的维数,去掉一些没有方差的维度,这也叫做主成分分析(PCA)。
  • PCA对于一些线性模型和神经网络,都能取得良好的效果。

1.4 白噪声

  • 白噪声也是一种处理数据的方式,首先会跟PCA一样,将数据投影到一个特征空间,然后每个维度除以特征值来标准化这些数据,直观上就是一个多元高斯分布转化到了一个0均值,协方差矩阵为1 的多元高斯分布。
  • 具体的PCA和白噪声处理之后的效果如图所示。
  • 白噪声的处理会增强数据中的噪声,因为其增强了数据中的所有维度,包括了一些方差很小的不相关的维度。

1.5 小结

  • 在实际处理数据中,中心化和标准化都特别重要。先计算训练集的统计量(比如均值),然后将这些统计量应用到测试集和验证集当中。但是PCA和白噪声在卷积网络中基本不使用,因为卷积网络可以自动学习如何提取这些特征,而不需要人工对其干预。

2 权重初始化

  • 在进入网络训练之前,需要做数据的预处理和参数的预处理。预处理的策略有全0初始化、随机初始化、稀疏初始化、初始化偏向(bias)、批标准化(Batch Normalization)等。

2.1 全0初始化

  • 首先从一个最直观,但不应该采用的策略入手,那就是将参数全部初始化为0.为什么不能采用这一种策略?
  • 首先,并不知道训练之后的网络,最后权重更新的是多少,但是知道数据在进入网络之前经过了合适的预处理。可以假设最后的权重有一半是正的,有一半是负。但这是不对的,因为如果神经网络中每个权重都被初始化成相同的值,那么每个神经元就会计算出相同的结果,在反向传播的时候也会计算出相同的梯度,最后导致所有权重都会有相同的更新。如果每个权重都被初始化成相同的值,那么权重之间失去了不对称性。

2.2 随机初始化

  • 其次,权重初始化的时候能尽量靠近0,但不能全都是0,所以可以初始化权重为一些靠近0的随机数,通过这个方式可以打破对称性。其核心想法就是神经元最开始都是随机的、唯一的,所以在更新的时候,也作为独立的部分,最后一起合成在神经网络中。
  • 一般的随机化策略有高斯随机化、均匀随机化等,注意并不是越小的随机化产生的结果越好。因为权重初始化越小,反向传播中关于权重的梯度也越小,因为梯度与参数的大小是成正比例的,所以这会极大地减弱梯度流的信号,成为神经网络中的一个隐患。
  • 这个初始化策略还存在一个问题,网络输出分布的方差会随着输入维度的增加而增大。

2.3 稀疏初始化

  • 另外一种初始化方法就是稀疏初始化,将权重全部初始化为0,然后为了打破对称性,在里面随机挑选一些参数附上一些随机值,这种方法的好处是参数占用的内存较小,因为里面有较多的0,但是实际中使用较少。

2.4 初始化偏置(bias)

  • 对于偏置(bias),通常是初始化为0,因为权重已经打破了对称性,所以使用0来初始化是最简单的。

2.5 批标准化(Batch Normalization)

  • 最近兴起的一项技术叫做批标准化,它的核心想法就是标准化这个过程是可微的,减少了很多不合理初始化的问题,所以可以将标准化过程过程,应用到神经网络的每一层中做前向传播和反向传播,通常批标准化应用在全连接层后面,非线性层前面。
  • 实际中,批标准化已经变成了神经网络中的一个标准技术,特别是在卷积神经网络中,它对于很坏的初始化有很强的鲁棒性,同时还可以加快网络的收敛速度。另外,批标准化还可以理解为在网络的每一层前面都会做数据的预处理。

3 防止过拟合

  • 如果网络容量过大会造成过拟合,但是防止过拟合的最佳办法并不是减少网络容量。防止过拟合的具体办法有正则化、Dropout等。

3.1 正则化(Regularization)

  • L2正则化是正则化中比较常用的形式,它的思想是对于权重过大的部分进行惩罚,也就是直接在损失函数中增加权重的二范数量级。使用L2正则化可以看成是权重更新在原来的基础上再减去一个数,这样可以让参数更新后更加靠近0.

3.2 Dropout

  • Dropout是一种非常有效、简单、同时也是现在深度学习使用最为广泛的防止过拟合的方法。其核心想法是在训练网络的时候,依概率P保留每个神经元,也就是说每次训练的时候有些神经元会被设置为0。
  • 每次训练都有某些神经元并没有参与到网络中,但是在预测的时候不在这样处理。如果预测应用Dropout,由于随机性,每次预测出来的结果都不一样,这显然是不行的。
  • 所以会保留网络全部的权重,取代应用Dropout,在每层网络的输出上应用P的缩放。
  • 还有一种理解Dropout的思路就是把Dropout看作是集成的学习方法。在每次训练Dropout之后就可以看作是一个新的模型,然后训练了很多次之后就可以看成是这些模型的集成。

参考资料

  1. 廖星宇《深度学习入门之PyTorch》电子工业出版社