正则化是什么
正则化(regularization)是在机器学习中十分常用的一个避免过拟合的方法。
其思想就是在损失函数中加入刻画模型复杂程度的指标。
假设损失函数使用的是均方误差(MSE),也就是 J ( θ ) = ∑ i = 1 n ( y i − y ^ i ) J(\theta) = \sum_{i=1}^n (y_i -\hat y_i) J(θ)=i=1∑n(yi−y^i)那么在加入正则化 R ( w ) R(w) R(w)的公式之后的损失函数就变成了 J ( θ ) = ∑ i = 1 n ( y i − y ^ i ) + λ R ( w ) J(\theta) = \sum_{i=1}^n (y_i-\hat y_i) + \lambda R(w) J(θ)=i=1∑n(yi−y^i)+λR(w)其中 λ \lambda λ是正则化的权重。从公式中可以看出,正则化就是影响损失函数的,并以此来影响模型的复杂程度,尽可能避免模型过拟合。
有哪些常用的正则化方法
常用的来刻画模型复杂度的函数 R ( w ) R(w) R(w)有两种,一种是L1正则化,一种是L2正则化。
有的论文也叫做L1范数,L2范数
L1正则化的公式为
R
(
w
)
=
∣
∣
w
1
∣
∣
=
∑
i
∣
w
i
∣
R(w)= ||w_1||=\sum_i |w_i|
R(w)=∣∣w1∣∣=i∑∣wi∣
L2的正则化公式为
R
(
w
)
=
∣
∣
w
2
∣
∣
=
∑
i
∣
w
i
2
∣
R(w)=||w_2||=\sum_i |w_i^2|
R(w)=∣∣w2∣∣=i∑∣wi2∣
无论是哪种正则化方法,基本的思想就是希望通过限制权重的大小,使得模型不能任意拟合训练集中的随机噪音。
两种正则化方法的区别
首先,L1正则化会让参数变得稀疏,而L2正则却不会。所谓稀疏就是会有很多的参数变成0,这样还可以达到类似特征选取的功能,比如Lasso Regression就是使用的L1正则,会让部分的参数变为0,可以间接的达到提取特征的功能。
之所以L2正则化不会让参数变得稀疏的原因1是当某个参数很小的时候,比如0.001,这个参数的平方基本上就可以忽略了,于是模型不会进一步将这个参数调整为0。
其次,L1正则化的计算公式不可导,而L2正则化公式可导。因为在优化时需要计算损失函数的偏导数,所以对含有L2正则化的损失函数的优化要更加简洁。优化L1正则化的损失函数要更加复杂,而且优化方法也有很多种。
在实践中,也可以L1正则化和L2正则化同时使用:
R
(
w
)
=
∑
i
α
1
∣
w
i
∣
+
α
2
w
i
2
R(w)=\sum_i \alpha_1 |w_i| + \alpha_2 w_i^2
R(w)=i∑α1∣wi∣+α2wi2在Elastic Net Regression中就是用的这种正则方法。
在TensorFlow中使用正则化
-
在TensorFlow中要使用正则化可以根据公式自己定义一个Loss函数。
-
也可以使用
tf.contrib.layers.l1_regularizer
和tf.contrib.layers.l2_regularizer
其用法如下所示
loss = tf.reduce_mean(tf.square(y_ - y)) + tf.contrib.layers.l2_regularizer(lambda)(w)
#lambda是正则化的权重
《TensorFlow 实战Google深度学习框架》 ↩︎