在开发一个分类器的时候如果出现了过拟合问题(高方差),其中一个有效的方法是增加更多的训练数据,但很多情况下无法获取到更多的数据,这时候就应该考虑另一个很有效的方法——正则化。
正则化的原理
以Logistic回归分类器为例。使用单神经元和Logistic回归构建的分类器,损失函数(即需要优化的目标函数)为 (1) min J ( w , b ) = 1 m ∑ i = 1 m L ( y ( i ) , y ^ ( i ) ) \min J(w, b)=\frac{1}{m} \sum_{i=1}^{m} L\left(y^{(i)}, \hat{y}^{(i)}\right)\tag{1} minJ(w,b)=m1i=1∑mL(y(i),y^(i))(1)
w
w
w 和
b
b
b 是逻辑回归的参数,对于Logistic回归来说,
w
∈
R
n
x
w \in R^{n_x}
w∈Rnx,
n
x
n_x
nx 表示特征向量的维数,
b
b
b 为实数。正则化就是给上面这样的损失函数加上正则化项,一般来说这个正则化项是
w
w
w 的加权值。如果使用L2正则化,损失函数会变成下面这样
(2)
min
J
(
w
,
b
)
=
1
m
∑
i
=
1
m
L
(
y
(
i
)
,
y
^
(
i
)
)
+
λ
2
m
∥
w
∥
2
2
\min J(w, b)=\frac{1}{m} \sum_{i=1}^{m} L\left(y^{(i)}, \hat{y}^{(i)}\right)+\frac{\lambda}{2m}\|w\|_{2}^{2} \tag{2}
minJ(w,b)=m1i=1∑mL(y(i),y^(i))+2mλ∥w∥22(2)
相比式(1)来说多了
λ
2
m
∥
w
∥
2
2
\frac{\lambda}{2 m}\|w\|_{2}^{2}
2mλ∥w∥22一项,即L2正则化项。其中
λ
\lambda
λ 是正则化参数(是一个超参数),
m
m
m 表示样本数量,
∥
w
∥
2
2
\|w\|_{2}^{2}
∥w∥22是
w
w
w 二范数的平方:
(3)
∥
w
∥
2
2
=
∑
j
=
1
n
x
w
j
2
=
w
T
w
\|w\|_{2}^{2}=\sum_{j=1}^{n_x} w_j^{2}=w^Tw \tag{3}
∥w∥22=j=1∑nxwj2=wTw(3)
L2正则化是最常使用的,此外还有L1正则化,在原损失函数后面加上L1正则化项
λ
m
∥
w
∥
1
\frac{\lambda}{m}\|w\|_{1}
mλ∥w∥1。
∥
w
∥
1
\|w\|_{1}
∥w∥1 表示
w
w
w 的一范数:
(4)
∥
w
∥
1
=
∑
j
=
1
n
x
∣
w
j
∣
\|w\|_{1}= \sum_{j=1}^{n_x} |w_j| \tag{4}
∥w∥1=j=1∑nx∣wj∣(4)
上面是以简单的Logistic为例,权重参数
w
w
w 是一个向量,接下来将其推广到深层神经网络。对于深层神经网络来说,损失函数的参数包含了
W
[
1
]
\bold{W}^{[1]}
W[1] 到
W
[
L
]
\bold{W}^{[L]}
W[L] ,
L
L
L为网络层数,并且对于任意一层
l
l
l 来说,
W
[
l
]
\bold{W}^{[l]}
W[l] 往往是一个二维矩阵而不是前面的向量形式。此时,加上正则化项后的损失函数为:
(5)
min
J
=
1
m
∑
i
=
1
m
L
(
y
(
i
)
,
y
^
(
i
)
)
+
λ
2
m
∑
l
=
1
L
∥
W
[
l
]
∥
2
\min J=\frac{1}{m} \sum_{i=1}^{m} L\left(y^{(i)}, \hat{y}^{(i)}\right)+\frac{\lambda}{2 m} \sum_{l=1}^{L}\|\bold{W}^{[l]}\|^{2} \tag{5}
minJ=m1i=1∑mL(y(i),y^(i))+2mλl=1∑L∥W[l]∥2(5)
其中矩阵范数
∥
W
[
l
]
∥
2
\|\bold{W}^{[l]}\|^{2}
∥W[l]∥2 表示矩阵中所有元素的平方求和。注意到
W
[
l
]
\bold{W}^{[l]}
W[l] 是一个
n
[
l
]
×
n
[
l
−
1
]
n^{[l]}\times n^{[l-1]}
n[l]×n[l−1] 的二维矩阵,因此
(6)
∥
W
[
l
]
∥
2
=
∑
i
=
1
n
[
l
]
∑
i
=
1
n
[
l
−
1
]
(
w
i
j
)
2
\|\bold{W}^{[l]}\|^{2}= \sum_{i=1}^{n^{[l]}}\sum_{i=1}^{n^{[l-1]}}(w_{ij})^2 \tag{6}
∥W[l]∥2=i=1∑n[l]i=1∑n[l−1](wij)2(6)
注意,在加入正则化项之后,损失函数的梯度相应的也多了一项,对于
l
l
l 层来说,用
d
W
[
l
]
d\bold{W}^{[l]}
dW[l]表示没有正则化项的梯度,可以很容易地推导出则加入正则化之后,梯度变为
(7)
d
W
[
l
]
′
=
d
W
[
l
]
+
λ
m
W
[
l
]
d\bold{W}^{[l]'}=d\bold{W}^{[l]}+\frac{\lambda}{m}\bold{W}^{[l]} \tag{7}
dW[l]′=dW[l]+mλW[l](7)
为什么正则化可以减少过拟合
从直观上来理解,一个深度网络模型出现过拟合的原因是大量的隐藏神经元能够将输入特征向量的大量特征都考虑到,甚至一些数据噪声考虑在内。加入正则化后,由于正则项的存在,导致在优化损失函数的时候会将正则项的值也朝着小的方向优化,这样的结果就是神经网络中有部分连接的值会变得很小(跟
λ
\lambda
λ有关),这样网络的结构得到了优化,某些特征的影响会变小。简化后的神经网络更不容易出现过拟合的情况。但是
λ
\lambda
λ 很大的时候,当很多权重值都变得很小,此时网络会变得欠拟合,得到高偏差的结果,因此
λ
\lambda
λ 需要通过验证集来帮助配置。
从数学原理上理解贝叶斯减少过拟合可以参考这一篇文章,我觉得解释的很清楚。