ML 入门:归一化、标准化和正则化

ML 入门:归一化、标准化和正则化

DaveDave

在学习 Machine Learning 的过程中遇到了三个有点模糊的概念——归一化、标准化和正则化,经过收集资料和咨询培神之后,最终理解了这三者的区别,特此小记。

0x01 归一化 Normalization

归一化一般是将数据映射到指定的范围,用于去除不同维度数据的量纲以及量纲单位。

常见的映射范围有 [0, 1] 和 [-1, 1] ,最常见的归一化方法就是 Min-Max 归一化

Min-Max 归一化

x_{new}=\frac{x-x_{min}}{x_{max}-x_{min}}

举个例子,我们判断一个人的身体状况是否健康,那么我们会采集人体的很多指标,比如说:身高、体重、红细胞数量、白细胞数量等。

一个人身高 180cm,体重 70kg,白细胞计数 7.50×10^{9}/L ,etc.

衡量两个人的状况时,白细胞计数就会起到主导作用从而遮盖住其他的特征,归一化后就不会有这样的问题。

0x02 标准化 Normalization

在这里我们需要强调一下英文翻译的问题,在 Udacity 字幕组中对此进行了探讨:

归一化和标准化的英文翻译是一致的,但是根据其用途(或公式)的不同去理解(或翻译)

下面我们将探讨最常见的标准化方法: Z-Score 标准化

Z-Score 标准化

x_{new}=\frac{x-\mu }{\sigma }

其中 \mu 是样本数据的均值(mean)\sigma 是样本数据的标准差(std)


上图则是一个散点序列的标准化过程:原图->减去均值->除以标准差。

显而易见,变成了一个均值为 0 ,方差为 1 的分布,下图通过 Cost 函数让我们更好的理解标准化的作用。


机器学习的目标无非就是不断优化损失函数,使其值最小。在上图中, J(w,b) 就是我们要优化的目标函数

我们不难看出,标准化后可以更加容易地得出最优参数 w b 以及计算出 J(w,b) 的最小值,从而达到加速收敛的效果^{[1]}

注:上图来源于 Andrew Ng 的课程讲义

Batch Normalization

在机器学习中,最常用标准化的地方莫过于神经网络的 BN 层(Batch Normalization),因此我们简单的谈谈 BN 层的原理和作用,想要更深入的了解可以查看论文

我们知道数据预处理做标准化可以加速收敛,同理,在神经网络使用标准化也可以加速收敛,而且还有如下好处:

  • 具有正则化的效果(Batch Normalization reglarizes the model)
  • 提高模型的泛化能力(Be advantageous to the generalization of network)
  • 允许更高的学习速率从而加速收敛(Batch Normalization enables higher learning rates)

其原理是利用正则化减少内部相关变量分布的偏移(Reducing Internal Covariate Shift),从而提高了算法的鲁棒性^{[2]}

Batch Normalization 由两部分组成,第一部分是缩放与平移(scale and shift),第二部分是训练缩放尺度和平移的参数(train a BN Network),算法步骤如下:

接下来训练 BN 层参数 \gamma\beta ,限于篇幅的原因按下不表,有兴趣的读者可以拜读这篇论文

0x03 正则化 Regularization

正则化主要用于避免过拟合的产生和减少网络误差。


正则化一般具有如下形式:

J(w,b)= \frac{1}{m} \sum_{i=1}^{m}L(f(x),y)+\lambda R(f)

其中,第 1 项是经验风险,第 2 项是正则项λ≥0 为调整两者之间关系的系数。

第 1 项的经验风险较小的模型可能较复杂(有多个非零参数),这时第 2 项的模型复杂度会较大。

常见的有正则项有 L1 正则L2 正则 ,其中 L2 正则 的控制过拟合的效果比 L1 正则 的好。

正则化的作用是选择经验风险与模型复杂度同时较小的模型^{[3]}

常见的有正则项有 L1 正则L2 正则 以及 Dropout ,其中 L2 正则 的控制过拟合的效果比 L1 正则 的好。

L_{p} 范数

为什么叫 L1 正则,有 L1、L2 正则 那么有没有 L3、L4 之类的呢?

首先我们补一补课, L_{p} 正则的 L 是指 L_{p} 范数,其定义为:

L_{0} 范数: \left \| w \right \|_{0} = \#(i)\ with \ x_{i} \neq 0 (非零元素的个数)

L_{1} 范数: \left \| w \right \|_{1} = \sum_{i = 1}^{d}\lvert x_i\rvert (每个元素绝对值之和)

L_{2} 范数: \left \| w \right \|_{2} = \Bigl(\sum_{i = 1}^{d} x_i^2\Bigr)^{1/2} (欧氏距离)

L_{p} 范数: \left \| w \right \|_{p} = \Bigl(\sum_{i = 1}^{d} x_i^p\Bigr)^{1/p}

在机器学习中,若使用了 \lVert w\rVert_p 作为正则项,我们则说该机器学习任务引入了 L_{p} 正则项


上图来自周志华老师的《机器学习》插图

L1 正则 Lasso regularizer

J(w,b)=\frac{1}{m} \sum_{i=1}^{m}L(\hat{y},y)+\frac{\lambda }{m}\left \| w \right \|_{1}

  • 凸函数,不是处处可微分
  • 得到的是稀疏解(最优解常出现在顶点上,且顶点上的 w 只有很少的元素是非零的)


L2 正则 Ridge Regularizer / Weight Decay

J(w,b)=\frac{1}{m} \sum_{i=1}^{m}L(\hat{y},y)+\frac{\lambda }{2m}\left \| w \right \|^{2}_{2}

  • 凸函数,处处可微分
  • 易于优化


Dropout

Dropout 主要用于神经网络,其原理是使神经网络中的某些神经元随机失活,让模型不过度依赖某一神经元,达到增强模型鲁棒性以及控制过拟合的效果。

除此之外,Dropout 还有多模型投票等功能,若有兴趣可以拜读这篇论文


0x04 Reference

[1] LeCun, Y., Bottou, L., Orr, G., and Muller, K. Efficient backprop. In Orr, G. and K., Muller (eds.), Neural Net-works: Tricks of the trade. Springer, 1998b.

[2] Sergey Ioffe, Christian Szegedy, “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift”, arXiv preprint arXiv:1502.03167, 2015.

[3] 李航. 统计方法学 P13-14

[4] 聊聊机器学习中的损失函数 kubicode.me/2016/04/11/

[5] Nitish Srivastava, Geoffrey Hinton, Alex Krizhevsky, Ilya Sutskever and Ruslan Salakhutdinov, "Dropout: A Simple Way to Prevent Neural Networks from
Overfitting",

文章被以下专栏收录
还没有评论