神经网络基础1:数据处理biasing与scaling

数据处理

我们知道在神经网络中,通常需要对样本数据进行预处理(Z-score standardization)、对各层中间隐层进行normalization(如Batch-normalization、layer-normalization等),这些操作都涉及biasing和scaling操作,那为什么需要这些操作?

我们知道,每个神经元输出都是输入的线性组合z经过线性/非线性变换得到的

y=f(z)=f(b+W^TX)

可以把梯度理解成是输入对输出贡献的力度,梯度大小是与输入数值大小息息相关的\partial z / \partial W = X,中间输出z对参数W的梯度等于输入向量X,而神经网络使用梯度下降法来训练更新参数W,也即参数W的更新大小与方向与输入向量X是线性的

  • 当输入向量X严重偏向某些维度时,参数W的更新同样也会严重偏向这些维度,也即会形成类似zig-zag形的更新路径,从而严重影响收敛速度,如下左图所示,为了避免这种情况,通常需要对数据进行scaling,对样本数据来说便是去量纲化
  • 另外,如果输入数据各个维度的数值都是同号的(比如0-1归一化后数据都是非负数),那么参数的更新方向便会受限,同样会减慢收敛速度;以二维数据为例,当输入数据各个维度都是非负数时,参数的更新方向就只能在第一象限或第三象限,而无法出现在第二、四象限,如下右图所示,从红点到蓝点就需要至少2次更新来完成,而不能一次完成;为了避免这种情况,通常需要对数据进行biasing,也即把数据变得有正有负。

                            

scaling

其实,由于输入数据的各个维度要进行线性组合,很自然的应该想到要对数据各个维度进行scaling即让各个维度的数据值大小可比较,不能让数据值很大的把数据值很小的给屏蔽了;

一些如标准化、归一化等feature scaling都可以进行去量纲化;注意:scaling的内涵假设是各维输入重要程度相近,通常来说,过于集中(variance很小)的特征是不重要的;但若实际情况下,某一维为不相干弱噪声,scaling会放大噪声,加大了噪声对模型的影响(此影响在白化过的输入中更明显)。同时,若已知各维输入量纲相近,或已知各维相对重要程度的情况下,往往选择保留输入的相对尺度,对各维统一缩放。

biasing

通常数据处理的biasing操作是zero-centered去中心化,就是减去均值使得均值为0;在网络较深时,对各隐层做biasing以加快训练速度是很有必要,尤其是当其输入都是同号的时候(如上一层的ReLu输出);但对于样本数据做biasing却不一定有必要,想想如果某个维度是稀疏的,对其做biasing后,绝大部分0值都便变成非0值,而非0值时输入层中相应参数就会发生更新,但是这些参数更新是不必要的,因为原始0值不重要、其不含任何意义,对出现原始0值而更新参数是没有必要的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章