正则化和过拟合问题是机器学习过程中不可避免会遇到的知识点,其数学基础是范数这个概念。现将此问题的学习与理解记录下来。
一、范数(Norm)与正则化(Regularization)
先从字面意思理解,“范数”首先是一个数,然后是“规范的数”。那么什么是规范呢?Norm,就是标准与规范的意思,其英文释义是a standard or model or pattern regarded as typical。这里展开说一下,Norm的含义还可以引申为常态、定量、定额。
其中师范类学校的英文也翻译成Normal University,所以有的时候北师大也可以戏称为北京正常大学,其它类的学校则是Abnormal University(手动滑稽)。北师大的校训也是“学为人师,行为世【范】”。
那么Norm究竟是什么?规范的标准怎么理解?举几个例子可以加深定量的、具象的认识——多重为1克,多长为1米,多快为1秒?这些都是现在人类科学上通行的“规范”。社会学上的行为规范则更为抽象,不好理解,但本质上还是一种通行的“标准与规则”。
接下来我们抛开这些文字上的理解,看看数学上范数是如何定义的,公式一列,就全部拿捏。
-
L
0
L0
L0 Norm:
∥ x ∥ 0 = ∑ i = 1 k ∣ x i ∣ 0 \| x \| _0 = \sum_{i=1}^k \lvert x_i \rvert ^0 ∥x∥0=i=1∑k∣xi∣0 -
L
1
L1
L1 Norm:
∥ x ∥ 1 = ∑ i = 1 k ∣ x i ∣ \| x \| _1 = \sum_{i=1}^k \lvert x_i \rvert ∥x∥1=i=1∑k∣xi∣ -
L
2
L2
L2 Norm:
∥ x ∥ 2 = ∑ i = 1 k ∣ x i ∣ 2 \| x \| _2 = \sqrt{ \sum_{i=1}^k \lvert x_i \rvert ^2} ∥x∥2=i=1∑k∣xi∣2 -
∞
\infty
∞ Norm:
∥ x ∥ ∞ = m a x ( ∣ x 1 ∣ , ⋯ , ∣ x k ∣ ) \| x \|_\infty = max( \lvert x_1 \rvert, \cdots, \lvert x_k \rvert) ∥x∥∞=max(∣x1∣,⋯,∣xk∣)
L
1
L1
L1,
L
2
L2
L2 和
∞
\infty
∞ Norm 比较容易理解,分别是向量
x
x
x 中各个元素的绝对值之和,绝对值的平方和的开方,以及绝对值中的最大值。
L
0
L0
L0 Norm 则等于向量
x
x
x 中非零元素的个数。其中
∣
x
i
∣
0
\lvert x_i \rvert ^0
∣xi∣0 为示性函数,
∣
x
i
∣
0
=
{
1
,
x
i
≠
0
0
,
x
i
=
0
\lvert x_i \rvert ^0 = \begin{cases} 1, & x_i \neq 0 \\ 0, & x_i = 0 \end{cases}
∣xi∣0={1,0,xi=0xi=0
一般机器学习的损失函数中,有一项由上述范数构成的正则项,起到约束参数的作用,筛选能为预测输出Y提供信息的稀疏特征项。从稀疏性而言, L 0 > L 1 > L 2 > ∞ L0>L1>L2>\infty L0>L1>L2>∞ 。而由于 L 0 L0 L0 范数最小化问是NP问题(选择合适的特征系数是否为 0 0 0, 是特征规模的指数函数,是个组合优化问题),所以虽然其致稀疏的能力最强,但是一般会用 L 1 L1 L1范数来做 L 0 L0 L0的优凸近似,提高求解速度。
为什么要稀疏呢?稀疏的本质其实是去多重共线性与求主成分,把冗余的特征筛掉,留下信息量高的特征。
L 2 L2 L2 正则化( L 2 L2 L2 范数的平方)则通过降低参数的取值,减少模型的过拟合倾向,提升模型的泛化能力。
L
1
L1
L1 使参数在迭代过程中倾向取值为
0
0
0,从而稀疏化特征规模;
L
2
L2
L2 约束参数取值过高,缓和模型的过拟合倾向。具体数学直觉请参考
https://zhuanlan.zhihu.com/p/85630046
除了向量以外,矩阵也有对应的范数定义,诸如列和范数、行和范数、谱范数等等。
不论是向量还是矩阵,范数是其一种度量方式。那么我们是否可以随意定义一种范数,如向量元素绝对值第二大的值为L1.5 范数? 范数需要满足三类条件,正定、 齐次和三角不等式。
- 正定:
∥ x ∥ ≥ 0 , a n d ∥ x ∥ = 0 ⟺ x = 0 f o r x ∈ x \| x \| \geq 0, and \ \| x \| = 0 \iff x = 0 \ for\ x \in \bf{x} ∥x∥≥0,and ∥x∥=0⟺x=0 for x∈x - 齐次:
∥ c x ∥ = ∣ c ∣ ∥ x ∥ f o r c ∈ R , x ∈ x \| cx \| = \lvert c \rvert\| x \| \ for \ c\in R, x \in \bf x ∥cx∥=∣c∣∥x∥ for c∈R,x∈x - 三角不等式:
∥ x + y ∥ ≤ ∥ x ∥ + ∥ y ∥ f o r x , y ∈ x \| x +y \| \leq \| x \| + \| y \| \ for \ x,y \in \bf x ∥x+y∥≤∥x∥+∥y∥ for x,y∈x
二、过拟合
先直观感受一下什么是过拟合。
稍微正经点的:
关于过拟合有很多文字性的不同场景下的描述:
- 在我的BGM里,我就是我的王,没人能打败我。 ——换个BGM你就怂了。
- 我考前复习得闭眼都能选对答案,错题集我都能背了。——考的我全不会,没见过。
- 驾校里侧边停车、定点坡起、单边桥,一把过。——考场上,你起步分就扣完了。
- 你为了追女孩,吉他篮球你都学会了,甚至你还偷偷去美了白洗了牙。——姑娘说她喜欢有味道的。
诸如此类的表述,严谨与否无所谓,我们能找到的规律是,在准备过程中你做到100%了,但是实战时却傻了眼。
过拟合就是在训练过程中,模型把训练样本的所有特征包括噪音都学了进去,这样真有有信息价值的特征的作用就被削弱了,从而在面临测试数据的时候,模型表现一般般。
之前自己用Matlab做过拟合,先撒几个满足正态分布的几个点,然后用多项式拟合,当多项式项数逐渐增多(相当于参数增加,模型变复杂了),所有的样本点都被串到一个扭曲的曲线上,而且多项式前面的系数通常都比较大。
所以避免过拟合通常有几种方法:
1、加入正则项,约束参数的值;
2、简化模型;
3、增加样本多样性,丰富数据;
4、交叉验证。