天天看点

正则化,L1正则和L2正则的分析

文章目录

    • 正则化是什么
    • 有哪些常用的正则化方法
      • 两种正则化方法的区别
    • 在TensorFlow中使用正则化

正则化是什么

正则化(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​∣+α2​wi2​在Elastic Net Regression中就是用的这种正则方法。

在TensorFlow中使用正则化

  1. 在TensorFlow中要使用正则化可以根据公式自己定义一个Loss函数。
  2. 也可以使用

    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是正则化的权重
           
  1. 《TensorFlow 实战Google深度学习框架》 ↩︎

继续阅读