python算法进阶深度学习 神经网络python干货

L1、L2正则化

2021-05-04  本文已影响0人  张虾米试错

正则化(Regularization)是机器学习中一种常用的技术,其主要目的是控制模型复杂度,减小过拟合。最基本的正则化方法是在原目标(代价)函数 中添加惩罚项,对复杂度高的模型进行“惩罚”。其数学表达形式为:
L(w;X;y) = L'(w;X;y) + \alpha \Omega(w)
其中,X, y为训练样本以及标签,L()为目标函数,w为权重系数向量,\Omega(w)为惩罚项,\alpha为惩罚因子。不同的\Omega(w)对权重w的最优解有不同的偏好,因而会产生不同的正则化效果。最常用的是l_1范数和l_2范数,相应称之为l_1正则和l_2正则。

l1: \Omega(w) = ||w||_1 = \sum_i {|w_i|}
l2: \Omega(w) = ||w||_2 = \sum_i {w_i^2}

1. 为什么L1、L2正则化可以防止过拟合?

深入理解L1、L2正则化从带约束条件的优化求解和最大后验概率两种思路对L1、L2正则化给出了分析。本文从只说下带约束条件的优化求解(因为目前我只能理解这种思路。。。)
我们知道,模型的复杂度可用VC维来衡量。通常情况下,模型VC维与系数w的个数成线性关系:即w数量越多,VC维越大,模型越复杂。因此,为了限制模型的复杂度,很自然的思路是减少系数w的个数,即让w向量中一些元素为0或者说限制w中非零元素的个数。为此,我们可在原优化问题中加入一个约束条件:
\min_w J(w; X,y) s.t. ||w||_0 <= C
||w||_0范数表示向量中非零元素的个数。但由于该问题是一个NP问题,不易求解,为此我们需要稍微“放松”一下约束条件。为了达到近似效果,我们不严格要求某些权重w为0,而是要求权重w应接近于0,即尽量小。从而可用l_1范数和l_2范数来近似l_0,即:
\min_w J(w; X,y) s.t. ||w||_1 <= C
\min_w J(w; X,y) s.t. ||w||_2 <= C
利用拉格朗日算子法,我们可将上述带约束条件的最优化问题转换为不带约束项的优化问题,构造拉格朗日函数:
L(w,\alpha) = J(w; X,y) +\alpha(||w||_1 -C)
L(w,\alpha) = J(w; X,y) +\alpha(||w||^2_2 -C)

综上所述,l_1正则和l_2正则是通过将某些w为0或者接近于0,降低模型复杂度,防止过拟合。

《深度学习》第7章
image.png

2. L1、L2正则化为什么可以将某些w为0或者接近于0?

w为1维的时候,l_1l_2的函数图像如下:

y=|x| y=x^2

l_1l_2w会向0的方向优化;区别在于,l_1w=0将不会再变化,而l_2是接近于0但不会等于0(个人想法)。

公式推导

《深度学习》第七章(7.1--7.2)有公式推导,有时间可以再好好看看,初看没看懂。

L2: w_i = \frac{H_{i,i}}{H_{i,i}+\alpha} w_i^*
L1: w_i = sign(w*) \max (|w_i^*| - \frac{\alpha}{H_{i,i}}, 0)

L2推导

L1推导

参考资料

上一篇 下一篇

猜你喜欢

热点阅读