在机器学习中我们时常会遇到模型过拟合的问题,这是由于我们所得到的的模型复杂度过大,过于完美地拟合了训练数据,也就导致模型在预测训练数据时效果很好而预测新数据时效果很差。解决过拟合问题的一个典型方法即是:正则化。
1.损失函数和风险函数
首先我们介绍下按照何种标准来选择出最优的模型。这个标准就是由损失函数和风险函数来定义的。损失函数度量的是模型一次预测的好坏,风险函数度量的是平均意义下模型预测的好坏。
监督学习问题是在假设空间 F F F中选取模型 f f f作为决策函数,对于给定的输入 X X X,由 f ( X ) f(X) f(X)给出相应应的输出 Y ^ \hat Y Y^,这个输出的预测值 f ( X ) f(X) f(X)与真实值 Y Y Y可能一致也可能不一致,用一个损失函数(loss function)或代价函数(cost function)来度量预测错误的程度。损失函数是 f ( X ) f(X) f(X)和 Y Y Y的非负实值函数,记作 L ( Y , f ( X ) ) L(Y, f(X)) L(Y,f(X))。
常用的损失函数有:
- 0-1损失函数
L ( Y , f ( X ) ) = { 1 Y ≠ f ( X ) 0 Y = f ( X ) L(Y,f(X))=\begin{cases} 1& Y\ne f(X)\\ 0& Y=f(X) \end{cases} L(Y,f(X))={10Y=f(X)Y=f(X) - 平方损失函数
L ( Y , f ( X ) ) = ( Y − f ( X ) ) 2 L(Y,f(X))=(Y-f(X))^2 L(Y,f(X))=(Y−f(X))2 - 绝对损失函数
L ( Y , f ( X ) ) = ∣ Y − f ( X ) ∣ L(Y,f(X))=|Y-f(X)| L(Y,f(X))=∣Y−f(X)∣ - 对数损失函数或对数似然损失函数
L ( Y , P ( Y ∣ X ) ) = − l o g P ( Y ∣ X ) L(Y,P(Y|X))=-log P(Y|X) L(Y,P(Y∣X))=−logP(Y∣X)
损失函数值越小,模型就越好。由于模型的输入、输出
(
X
,
Y
)
(X,Y)
(X,Y)是随机变量,遵循联合分布
P
(
X
,
Y
)
P(X,Y)
P(X,Y),所以损失函数的期望是
R
e
x
p
(
f
)
=
E
p
[
L
(
Y
,
f
(
X
)
)
]
=
∫
L
(
y
,
f
(
x
)
)
P
(
x
,
y
)
d
x
d
y
R_{exp}(f)=E_p[L(Y,f(X))]=\int L(y,f(x))P(x,y)dxdy
Rexp(f)=Ep[L(Y,f(X))]=∫L(y,f(x))P(x,y)dxdy
上式是在输入空间和输出空间上进行积分,是在理论上模型
f
(
X
)
f(X)
f(X)关于联合分布
P
(
X
,
Y
)
P(X,Y)
P(X,Y)的平均意义下的损失,成为风险函数(risk function)或期望损失(expected loss)。
我们学习的目标就是选择期望风险最小的模型。但是联合分布 P ( X , Y ) P(X,Y) P(X,Y)是未知的, R e x p ( f ) R_{exp}(f) Rexp(f)并不能直接求出来,正因为这样,才需要学习。
给定一个训练集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T=\{(x_1, y_1), (x_2, y_2),...,(x_N, y_N)\}
T={(x1,y1),(x2,y2),...,(xN,yN)}。模型
f
(
X
)
f(X)
f(X)关于训练接的平均损失称为经验风险(empirical risk)或经验损失(empirical loss),记作
R
e
m
p
R_{emp}
Remp,
R
e
m
p
(
f
)
=
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
R_{emp}(f)=\frac{1}{N}\sum_{i=1}^{N}L(y_i,f(x_i))
Remp(f)=N1i=1∑NL(yi,f(xi))
期望风险
R
e
x
p
(
f
)
R_{exp}(f)
Rexp(f)是模型关于联合分布的期望损失,而经验风险
R
e
m
p
(
f
)
R_{emp}(f)
Remp(f)是模型关于训练样本集合的平均损失。根据大数定律,当样本容量
N
N
N趋于无穷的时候,经验风险
R
e
m
p
(
f
)
R_{emp}(f)
Remp(f)趋于期望风险
R
e
x
p
(
f
)
R_{exp}(f)
Rexp(f)。因此就想利用经验风险来估计期望风险,但是通常实际应用中训练数据有限,这种估计方法会不理想。这就引出了监督学习中两个基本策略:经验风险最小化和结构风险最小化。
1.1 经验风险最小化
经验风险最小化(empirical risk minimization,ERM)策略认为,经验风险最小的模型就是最优模型。根据这一策略求最优模型即是求解最优问题:
min
f
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
(1)
\min_f \frac{1}{N}\sum_{i=1}^{N}L(y_i,f(x_i)) \tag 1
fminN1i=1∑NL(yi,f(xi))(1)
当样本容量足够大时,经验风险最小化能保证很好的学习效果。如:极大似然估计(maximum likelihood estimation)就是经验风险最小化的一个例子。当模型是条件概率分布,损失函数是对数损失函数时,经验风险最小化就等价于极大似然估计。
但是当样本容量很小时,经验风险最小化学习的效果就难以保证了,常会出现过拟合(over fitting)现象。
1.2 结构风险最小化
结构风险最小化(structural risk minimization,SRM)就是为了防止过拟合而提出的策略,它等价于正则化(regularization)。结构风险是在经验风险上加上表示模型复杂度的正则化项(regularizer)或惩罚项(penalty term):
R
s
r
m
(
f
)
=
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
λ
J
(
f
)
R_{srm}(f)=\frac{1}{N}\sum_{i=1}^{N}L(y_i,f(x_i))+\lambda J(f)
Rsrm(f)=N1i=1∑NL(yi,f(xi))+λJ(f)
其中
J
(
f
)
J(f)
J(f)为模型的复杂度,模型
f
f
f越复杂,复杂度
J
(
f
)
J(f)
J(f)就越大;反之,模型
f
f
f越简单,复杂度
J
(
f
)
J(f)
J(f)就越小。这个复杂度表示了对复杂模型的惩罚。
λ
≥
0
\lambda \geq 0
λ≥0是正则化系数,以权衡经验风险和模型复杂度。结构风险小就会迫使经验风险和模型复杂度都小。如:贝叶斯估计中的最大后验概率估计就是结构风险最小化的一个例子。当模型是条件概率分布、损失函数是对数损失函数、模型复杂度由模型的先验概率表示时,结构风险最小化等价于最大后验概率估计。
结构风险最小化策略认为结构风险最小的模型是最优模型。所以根据此策略求最优模型就是求解最优问题:
min
f
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
λ
J
(
f
)
(2)
\min_f\frac{1}{N}\sum_{i=1}^{N}L(y_i,f(x_i))+\lambda J(f) \tag 2
fminN1i=1∑NL(yi,f(xi))+λJ(f)(2)
所以监督学习问题就变成了经验风险或结构风险函数的最优化问题 ( 1 ) (1) (1)和 ( 2 ) (2) (2)。此时经验风险或结构风险函数就是最优化的目标函数。
2. 过拟合
过拟合是指学习时选择的模型所包含的参数过多,以致于出现这一模型对已知数据预测很好,但对未知数据预测很差的现象。比如在吴恩达机器学习课程中的一个多项式拟合的问题,如图:
左侧图像表示欠拟合情况,指模型还未很好地捕捉住数据特性,对数据拟合不好。
右图即是过拟合情况,得益于高次多项式参数复杂,模型能够非常完美地拟合数据点,但是它太过完美了,只关注在了训练数据特性上,没有抓住数据背后真正的趋势/规律,因此对于新出现的数据点预测效果会很差。
中图即是较好的拟合情况,抓住了数据规律,对新数据预测也有较好效果,鲁棒性较好。
如何解决过拟合问题呢?一个方法就是下面将要说的正则化。
3. 正则化
如前文所说,正则化是结构风险最小化策略的实现,是在经验风险加上一个正则化项或者惩罚项。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值越大。正则化项可以是模型参数向量的范数。正则化一般具有以下形式:
min
f
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
λ
J
(
f
)
\min_f\frac{1}{N}\sum_{i=1}^{N}L(y_i,f(x_i))+\lambda J(f)
fminN1i=1∑NL(yi,f(xi))+λJ(f)
其中第1项为经验风险,第2项为正则化项,
λ
≥
0
\lambda \geq 0
λ≥0为正则化系数。
以线性回归为例,给定数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T=\{(x_1, y_1), (x_2, y_2),...,(x_N, y_N)\}
T={(x1,y1),(x2,y2),...,(xN,yN)},其中
x
∈
R
d
x \in \R ^d
x∈Rd,
y
∈
R
y \in \R
y∈R。
x
x
x有
d
d
d维特征,
y
y
y为一个实值量。在最基本的线性回归模型中,以平方误差为损失函数,我们的优化目标如下:
min
w
1
N
∑
i
=
1
N
(
f
(
x
i
;
w
)
−
y
i
)
2
(3)
\min_w \frac{1}{N}\sum_{i=1}^{N}(f(x_i;w)-y_i)^2 \tag 3
wminN1i=1∑N(f(xi;w)−yi)2(3)
其中
f
(
x
i
;
w
)
=
w
T
x
f(x_i;w)=w^Tx
f(xi;w)=wTx。
但是当样本特征很多,而样本数量相对较少的时候,上式很容易出现过拟合。为了缓解过拟合问题,可以对
(
3
)
(3)
(3)式引入正则化项。
若正则化项为
L
2
L_2
L2范数,则有:
min
w
1
N
∑
i
=
1
N
(
f
(
x
i
;
w
)
−
y
i
)
2
+
λ
2
∥
w
∥
2
2
(4)
\min_w \frac{1}{N}\sum_{i=1}^{N}(f(x_i;w)-y_i)^2 + \frac{\lambda}{2}\parallel w \parallel_2^2 \tag 4
wminN1i=1∑N(f(xi;w)−yi)2+2λ∥w∥22(4)
其中
∥
w
∥
2
2
\parallel w \parallel_2^2
∥w∥22表示向量
w
w
w的
L
2
L_2
L2范数的平方,即向量元素的平方和
∑
i
=
1
d
w
i
2
\sum_{i=1}^{d}w_i^2
∑i=1dwi2,通常不考虑偏置。正则化系数
λ
2
>
0
\frac{\lambda}{2} > 0
2λ>0,这个
1
2
\frac{1}{2}
21仅是为了在求导的时候消去
L
2
L_2
L2范数的平方。
(
4
)
(4)
(4)式又称为“岭回归”(ridge regression),通过引入
L
2
L_2
L2正则化项,能有效降低过拟合风险。
若正则化项为
L
1
L_1
L1范数,则有:
min
w
1
N
∑
i
=
1
N
(
f
(
x
i
;
w
)
−
y
i
)
2
+
λ
∥
w
∥
1
(5)
\min_w \frac{1}{N}\sum_{i=1}^{N}(f(x_i;w)-y_i)^2 + \lambda \parallel w \parallel_1 \tag 5
wminN1i=1∑N(f(xi;w)−yi)2+λ∥w∥1(5)
其中
∥
w
∥
1
\parallel w \parallel_1
∥w∥1表示向量
w
w
w的
L
1
L_1
L1范数,即向量元素的绝对值之和
∑
i
=
1
d
∣
w
i
∣
\sum_{i=1}^{d} |w_i|
∑i=1d∣wi∣。正则化系数
λ
>
0
\lambda > 0
λ>0。
(
5
)
(5)
(5)式被称为LASSO(Least Absolute Shrinkage and Selection Operator)。
L 1 L_1 L1范数和 L 2 L_2 L2范数都有助于降低过拟合风险,但 L 1 L_1 L1范数还能够带来“稀疏”解,即求得的 w w w有更少的非零分量。所以它们的主要作用是:
- L 1 L_1 L1范数可以产生稀疏权值,可以用来特征选择。
- L 2 L_2 L2范数可以防止过拟合。同样 L 1 L_1 L1范数也可以起到一定程度的防止过拟合作用。
3.1 L 1 L_1 L1正则化
L
1
L_1
L1正则化是如何产生“稀疏”解的呢?如何让某些参数为0的呢?同样还是拿大家常来解释这个作用的例子来看一下,研究线性回归损失函数,假设我们获取的数据
x
i
x_i
xi仅有两个特征,在解
(
4
)
(4)
(4)或
(
5
)
(5)
(5)式得到的
w
w
w是一个2维向量,即
w
1
w_1
w1和
w
2
w_2
w2,然后将
L
1
L_1
L1正则化项和平方误差项的等值线绘制在平面直角坐标系中。如:
上图中蓝色线表示平方误差项的等值线,即取值相同点的连线。红色线表示
L
1
L_1
L1正则化项的等值线。
平方误差项和 L 1 L_1 L1正则化项的交点 w ∗ w^* w∗即是 ( 5 ) (5) (5)式的最优解,可以看出来平方误差项和 L 1 L_1 L1正则化项的交点经常出现在坐标轴位置上,即某一维的取值会为0,比如上图中的 w 1 = 0 w_1=0 w1=0,这就相当于参数变少了,变得“稀疏”了。(至于为什么交点会在坐标轴上,个人的理解,只有当平方损失项正对着 L 1 L_1 L1正则化项才会在边上相交,否则很大概率会先交在顶点处。)类似地,对于高维 w w w向量, L 1 L_1 L1正则化项的形状会是有多个突出的角,这些角与平方损失项相交会比 L 1 L_1 L1其他部位与之相交的概率高,也就让某些维度的取值为0了。
再一点就是 λ \lambda λ取值的影响, λ \lambda λ取值越大,说明对模型参数惩罚越厉害,当然参数就越小了,由此 L 1 L_1 L1正则化项的形状就越小,这样就可能出现欠拟合的情况,平方损失项与 L 1 L_1 L1正则化项早早地相交了(或者说 w w w各维度取值都趋近0),还没往极值点处靠近就停止了。反之 λ \lambda λ取值越小,说明对模型参数惩罚越弱,参数就越大了,因此 L 1 L_1 L1正则化项的形状就越大。
从参数更新角度来看
L
1
L_1
L1正则化项的作用,这里就直接贴李宏毅《机器学习2017》课件中的推导了:
上图中的
L
(
θ
)
L(\theta)
L(θ)即前文所述的经验损失函数,
L
′
(
θ
)
L^\prime(\theta)
L′(θ)表示一个新函数,注意这里不是函数的导数。
由最后推导得到的参数更新公式可以看出,
L
1
L_1
L1正则化项起到的作用相当于每次迭代更新使得权重
w
w
w都减一个正实数或者加一个负实数,使得
w
w
w中元素值都向0靠近。
3.2 L 2 L_2 L2正则化
同样地,还是上一节的假设背景,不过是解
(
4
)
(4)
(4)式,也将
(
4
)
(4)
(4)中前一部分平方损失项和后一部分
L
2
L_2
L2正则化项的等值线画出来,如图:
上图中蓝色线表示平方误差项的等值线,即取值相同点的连线。红色线表示 L 2 L_2 L2正则化项的等值线。
同样交点 w ∗ w^* w∗是 ( 4 ) (4) (4)式的最优解,从图中可见, w ∗ w^* w∗取值位置大多在某个象限内,即 w 1 w_1 w1或 w 2 w_2 w2均不为0, L 2 L_2 L2正则化项会选择多个维度特征,而这些对应维度的参数都很小。
λ \lambda λ的取值对 L 2 L_2 L2正则化项的形状影响同上一节中所说的。
周志华《机器学习》中的图示将 L 1 L_1 L1和 L 2 L_2 L2画在了一起,看起来更有对比性:
除此之外,
L
2
L_2
L2正则化还被称为权重衰减(weight decay)。其参数更新上的作用如下,同样来自李宏毅课件:
从图中可以看出,
L
2
L_2
L2正则化项在参数更新时起到的作用,即是每次迭代参数权重都会乘上一个小于1的系数,经过多次迭代以后参数权重就会趋于0。相当于一个指数倍数的衰减,因此被称为权重衰减也就很自然了(注:权重衰减和
L
2
L_2
L2正则化在SGD优化方法下是等价的,但在如Adam等方法下是有些区别的[6])。
上面的许多资料大多是从文献中摘过来的,参考了一些博客,为了做个在线笔记吧,捋一捋知识点啥的,也供大家参考,如有不足之处欢迎指出。
参考资料
[1] 统计机器学习 1.3节. 李航
[2] 机器学习 11.4节. 周志华
[3] 机器学习中正则化项L1和L2的直观理解
[4] 机器学习中的范数规则化之(一)L0、L1与L2范数
[5] 【机器学习】正则化的线性回归 —— 岭回归与Lasso回归
[6] 都9102年了,别再用Adam + L2 regularization了