一、normalization
归一化(规范化)是对输入数据进行处理,使其满足某种规范。
前提:线性变换,不会改变原始数据的数值顺序。
假设原值分布在第一象限的某区间,并且x轴间距较广(离散),y轴距离较窄(集中)。
二、零均值
第一步使数据集的平均值成为0,方法为:使每个样本减去当前的平均值。采用以下两个公式进行:
- u = 1/m * sum[ X(i) ],i = 1…m(求出当前平均值)
- X= X - u
处理值将分布在以原点为中心的区间。
原理说明:求出矩阵所有元素的平均值,每个元素都减去平均值,从而使得矩阵整体减去了[平均值 * 元素个数],相当于矩阵整体减去了所有元素的累加和,从而使得平均值为0。
三、一方差
第二步使数据集方差变成1,方差衡量离散程度,方差大,说明离散程度大。通过以下方法处理(注意,X为零均值后的X):
a = 1/m * sum[ X(i) ^ 2 ],i= 1…m
X = X / a
处理值会收窄x轴的间距,加长y轴的间距,减小离散与适当扩大原集中,使其整体离散小。
原理说明:
Var(X) = 1/m * sum [ ( X(i) - X‘)^2 ],i=1…m,X’为X元素的平均值
Var(X) = 1/m * sum [ X(i)^2 ],i=1…m,因X’为0(零均值化后)
故a为X的方差值。
Var(X/a) = 1/m * sum [ ( X(i)/a ) ^2 ],同理X/a均值也为0。
Var(X/a) = 1/m * sum [ X(i)^2 ] * 1/a^2
Var(X/a) = 1/m * sum [ X(i)^2 ] * 1/( 1/m * sum[ X(i) ^ 2 ] )^2
分子分母都有 1/m * sum [ X(i)^2 ],则约分后为 1/( 1/m * sum [ X(i)^2 ] ) = 1/a
由于a为X的方差值,X/a的方差值为1/a,相当于同比缩放a倍,故X/a的方差值为1(X的方差值除以X的方差值)。
三、注意事项
对训练集的输入特征进行了规范化,对测试集以及实际应用也需要进行规范化。并且a/u为训练集计算出的。 (测试集不要再去计算a、u,因为数据量小,计算出来的不够泛化)
四、归一化的原因
把输入特征强行映射到均值0,方差1的标准正太分布,可以使得输入值落在激活函数对输入比较敏感的区域。(激活函数在0附近梯度比较大)因为X的离散程度大了,会导致成本函数离散也大,从而找最小值比较繁琐。故归一化可以使得梯度下降更快,从而提升学习速度。
由于不知道输入特征的离散程度,故一般都对输入特征做归一化处理。