zoukankan      html  css  js  c++  java
  • 机器学习之正则化【L1 & L2】

    前言

    L1、L2在机器学习方向有两种含义:一是L1范数、L2范数的损失函数,二是L1、L2正则化

    L1范数、L2范数损失函数

    L1范数损失函数:

    L2范数损失函数:

    L1、L2分别对应损失函数中的绝对值损失函数和平方损失函数

    区别:

     分析:

    robust: 与L2相比,L1受异常点影响比较小,因此稳健

    stable: 如果仅一个点,L1就是一个直线,L2是二次,对于直线来说是多解,因此不稳定,而二次函数只有一个极小值点

    L1、L2正则化

    为什么出现正则化?

    正则化的根本原因是 输入样本的丰度不够,不能涵盖所有的情况。

    解决策略 :

    • 对数据源扩充的方法:

    输⼊数据源加上满⾜⼀定分布律的噪声,然后把加上噪声后的输⼊源当作“伪”新训练样本。

    针对图⽚,还可以采取部分截取、⾓度旋转等数据增强⼿段,增加“新”样本。对于词表,可以增加单词的近义词,也能达到类似的效果。

    • ⽹络权值的修正

    神经⽹络的训练,对某些权值较为敏感。对权值稍微进⾏⼀些修改,训练的结果可能就迥然不同,所以为了保证⽹络的泛化能⼒,有必要对权值进⾏修正。具体的做法是,在⽹络的权值上加上符合⼀定分布规律的噪声,然后再重新训练⽹络,这样就增加了整个⽹络的“抗打击”能⼒,⽹络的输出结果就不会随数据源的变化⽽有很⼤变动

    • 采取“早停”策略

    提前停⽌训练。虽然接着训练可能会让训练误差变⼩,但让泛化误差更⼩,才是我们更⾼的⽬标

    • 也可以采用集成方法,训练多个模型
    • dropout

    其本质就是通过改变神经⽹络的结构,⼈为添加⽹络的不确定性,从⽽锻炼神经⽹络的泛化能⼒。换句话说,通过丢弃部分节点,让各个⼦⽹络变得不同

    一、L1的出现是为了解决什么问题?怎么解决的

        L1就是参数的绝对值之和,它的目的就是为了产生一个关于参数w的稀疏矩阵

        1、为什么会产生稀疏矩阵?

             参考:https://www.zhihu.com/question/37096933

            首先,我们要优化的是这个问题 minlimits_w E_D(w) + lambda E_R(w) 。

    其次, minlimits_w E_D(w) + lambda E_R(w) 和 minlimits_w E_D(w) \s.t. E_R(w) leqslant eta

    这个优化问题是等价的,即对一个特定的 lambda 总存在一个 eta 使得这两个问题是等价的(这个是优化里的知识)。

    最后,下面这个图表达的其实 minlimits_w E_D(w) \s.t. E_R(w) leqslant eta

    这个优化问题,把 w 的解限制在黄色区域内,同时使得经验损失尽可能小

     【高频面试题】为什么l1比l2更容易得到稀疏解?https://www.zhihu.com/question/37096933

       从两方面解释,一是直观解释,另一种是梯度推导

       【直观解释】

        如上所述,无论是L1,还是L2都可以看成一种条件优化问题,L1所对应的优化区间是个菱形(右图),L2对应的是个圆形,而最优解就是 等高线与限定区间的交点,对于L1,交点是在坐标轴上,对于L2,交点是不在坐标轴上,所以L1更容易得到稀疏解。

       【梯度解释】

        

        2、产生稀疏矩阵的目的?

            参考:https://blog.csdn.net/zouxy09/article/details/24971995

            产生稀疏矩阵的好处可以从特征选择来解释

            1)实现特征的自动选择

            用于训练的数据的特征维度非常多,并且这么多的特征对于最后的结果来说并不是所有的都有用,而且特征之间还有线性关系,当考虑这些无用的特征xi时,可以获得较小的训练误差(不太理解),但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yi的预测。所以L1会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。

    二、为什么会出现L2

         L2范数是指向量各元素的平方和然后求平方根。我们让L2范数的规则项||W||2最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0,这里是有很大的区别的。而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象 。

        L2的好处:

        1)、防止过拟合,提高泛化能力

        2)、从优化或者数值计算的角度来说,L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题(不理解

    L1会趋向于产生少量的特征,而其他的特征都是0,从而产生稀疏矩阵,自动选择特征,而L2会考虑更多的特征,这些特征都会接近于0,因此不是稀疏矩阵。

    疑问:

    1)产生稀疏矩阵好还是不产生稀疏矩阵好,产生稀疏矩阵感觉有点降维的感觉,会选择有用的特征?

       感觉L2比L1好,因为L2产生的接近于稀疏的矩阵,不是0但接近0,这样能考虑更多的特征,而对没用的特征不会一棍子打死,只是给一个很小的权重

    三、Tensorflow中L1、L2的实现 

    tf.nn.l2_loss(t, name=None)对t采用l2范式进行计算:output = sum(t ** 2) / 2, t是一维或者多维数组。

    tf.add_n([p1, p2, p3....]) 实现列表元素相加,p1, p2, p3分别表示列表

    一种显示的计算:

    loss = (tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(
        logits=out_layer, labels=tf_train_labels)) +
        0.01*tf.nn.l2_loss(hidden_weights) +
        0.01*tf.nn.l2_loss(hidden_biases) +
        0.01*tf.nn.l2_loss(out_weights) +
        0.01*tf.nn.l2_loss(out_biases))#考虑了weight和bias

    一种隐式的计算:

    vars   = tf.trainable_variables() //获取所以的变量
    lossL2 = tf.add_n([ tf.nn.l2_loss(v) for v in vars ]) * 0.001 //所有的变量使用l2计算方式累加
    //不考虑bias的情况
    lossL2 = tf.add_n([ tf.nn.l2_loss(v) for v in vars
                        if 'bias' not in v.name ])
    //把l2损失加入到loss项里
    loss = (tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(
        logits=out_layer, labels=tf_train_labels)) +
        0.001*lossL2)

    L1不可导点如何优化:

    1、坐标轴下降法

    2、近似算法

    https://www.cnblogs.com/ZeroTensor/p/11099332.html

    参考:

    [1] http://www.chioka.in/differences-between-l1-and-l2-as-loss-function-and-regularization/

    [2] https://blog.csdn.net/chaowang1994/article/details/80388990

  • 相关阅读:
    convert image to base64 and post to RESTful wcf
    在android webview实现截屏的手动tounchmove裁剪图片
    How to use jquery ajax and android request security RESTful WCF
    using swfUpload in asp.net mvc
    using HttpClient and sending json data to RESTful server in adroind
    ODP.NET数据访问
    android image watermark
    解决国内不能访问github的问题
    idapro权威指南第二版阅读笔记第九章 交叉引用和绘图功能
    idapro权威指南第二版阅读笔记第二章 逆向和反汇编工具
  • 原文地址:https://www.cnblogs.com/zhaopAC/p/9734225.html
Copyright © 2011-2022 走看看