精华内容
下载资源
问答
  • 常用的正则化方法有L1正则化和L2正则化L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。 L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归...

    转载地址https://blog.csdn.net/liuweiyuxiang/article/details/99984288

    0 正则化的作用

    正则化的主要作用是防止过拟合,对模型添加正则化项可以限制模型的复杂度,使得模型在复杂度和性能达到平衡。
    常用的正则化方法有L1正则化和L2正则化。L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。 L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归。但是使用正则化来防止过拟合的原理是什么?L1和L2正则化有什么区别呢?

    1 L1正则化与L2正则化

    L1正则化的表达如下,其中α||w||为L1正则化项,L1正则化是指权值向量w 中各个元素的绝对值之和。
    在这里插入图片描述

    L2正则化项表达式如下,其中a||w||^2为L2正则化项,L2正则化是指权值向量w 中各个元素的平方和然后再求平方根。
    在这里插入图片描述
    L1和L2正则化的作用:

    • L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择,一定程度上,L1也可以防止过拟合
    • L2正则化可以防止模型过拟合(overfitting)

    下面看李飞飞在CS2312中给的更为详细的解释:

    • L2正则化可以直观理解为它对于大数值的权重向量进行严厉惩罚,倾向于更加分散的权重向量。由于输入和权重之间的乘法操作,这样就有了一个优良的特性:使网络更倾向于使用所有输入特征,而不是严重依赖输入特征中某些小部分特征。 L2惩罚倾向于更小更分散的权重向量,这就会鼓励分类器最终将所有维度上的特征都用起来,而不是强烈依赖其中少数几个维度。这样做可以提高模型的泛化能力,降低过拟合的风险。
    • L1正则化有一个有趣的性质,它会让权重向量在最优化的过程中变得稀疏(即非常接近0)。也就是说,使用L1正则化的神经元最后使用的是它们最重要的输入数据的稀疏子集,同时对于噪音输入则几乎是不变的了。相较L1正则化,L2正则化中的权重向量大多是分散的小数字。
    • 在实践中,如果不是特别关注某些明确的特征选择,一般说来L2正则化都会比L1正则化效果好。

    2 L1和L2正则化的原理

    上面讲到L1倾向于学得稀疏的权重矩阵,L2倾向于学得更小更分散的权重?但是L1和L2是怎样起到这样的作用的呢?背后的数学原理是什么呢?
    模型的学习优化的目标是最小化损失函数,学习的结果是模型参数。在原始目标函数的基础上添加正则化相当于,在参数原始的解空间添加了额外的约束。
    L1正则化对解空间添加的约束是:
    在这里插入图片描述
    L2正则化对解空间添加的约束是:
    在这里插入图片描述

    为了形象化的说明以假设有两个空间,以二维参数空间为例,假设有两个参数W1和W2。
    则L1正则化对解空间的约束为:
    ∣w1∣+∣w2∣<=C

    L2对解空间的约束为:
    在这里插入图片描述
    在二维平面上绘制以上两个式子的图像,可得L1约束的范围是一个顶点在坐标轴上的菱形,L2约束的范围是一个圆形。
    在这里插入图片描述
    上面的图,左面是L2约束下解空间的图像,右面是L1约束下解空间的图像。
    蓝色的圆圈表示损失函数的等值线。同一个圆上的损失函数值相等的,圆的半径越大表示损失值越大,由外到内,损失函数值越来越小,中间最小。
    如果没有L1和L2正则化约束的话,w1和w2是可以任意取值的,损失函数可以优化到中心的最小值的,此时中心对应的w1和w2的取值就是模型最终求得的参数。
    但是填了L1和L2正则化约束就把解空间约束在了黄色的平面内。黄色图像的边缘与损失函数等值线的交点,便是满足约束条件的损失函数最小化的模型的参数的解。 由于L1正则化约束的解空间是一个菱形,所以等值线与菱形端点相交的概率比与线的中间相交的概率要大很多,端点在坐标轴上,一些参数的取值便为0。L2正则化约束的解空间是圆形,所以等值线与圆的任何部分相交的概率都是一样的,所以也就不会产生稀疏的参数。
    但是L2为什么倾向于产生分散而小的参数呢?那是因为求解模型的时候要求,在约束条件满足的情况下最小化损失函数,∑ || w || ^2 也应该尽可能的小。
    看这样一个例子:
    设输入向量x=[1,1,1,1],两个权重向量w_1=[1,0,0,0],w_2=[0.25,0.25,0.25,0.25]。两个权重向量都得到同样的内积1,但是w1的L2惩罚是1.0,而w2的L2惩罚是0.25。因此,根据L2惩罚来看,w2更好,因为它的正则化损失更小。从直观上来看,这是因为w2的权重值更小且更分散。所以L2正则化倾向于是特征分散,更小。

    3 正则化参数 λ

    我们一般会为正则项参数添加一个超参数λ或者α,用来平衡经验风险和结构风险(正则项表示结构风险)。
    在这里插入图片描述
    以 L2 为例,若 λ 很小,就是说我们考虑经验风险更多一些,对于结构风险没有那么重视,约束条件更为宽松。对应上文中的 C 值就很大。这时候,圆形区域很大,能够让 w 更接近中心最优解的位置。若 λ 近似为 0,相当于圆形区域覆盖了最优解位置,这时候,正则化失效,容易造成过拟合。
    相反,若 λ 很大,约束条件更为严格,对应上文中的 C 值就很小。这时候,圆形区域很小,w 离中心最优解的位置较远。w 被限制在一个很小的区域内变化,w 普遍较小且接近 0,起到了正则化的效果。但是,λ 过大容易造成欠拟合。欠拟合和过拟合是两种对立的状态。

    4 总结

    1. 添加正则化相当于参数的解空间添加了约束,限制了模型的复杂度

    2. L1正则化的形式是添加参数的绝对值之和作为结构风险项,L2正则化的形式添加参数的平方和作为结构风险项

    3. L1正则化鼓励产生稀疏的权重,即使得一部分权重为0,用于特征选择;L2鼓励产生小而分散的权重,鼓励让模型做决策的时候考虑更多的特征,而不是仅仅依赖强依赖某几个特征,可以增强模型的泛化能力,防止过拟合。

    4. 正则化参数 λ越大,约束越严格,太大容易产生欠拟合。正则化参数 λ越小,约束宽松,太小起不到约束作用,容易产生过拟合。

    5. 如果不是为了进行特征选择,一般使用L2正则化模型效果更好。

    展开全文
  • 详解L1和L2正则化

    千次阅读 2020-11-24 20:23:14
    对参数进行L1和L2正则化的作用与区别 pytorch实现L1L2正则化 对特征进行L2正则化的作用 L1和L2的区别以及范数   使用机器学习方法解决实际问题时,我们通常要用L1或L2范数做正则化(regularization),从而限制...

    大纲:

    • L1和L2的区别以及范数相关知识
    • 对参数进行L1和L2正则化的作用与区别
    • pytorch实现L1与L2正则化
    • 对特征进行L2正则化的作用

    L1和L2的区别以及范数

      使用机器学习方法解决实际问题时,我们通常要用L1或L2范数做正则化(regularization),从而限制权值大小,减少过拟合风险,故其又称为权重衰减。特别是在使用梯度下降来做目标函数优化时。

    L1和L2的区别
    在机器学习中,

    • L1范数(L2 normalization)是指向量中各个元素绝对值之和,通常表述为 ∥ w i ∥ 1 \|\boldsymbol{w_i}\|_1 wi1,线性回归中使用L1正则的模型也叫Lasso regularization
      比如 向量A=[1,-1,3], 那么A的L1范数为 |1|+|-1|+|3|.

    • L2范数指权值向量w中各个元素的平方和然后再求平方根(可以看到Ridge回归的L2正则化项有平方符号),通常表示为 ∥ w i ∥ 2 \|\boldsymbol{w_i}\|_2 wi2, 线性回归中使用L2正则的模型又叫岭回归(Ringe regularization)。

    简单总结一下就是:

    • L1范数: 为x向量各个元素绝对值之和。
    • L2范数: 为x向量各个元素平方和的1/2次方,L2范数又称Euclidean范数或者Frobenius范数
    • Lp范数: 为x向量各个元素绝对值p次方和的1/p次方.

    下图为p从无穷到0变化时,三维空间中到原点的距离(范数)为1的点构成的图形的变化情况。以常见的L-2范数(p=2)为例,此时的范数也即欧氏距离,空间中到原点的欧氏距离为1的点构成了一个球面
    在这里插入图片描述

    参数正则化作用

    • L1: 为模型加入先验, 简化模型, 使权值稀疏,由于权值的稀疏,从而过滤掉一些无用特征,防止过拟合
    • L2: 根据L2的特性,它会使得权值减小,即使平滑权值,一定程度上也能和L1一样起到简化模型,加速训练的作用,同时可防止模型过拟合

    关于为什么L1会使得权重稀疏,而L2会使得权值平滑,可以参考知乎上一位答主的台大林轩田老师人工智能基石课笔记,从凸优化,梯度更新,概率分布三个角度诠释L1和L2正则化的原理和区别。我把笔记搬运到这:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    pytorch实现L1与L2正则化

    网上很多关于L2和L1正则化的对象都是针对参数的,或者说权重,即权重衰减,可以用pytorch很简单的实现L2惩罚:

    class torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False)
    

    如上,weight_decay参数即为L2惩罚项前的系数
    举个栗子,对模型中的某些参数进行惩罚时

    #定义一层感知机
    net = nn.Linear(num_inputs, 1)
    #自定义参数初始化
    nn.init.normal_(net.weight, mean=0, std=1)
    nn.init.normal_(net.bias, mean=0, std=1)
    optimizer_w = torch.optim.SGD(params=[net.weight], lr=lr, weight_decay=wd) # 对权重参数衰减,惩罚项前的系数为wd
    optimizer_b = torch.optim.SGD(params=[net.bias], lr=lr)  # 不对偏差参数衰减
    

    而对于L1正则化或者其他的就比较麻烦了,因为pytorch优化器只封装了L2惩罚功能,参考pytorch实现L2和L1正则化regularization的方法

    class Regularization(torch.nn.Module):
        def __init__(self,model,weight_decay,p=2):
            '''
            :param model 模型
            :param weight_decay:正则化参数
            :param p: 范数计算中的幂指数值,默认求2范数,
                      当p=0为L2正则化,p=1为L1正则化
            '''
            super(Regularization, self).__init__()
            if weight_decay <= 0:
                print("param weight_decay can not <=0")
                exit(0)
            self.model=model
            self.weight_decay=weight_decay
            self.p=p
            self.weight_list=self.get_weight(model)
            self.weight_info(self.weight_list)
     
        def to(self,device):
            '''
            指定运行模式
            :param device: cude or cpu
            :return:
            '''
            self.device=device
            super().to(device)
            return self
     
        def forward(self, model):
            self.weight_list=self.get_weight(model)#获得最新的权重
            reg_loss = self.regularization_loss(self.weight_list, self.weight_decay, p=self.p)
            return reg_loss
     
        def get_weight(self,model):
            '''
            获得模型的权重列表
            :param model:
            :return:
            '''
            weight_list = []
            for name, param in model.named_parameters():
                if 'weight' in name:
                    weight = (name, param)
                    weight_list.append(weight)
            return weight_list
     
        def regularization_loss(self,weight_list, weight_decay, p=2):
            '''
            计算张量范数
            :param weight_list:
            :param p: 范数计算中的幂指数值,默认求2范数
            :param weight_decay:
            :return:
            '''
            # weight_decay=Variable(torch.FloatTensor([weight_decay]).to(self.device),requires_grad=True)
            # reg_loss=Variable(torch.FloatTensor([0.]).to(self.device),requires_grad=True)
            # weight_decay=torch.FloatTensor([weight_decay]).to(self.device)
            # reg_loss=torch.FloatTensor([0.]).to(self.device)
            reg_loss=0
            for name, w in weight_list:
                l2_reg = torch.norm(w, p=p)
                reg_loss = reg_loss + l2_reg
     
            reg_loss=weight_decay*reg_loss
            return reg_loss
     
        def weight_info(self,weight_list):
            '''
            打印权重列表信息
            :param weight_list:
            :return:
            '''
            print("---------------regularization weight---------------")
            for name ,w in weight_list:
                print(name)
            print("---------------------------------------------------")
    

    class Regularization的使用

    
    # 检查GPU是否可用
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
     
    print("-----device:{}".format(device))
    print("-----Pytorch version:{}".format(torch.__version__))
     
    weight_decay=100.0 # 正则化参数
     
    model = my_net().to(device)
    # 初始化正则化
    if weight_decay>0:
       reg_loss=Regularization(model, weight_decay, p=2).to(device)
    else:
       print("no regularization")
     
     
    criterion= nn.CrossEntropyLoss().to(device) # CrossEntropyLoss=softmax+cross entropy
    optimizer = optim.Adam(model.parameters(),lr=learning_rate)#不需要指定参数weight_decay
     
    # train
    batch_train_data=...
    batch_train_label=...
     
    out = model(batch_train_data)
     
    # loss and regularization
    loss = criterion(input=out, target=batch_train_label)
    if weight_decay > 0:
       loss = loss + reg_loss(model)
    total_loss = loss.item()
     
    # backprop
    optimizer.zero_grad()#清除当前所有的累积梯度
    total_loss.backward()
    optimizer.step()
    

    特征正则化作用

    上面介绍了对于权重进行正则化的作用以及具体实现,其实在很多模型中,也会对特征采用L2归一化,有的时候在训练模型时,经过几个batch后,loss会变成nan,此时,如果你在特征后面加上L2归一化,可能可以很好的解决这个问题,而且有时会影响训练的效果,深有体会。
    L2正则的原理比较简单,如下公式:
    y = x i ∑ i = 0 D x i 2 \boldsymbol{y} = \frac{\boldsymbol{x_i}}{\sum_{i=0}^D\boldsymbol{{x_i}}^2 } y=i=0Dxi2xi
    其中D为向量的长度,经过l2正则后 x i \boldsymbol{x_i} xi向量的元素平方和等于1

    python实现

    def l2norm(X, dim=-1, eps=1e-12):
        """L2-normalize columns of X
        """
        norm = torch.pow(X, 2).sum(dim=dim, keepdim=True).sqrt() + eps
        X = torch.div(X, norm)
        return X
    

    在SSD目标检测的conv4_3层便使用了L2Norm

    对特征进行L2正则的具体作用如下:

    • 防止梯度消失或者梯度爆炸
    • 统一量纲,加快模型收敛

    参考:

    机器学习中L1和L2的直观理解
    几种范数的介绍

    展开全文
  • L0、L1L2正则化介绍

    2017-06-01 21:35:11
    L0、L1L2正则化介绍
  • L1和L2正则化(regularization)

    万次阅读 2020-04-07 09:54:24
    L1和L2正则化   理论上来说,只要参数足够多,而且参数之间的关系足够复杂,模型就可以拟合任意的函数。如果连噪声也都拟合了,这就是过拟合。事实上,我们在学习的时候,需要学习的是数据的普遍特征,但是除了...

    L1和L2正则化

      理论上来说,只要参数足够多,而且参数之间的关系足够复杂,模型就可以拟合任意的函数。如果连噪声也都拟合了,这就是过拟合。事实上,我们在学习的时候,需要学习的是数据的普遍特征,但是除了普遍特征之外还存在一些少量数据独有的特征,这个特征,我们倾向称之为噪声。
      过拟合的具体表现就不细谈了,可以看到根本的原因就是建立的模型过于复杂了,我们想要让这个模型简单点,拟合的函数简单点,这个时候就需要给拟合的函数加一些约束了。机器学习模型里也是有好多种约束,来使得模型的参数不能那么复杂。
      直观的想,既然模型的参数构建出的函数过于复杂,那就把参数减掉一些,让一部分参数不起作用。这个思想就能产生很多防止过拟合的方法。但是回到数学的角度上,模型的学习过程,是最小化损失函数的过程。我们可以给模型加一个约束,这个约束通过损失来呈现,一旦学出来的模型过于复杂,就让模型产生较大的损失。我们可以通过参数的范数来解决这个问题。
      回想大名鼎鼎的0范数,就是矩阵中(向量)中的非零元素的个数。如果零元素较少,范数就大,可以直接把0范数加权组合进损失函数,就可以很自然的使得参数零的个数增多。因为为了减少损失,模型或多或少的想要去减少0范数,要减少,参数中就得更多的元素变成0。这样得到的模型就非常稀疏了。
      但是零范数的函数是个极限,难以近似。优化损失函数一般都是梯度下降法,0范数,不可导啊,既然不可导,没有导数,怎么下降。
      这个时候就需要使用一范数来近似了,就得到了L1正则化, ∣ ∣ w ∣ ∣ 1 = ∑ i ∣ w i ∣ ||w||_1=\sum_i|w_i| w1=iwi,对所有的参数的绝对值求和。直观来想,如果参数的绝对值之和比较大,也说明参数很复杂,如果让参数的1范数变得足够小,那么过拟合就没有那么严重了。
      这样模型的总损失就变成了 J ( w , b ) = J 0 ( W , b ) + λ ∣ ∣ w ∣ ∣ 1 J(w,b)=J_0(W,b)+\lambda||w||_1 J(w,b)=J0(W,b)+λw1,这样在让一范数变小的时候,自然就会有许多的参数被下降到0了。也就起到了正则化的作用。同时有足够多的参数值变成0,这就是一个稀疏的模型。所以L1正则化具有模型稀疏的特点。
      但是一范数使用绝对值,绝对值函数我们都知道在 w i = 0 w_i=0 wi=0点是一个不可导点,如果众多参数中有一个为0,这个时候就没法求梯度了,所以会给梯度下降带来阻力,需要使用其他技巧来优化,这样L1正则化的一个弊端就出来了,那就是优化的慢。
      范数之间有等价性,1范数可以正则化,2范数可以正则化算是一个比较自然的事情。(L2正则化并不是矩阵的2范数,而是矩阵的F范数),L2范数使用平方项的话,函数就是处处可导的,这样对于2范数做梯度下降就比较容易一些。所以相对于L1正则化,L2正则化收敛的更加快一点
      L2对参数约束,也能够使得部分参数变得小一点,起的影响就小,使得模型不是非常复杂,但是二范数的约束,可以让参数变得更小,可能参数小到一定程度,产生的影响已经被忽略了,这个参数就不是2范数的主要影响因素了,这个时候该参数就不会继续减小。所以L2 正则化能够得到比较小的参数,小到可以被忽略,但是无法小到0,也就不具有稀疏性
      使用L2正则化的时候,求导之后做梯度下降,参数的变化可以看成每次在原来的基础上乘一个小于1的因子,这样可以理解为L2正则化让参数衰减,所以L2正则化又叫权重衰减(Weight Decay)。
      网上有人解释说,L1正则化相当于一个菱形(参数的范数)和椭圆(损失函数的等高线)求最先交上的点,然后比较大概率的落到菱形的角上,使用L2正则化相当于圆(参数的参数)和椭圆求最先交上的点,事实上,这个观点是错误的。但是作为帮助理解记忆还是可以的。为什么L1范数比L2范数更容易得到稀疏性,这是由梯度下降算法和范数的特点决定的,具体原因这里不展开。
      了解了L1和L2正则化,这里做一个拓展。在机器学习中,线性回归模型,如果使用L1正则化,则得到的模型叫Lasso模型,如果使用L2正则化,则得到的模型叫岭(Ridge)回归。
      可能还有一个问题没解决,为什么说L1正则的先验分布是Laplace分布,L2正则先验是Gaussian分布,这个问题就得回到贝叶斯统计上。我们计算一个模型,用一个模型去对数据做判别,相当于求数据和参数的条件下,数据的标签y的最大后验分布。 p ( y ∣ x , w ) ∝ p ( w ∣ y , x ) / p ( w ) p(y|x,w)\propto p(w|y,x)/p(w) p(yx,w)p(wy,x)/p(w),对这个公式取对数得到 l o g p ( y ∣ x , w ) ∝ l o g p ( w ∣ y , x ) − l o g p ( w ) logp(y|x,w)\propto logp(w|y,x)-logp(w) logp(yx,w)logp(wy,x)logp(w),把正则化参数当成先验概率, L 1 = − l o g p ( w ) = ∣ w ∣ → p ( w ) = e − ∣ w ∣ L_1=-logp(w)=|w|\rightarrow p(w)=e^{-|w|} L1=logp(w)=wp(w)=ew,得到拉普拉斯分布的核。同理 L 2 = − l o g p ( w ) = w 2 → p ( w ) = e − w 2 L_2=-logp(w)=w^2\rightarrow p(w)=e^{-w^2} L2=logp(w)=w2p(w)=ew2,得到高斯分布的核。
      以上是我的个人理解,如果有不当的地方,请指出。

    展开全文
  • 所以我们这里得到对L1L2正则化的第一种理解: L1正则化⇌在原优化目标函数中增加约束条件∥w∥1≤CL1正则化 \rightleftharpoons 在原优化目标函数中增加约束条件\left \| w \right \|_{1 }\leq CL1正则化⇌在原优化...


    有时候在求解规划问题时,我们想要让得到的解满足一定的条件,换句话说,如果得到的解不能满足一定的条件我们更加倾向于拒绝它,而且这种倾向还是比较大的。这种情况在实际应用中比较常见,比如在准备出去旅行时,我们肯定不太希望背包里面放置特别重的东西,这时候就可以加一个条件,如果物品的重量大于一个给定的临界值,那么它的价值将大大降低,而这种大大降低可以通过给其添加一个很大的系数实现。

    同样的,在求解神经网络损失函数的最小值时,我们希望自变量权重向量 w w w满足一定的条件,如果不满足,就给其狠狠地惩罚一下。这时候我们就会在损失函数后面添加一个惩罚项,而这种惩罚项常为两种,我们分别称之为L1正则项和L2正则项,也称为L1范数和L2范数(原因见正则化描述部分)。正则项可以看做是损失函数的惩罚项,用来对损失函数中的系数做一些限制。

    1. 正则化描述:

    • L1正则化是指权值向量w中各个元素的绝对值之和,也就是权值向量的1范数;
    • L2正则化是指权值向量w中各个元素的平方和然后再求平方根,同样也是权值向量的2范数;

    一般都会在正则化项之前添加一个系数,这个系数需要用户设定,系数越大,正则化作用越明显,也即惩罚越明显。

    2. 正则化作用:

    • L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择;一定程度上,L1也可以防止过拟合;
    • L2正则化可以防止模型过拟合(overfitting);

    3. L1正则化作用的原理解释

    这一部分主要是摘自未雨愁眸的博客,链接为:文章链接

    3.1 何为稀疏矩阵

    稀疏矩阵指的是很多元素为0,只有少数元素是非零值的矩阵。

    神经网络中输入的特征数量是庞大的,如何选取有效的特征进行分类是神经网络的重要任务之一,如果神经网络是一个稀疏模型,表示只有少数有效的特征(系数非0)可以通过网络,绝大多数特征会被滤除(系数为0),这些被滤除的特征就是对模型没有贡献的“无关”特征,而少数系数是非0值的特征是我们需要额外关注的有效特征。也就是说,稀疏矩阵可以用于特征选择。

    3.2 L1正则化是怎么做到产生稀疏模型的?

    假设有如下带L1正则化的损失函数:

    L o s s = L o s s 0 + α L 1 Loss = Loss_0 + αL1 Loss=Loss0+αL1

    L o s s 0 Loss_0 Loss0 是原始损失函数,L1是加的正则化项, α α α 是正则化系数,其中 L1 是 模型中权重 w w w 的绝对值之和。

    神经网络训练的目标就是通过随机梯度下降等方法找到损失函数 L o s s Loss Loss的最小值,加了L1之后,相当于对原始 L o s s 0 Loss_0 Loss0做了一个约束,即在 L1 约束下求 L o s s 0 Loss_0 Loss0 最小值的解。

    对于最简单的情况,假设模型中只有两个权值 w1 和 w2 ,对于梯度下降法,可以分别画出求解 L o s s 0 Loss_0 Loss0 和 L1 过程中的等值线,如下图:

    在这里插入图片描述

    等值线是说在等值线上任一点处(取不同的w1和w2组合),模型计算的结果都是一样的。

    图中彩色弧线是 L o s s 0 Loss_0 Loss0的等值线,黑色方框是 L1的等值线。在图中,当 L o s s 0 Loss_0 Loss0等值线与L1图形首次相交的地方就是一个最优解,这个相交的点刚好是L1的顶点。

    注意到L1函数有很多个突出的点,二维情况下有4个,维数越多顶点越多,这些突出的点会比线段上的点有更大的几率首先接触到 L o s s 0 Loss_0 Loss0的等值线,而这些顶点正好对应有很多权值为0的矩阵, 即稀疏矩阵,这也就是为什么L1正则化可以用来产生稀疏矩阵进而用来进行特征选择的原因。

    对于L1正则化前的系数 α α α,是用来控制L1图形的大小, α α α越大,L1中各个系数就相对越小(因为优化目标之一是 α L 1 αL1 αL1的值趋近于0。 α α α大,L1系数取值就会小),L1的图形就越小; α α α越小,L1中各个系数就相对越大,L1的图形就越大。

    3.3 L2正则化是怎么做到防止模型过拟合的?

    仍以最简单的模型,只有两个权重 w 1 w1 w1 w 2 w2 w2为例, L o s s 0 Loss_0 Loss0和L2分别对应的等值线形状如下图:
    在这里插入图片描述

    由于L2是 w 1 w1 w1 w 2 w2 w2平方和再开方,所以L2的图形是一个圆。圆形相对方形来说没有顶点, L o s s 0 Loss_0 Loss0 和 L2图形相交使得 w 1 w1 w1或者 w 2 w2 w2等于的概率大大减小,所以L2正则化项不适合产生稀疏矩阵,不适合用来选择特征。

    相对来说,模型中所有矩阵系数都比较小的模型具有更强的抗干扰能力,也就是说可以避免过拟合。对于这种小系数的模型,特征会乘以很小的系数,使得特征的波动被压缩,所以泛化能力更好。

    L2正则化项的公式是所有权重系数平方之后再开方,所以在每次迭代过程中, 都会使得权重系数在满足最小化 L o s s 0 Loss_0 Loss0的基础上,一步一步使得权重系数 w 1 w1 w1 w 2 w2 w2趋向于0,最终得到权重系数很小的矩阵模型,达到防止过拟合的作用。

    对于L1正则化项,如果 α α α系数取很大,也会得到系数极小的最优解,这时的L1也具有防止过拟合的作用。

    L1和L2中的 α α α系数的作用是类似的, α α α系数越大,正则化作用越明显(但同时也可能意味着模型越难以收敛),从等值图上直观看就是L图形越小,对应矩阵系数越小。

    3.4 对于 w w w越小越能防止过拟合的理解

    说明:以下内容摘自gadwgdsk的博客,链接为:文章链接

    之前的BP神经网络,训练时候,算法会调整每层的参数 w w w使得损失尽可能小,由于数据存在很多干扰或者噪声,容易产生过拟合现象,导致网络对训练数据预测的效果较好,而对测试和验证数据的预测效果较差。过拟合的决策面可能如下所示:
    在这里插入图片描述
    事实表明,在相同网络结构下,决策面越复杂,参数w的值往往更大,而w较小时候,得到的决策面相对平缓。L1和L2正则化是在原有损失函数中增加了L2正则化项,在优化网络输出与真值的误差时还要让w尽量小。

    我的理解是, w w w越小,训练出来的模型就不会明显地倾向于某一方面,而是相对公平地进行加权。我们常说的过拟合就是明显的偏向于某一方面,因此从这个角度来理解的话 w w w越小越能防止过拟合了。

    3.5 L1正则先验分布是Laplace分布,L2正则先验分布是Gaussian分布

    要理解这一个首先需要说明一下L1和L2的推导过程,它们的推导过程可以从两个角度:

    • 带约束条件的优化求解(拉格朗日乘子法)
    • 贝叶斯学派的:最大后验概率

    3.5.1 基于约束条件的最优化

    对于模型权重系数 w w w的求解释通过最小化目标函数实现的,也就是求解:

    在这里插入图片描述
    首先,模型的复杂度可以用VC来衡量。通常情况下,模型VC维与系数 w w w的个数成线性关系:即:

    w w w数量越多,VC越大,模型越复杂

    为了限制模型的复杂度,我们要降低VC,自然的思路就是降低 w w w的数量,即:

    w w w向量中的一些元素为0或者说限制 w w w中非零元素的个数。我们可以在原优化问题上加入一些优化条件:

    在这里插入图片描述
    其中约束条件中的 ∣ ∣ w ∣ ∣ 0 ||w||_0 w0是指L0范数,表示的是向量 w w w非零元素的个数,让非零元素的个数小于某一个 C C C,就能有效地控制模型中的非零元素的个数,但是这是一个NP问题,不好解,于是我们需要做一定的“松弛”。为了达到我们想要的效果(权重向量 w w w中尽可能少的非零项),我们不再严格要求某些权重 w w w为0,而是要求权重 w w w向量中某些维度的非零参数尽可能接近于0,尽可能的小,这里我们可以使用L1L2范数来代替L0范数,即:

    在这里插入图片描述
    注意哈:这里使用L2范数的时候,为了后续处理(其实就是为了优化),可以对 ∥ w ∥ 2 \left \| w \right \|_{2} w2进行平方,只需要调整 C C C的取值即可。

    然后我们利用拉式乘子法求解:

    在这里插入图片描述
    其中这里的 α \alpha α是拉格朗日系数, α \alpha α>0,我们假设 α \alpha α的最优解为 α ∗ \alpha ^{*} α,对拉格朗日函数求最小化等价于:

    在这里插入图片描述
    上面和

    在这里插入图片描述
    等价。所以我们这里得到对L1L2正则化的第一种理解:

    L 1 正 则 化 ⇌ 在 原 优 化 目 标 函 数 中 增 加 约 束 条 件 ∥ w ∥ 1 ≤ C L1正则化 \rightleftharpoons 在原优化目标函数中增加约束条件\left \| w \right \|_{1 }\leq C L1w1C

    L 2 正 则 化 ⇌ 在 原 优 化 目 标 函 数 中 增 加 约 束 条 件 ∥ w ∥ 2 2 ≤ C L2正则化 \rightleftharpoons 在原优化目标函数中增加约束条件\left \| w \right \|{_{2}^{2}}\leq C L2w22C

    3.5.2 基于最大后验概率估计

    在最大似然估计中,是假设权重 w w w是未知的参数,从而求得对数似然函数(取了log):

    在这里插入图片描述
    从上式子可以看出:假设 y i y^{i} yi的概率分布不同,就可以得到不同的模型。
    若我们假设:

    在这里插入图片描述

    的高斯分布,我们就可以带入高斯分布的概率密度函数:
    在这里插入图片描述
    上面的C为常数项,常数项和系数不影响我们求解 m a x    l ( w ) max \ \ l(w) max  l(w)的解,所以我们可以令

    在这里插入图片描述
    我们就得到了Linear Regursion的代价函数。

    在最大化后验概率估计中,我们将权重 w w w看做随机变量,也具有某种分布,从而有:(下面求的是 w w w的后验概率)

    在这里插入图片描述
    同样取对数:

    在这里插入图片描述
    可以看出来后验概率函数为在似然函数的基础上增加了 l o g P ( w ) logP(w) logP(w) P ( w ) P(w) P(w)的意义是对权重系数 w w w的概率分布的先验假设,在收集到训练样本 { X , y } \{X,y\} {X,y}后,则可根据 w w w { X , y } \{X,y\} {X,y}下的后验概率对 w w w进行修正,从而做出对 w w w的更好地估计。

    若假设 w j w_{j} wj的先验分布为0均值的高斯分布,即

    在这里插入图片描述
    则有:

    在这里插入图片描述
    可以看到,在高斯分布下 log ⁡ P ( w ) \log P(w) logP(w)的效果等价于在代价函数中增加L2正则项。

    若假设 w j w_{j} wj服从均值为0,参数为a的拉普拉斯分布,即:(这个拉普拉斯分布的概率密度有点问题)
    在这里插入图片描述
    则有:
    在这里插入图片描述
    可以看到,在拉普拉斯分布下logP(w)的效果等价在代价函数中增加L1正项。

    故此,我们得到对于L1,L2正则化的第二种理解:

    L 1 正 则 化 可 通 过 假 设 权 重 w 的 先 验 分 布 为 拉 普 拉 斯 分 布 , 由 最 大 后 验 概 率 估 计 导 出 。 L1正则化可通过假设权重w的先验分布为拉普拉斯分布,由最大后验概率估计导出。 L1w

    L 2 正 则 化 可 通 过 假 设 权 重 w 的 先 验 分 布 为 高 斯 分 布 , 由 最 大 后 验 概 率 估 计 导 出 。 L2正则化可通过假设权重w的先验分布为高斯分布,由最大后验概率估计导出。 L2w

    最大后验概率估计的补充知识及理解

    最大后验概率的英文名为maximum a posterior prabability,简称为MAP

    假设我们需要根据观察数据 x x x 估计没有观察到的总体参数 θ \theta θ ,让 f f f 作为 x x x 的采样分布,这样 f ( x ∣ θ ) f(x|\theta) f(xθ)就是总体参数为 θ \theta θ时的概率,同时也是似然函数,因此参数 θ \theta θ的最大似然估计为
    在这里插入图片描述
    假设 θ \theta θ存在一个先验分布 g g g,这就允许我们将 θ \theta θ作为贝叶斯统计(en:Bayesian statistics)中的随机变量,这样的后验分布就是:

    在这里插入图片描述
    其中 θ \theta θ g g g的定义域(domain),这是贝叶斯定理的直接应用。

    于是最大后验估计方法把 θ \theta θ估计为这个随机变量的后验分布的众数(因为是将 θ \theta θ估计为使其后验概率达到最大时的值,而最大值体现出来就是众数):
    在这里插入图片描述

    后验分布的分母与 θ \theta θ无关,所以在优化过程中不起作用。注意当前验 g g g是常数函数时最大后验估计与最大似然估计重合

    补充说明:最大后验概率与最大似然估计中的经典方法有密切关系,但是它使用了一个增广的优化目标,进一步考虑了被估计量的先验概率分布。所以最大后验概率估计可以看作是规则化(regularization)的最大似然估计。

    展开全文
  • L1和L2正则化(岭回归LASSO)

    千次阅读 2019-03-01 11:15:59
    在上一篇文章中我们写到了L1损失函数和L2损失函数,本文将讲述L1正则化和L2正则化。损失函数和正则化是作用不同的两个部分,我们将在文中对其进行辨析。 L1L2正则化 &amp;amp;nbsp; &amp;amp;nbsp; &...
  • l1正则化和l2正则化I have read many articles on the topic to find out which is better out of two and what should I use for my model. I wasn’t satisfied with any of them and that left my brain confused...
  • L1 正则化和 L2 正则化之间有何区别?本文将给出直观的解释。 1. L2 正则化直观解释 L2 正则化公式非常简单,直接在原来的损失函数基础上加上权重参数的平方和: L = E i n + λ ∑ j w 2 j L = E i n ...
  • 机器学习中的L1和L2正则化

    千次阅读 多人点赞 2018-03-04 14:50:46
    (4) L1和L2正则化的直观理解 (一)什么是过拟合?什么是正则化项? 过拟合:当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致...
  • L1和L2正则化

    2019-09-26 13:53:11
    所以为了增加其泛化能力,最常用的方法就是增加正则化,常见的就是L1和L2正则化L2正则化 L2正则化,就是在原来损失函数的基础上加上权重向量的L2范式: E是基本损失函数,||ω||2是权重向量的L2范式,也就是...
  • L1和L2正则化区别

    2020-05-04 10:46:43
    1. L1和L2的定义 L1正则化,又叫Lasso Regression 如下图所示,L1是向量各元素... L2正则化,又叫Ridge Regression 如下图所示,L2是向量各元素的平方 2. L1和L2...
  • 线性模型常用来处理回归和分类任务,为了防止模型处于过拟合状态,需要用L1正则化和L2正则化降低模型的复杂度,很多线性回归模型正则化的文章会提到L1是通过稀疏参数(减少参数的数量)来降低复杂度,L2是通过减小...
  • 机器学习中,如果参数过多,模型过于复杂,容易造成过拟合(overfit)。即模型在训练样本数据上表现的很好,但...L1 正则化和 L2 正则化之间有何区别? L2正则化 L2 正则化公式非常简单,直接在原来的损失函数基础上...
  • L1正则化:指在代价函数后面添加l1正则化项,惩罚了系数的l1范数(l2范数定义为所有元素的绝对值之)。目的是使其中的某些权值减小到0,因此得到的w更加稀疏。 其中C0为初始的代价函数,加号后面的为添加的l1...
  • 为什么正则化可以减少过拟合? 简单来说,所谓正则化,就是在原Cost Fucntion上添加正则化项(如下图)。 正则化项能减少模型的非线性程度,从而降低模型的过拟合。 分情况讨论 A. 对于线性模型,其添加了...
  • 一文弄懂L0、L1和L2正则化范式

    千次阅读 2019-04-28 19:21:31
    文章目录正则化L0范数L1范数L2范数elastic net总结讨论几个问题为什么L1稀疏,L2平滑?实现参数的稀疏有什么好处吗?参数值越小代表模型越简单吗?正则式的应用场景 正则化 正则化的作用实际上就是防止模型过拟合,...
  • 首先我们先说明下L1和L2正则化的公式。 L1正则化公式: C=C0+λn∑w∣w∣ C=C_{0}+\frac{\lambda}{n} \sum_{w}|w| C=C0​+nλ​w∑​∣w∣ L2正则化公式: C=C0+λ2n∑ww2 C=C_{0}+\frac{\lambda}{2 n} \sum_{w} w^{...
  • 理解部分 L1L2区别:使用L1可以得到稀疏的权值;用L2可以得到平滑的权值 ...它是最小目标值yi估计值f(xi)绝对差值的求和: L2-norm(范数)也称为最小均方(least squares),它是最小目标值...
  • L1和L2正则化的作用: 防止网络过拟合,网络更简单(给极端值惩罚),网络的泛化能力越强。 正则化的对象是网络的参数,在深度学习中就是网络的权重。L1正则是参数的绝对值求和,L2正则是参数的平方。 使用方法:...
  • 点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达 本文转自|机器学习算法那些事 前言前段时间写了一篇文章《深入理解线性回归算法(二):正则项的详细分...
  • L1L2正则化 在回归中设要估计的参数为[θ1,θ2,…,θN]T[\theta_1, \theta_2, …, \theta_N]^T[θ1​,θ2​,…,θN​]T即θ\thetaθ,Loss-Function为J(θ)J(\theta)J(θ)。 L1正则化 J(θ)L1=J(θ)+1C∑i=1N∣...
  • L1范数是指向量中各个元素绝对值之 L1正则L1正则项的cost function: 用L1正则得到的参数稀疏,有很多0。用一个图例解释下。假设一个二维样本,求解二维参数W(w1,w2),如果没有正则项,对于线性回归的...
  • 深入理解L0,L1和L2正则化

    千次阅读 2019-04-21 18:27:57
    为什么L1正则化可以用来进行特征选择的工作?为什么正则化可以解决过拟合问题?本篇博客从机器学习中为什么需要范数讲起,引出L0L_0L0​,L1L_1L1​ L2L_2L2​的定义,然后回答上述的问题。 文章目录一、损失函数...
  • 机器学习中,如果参数过多,造成模型过于复杂,容易造成过拟合(overfiting),即模型在训练样本数据上表现的很好,但在实际测试样本上表现的较差,即不具有很强的...L1 正则化和 L2 正则化之间有何区别?本人在经...
  • L1正则化和L2正则化可以看成是损失函数的惩罚项,“惩罚”就是对损失函数中的某些参数做一些限制。对于线性回归模型,使用L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)。 L1正则化和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,887
精华内容 9,954
关键字:

l1和l2正则化