l1和l2正则

http://freemind.pluskid.org/machine-learning/sparsity-and-some-basics-of-l1-regularization/


Sparsity 是当今机器学习领域中的一个重要话题。John Lafferty 和 Larry Wasserman 在 2006 年的一篇评论中提到:

Some current challenges … are high dimensional data,sparsity,semi-supervised learning,the relation between computation and risk,and structured prediction.John Lafferty and Larry Wasserman. Challenges in statistical machine learning. Statistica Sinica. Volume 16,Number 2,pp.307-323,2006.

Sparsity 的最重要的客户大概要属 high dimensional data 了吧。现在的机器学习问题中,具有非常高维度的数据随处可见。例如,在文档或图片分类中常用的bag of words模型里,如果词典的大小是一百万,那么每个文档将由一百万维的向量来表示。高维度带来的的一个问题就是计算量:在一百万维的空间中,即使计算向量的内积这样的基本操作也会是非常费力的。不过,如果向量是稀疏的的话(事实上在 bag of words 模型中文档向量通常都是非常稀疏的),例如两个向量分别只有 L1 L2 个非零元素,那么计算内积可以只使用 min(L1,L2) 次乘法完成。因此稀疏性对于解决高维度数据的计算量问题是非常有效的。

当然高维度带来的问题不止是在计算量上。例如在许多生物相关的问题中,数据的维度非常高,但是由于收集数据需要昂贵的实验,因此可用的训练数据却相当少,这样的问题通常称为small n ,large p problem——我们一般用 n 表示数据点的个数,用 p 表示变量的个数,即数据维度。当 pn 的时候,不做任何其他假设或者限制的话,学习问题基本上是没法进行的。因为如果用上所有变量的话, p 越大,通常会导致模型越复杂,但是反过来 n 有很小,于是就会出现很严重的 overfitting 问题。例如,最简单的线性回归模型:

f(x)=j=1pwjxj=wTx

使用 square loss 来进行学习的话,就变成最小化如下的问题

J(w)=1ni=1n(yif(xi))2=1nyXw2

这里 X=(x1,,xn)TRn×p 是数据矩阵,而 y=(y1,,yn)T 是由标签组成的列向量。该问题具有解析解

wˆ=(XTX)1XTy

然而,如果 p>n 的话,矩阵 XTX 将会不是满秩的,而这个解也没法算出来。或者更确切地说,将会有无穷多个解。也就是说,我们的数据不足以确定一个解,如果我们从所有可行解里随机选一个的话,很可能并不是真正好的解,总而言之,我们 overfitting 了。

解决 overfitting 最常用的办法就是 regularization ,例如著名的 ridge regression 就是添加一个 2 regularizer :

JR(w)=1nyXw2+λw2

直观地来看,添加这个 regularizer 会使得模型的解偏向于 norm 较小的 w 。从凸优化的角度来说,最小化上面这个 J(w) 等价于如下问题:

minw1nyXw2,s.t.wC

其中 C 是和 λ 一一对应的是个常数。也就是说,我们通过限制 w 的 norm 的大小实现了对模型空间的限制,从而在一定程度上(取决于 λ 的大小)避免了 overfitting 。不过 ridge regression 并不具有产生稀疏解的能力,得到的系数 w 仍然需要数据中的所有特征才能计算预测结果,从计算量上来说并没有得到改观。

不过,特别是在像生物或者医学等通常需要和人交互的领域,稀疏的解除了计算量上的好处之外,更重要的是更具有可解释性。比如说,一个病如果依赖于 5 个变量的话,将会更易于医生理解、描述和总结规律,但是如果依赖于 5000 个变量的话,基本上就超出人肉可处理的范围了。

在这里引入稀疏性的方法是用 1 regularization 代替 2 regularization,得到如下的目标函数

JL(w)=1nyXw2+λw1

该问题通常被称为 LASSO (least absolute shrinkage and selection operator) 。LASSO 仍然是一个 convex optimization 问题,不过不再具有解解析解。它的优良性质是能产生稀疏性,导致 w 中许多项变成零。

可是,为什么它能产生稀疏性呢?这也是一直让我挺感兴趣的一个问题,事实上在之前申请学校的时候一次电话面试中我也被问到了这个问题。我当时的回答是背后的理论我并不是很清楚,但是我知道一个直观上的理解。下面我们就先来看一下这个直观上的理解。

首先,很 ridge regression 类似,上面形式的 LASSO 问题也等价于如下形式:

minw1nyXw2,s.t.w1C

也就是说,我们将模型空间限制在 w 的一个 1 -ball 中。为了便于可视化,我们考虑两维的情况,在 (w1,w2) 平面上可以画出目标函数的等高线,而约束条件则成为平面上半径为 C 的一个 norm ball 。等高线与 norm ball 首次相交的地方就是最优解。如图(fig: 1)所示:

  • 1 -ball meets quadratic function. 1 -ball has corners. It’s very likely that the meet-point is at one of the corners.
  • 2 -ball meets quadratic function. 2 -ball has no corner. It is very unlikely that the meet-point is on any of axes."


可以看到, 1 -ball 与 2 -ball 的不同就在于他在和每个坐标轴相交的地方都有出现,而目标函数的测地线除非位置摆得非常好,大部分时候都会在角的地方相交。注意到在角的位置为产生稀疏性,例如图中的相交点就有 w1=0 ,而更高维的时候(想象一下三维的 1 -ball 是什么样的?)除了角点以外,还有很多边的轮廓也是既有很大的概率成为第一次相交的地方,又会产生稀疏性。

相比之下, 2 -ball 就没有这样的性质,因为没有角,所以第一次相交的地方出现在具有稀疏性的位置的概率就变得非常小了。这就从直观上来解释了为什么 1 regularization 能产生稀疏性,而 2 regularization 不行的原因了。

不过,如果只限于 intuitive 的解释的话,就不那么好玩了,但是背后完整的理论又不是那么容易能够搞清楚的,既然这次的标题是 Basics ,我们就先来看一个简单的特殊情况好了。

接下来我们考虑 orthonormal design 的情况: (1/n)XTX=I 。然后看看 LASSO 的解具体是什么样子。注意 orthonormal design 实际上是要求特征之间相互正交。这可以通过对数据进行PCA以及模长 normalize 来实现。

注意到 LASSO 的目标函数(eq: 2)是 convex 的,根据KKT 条件,在最优解的地方要求 gradient JL(w)=0 。不过这里有一点小问题: 1 -norm 不是光滑的,不存在 gradient ,所以我们需要用一点subgradient的东西。

定义subgradient; subdifferential

对于在 p 维欧氏空间中的凸开子集 U 上定义的实值函数 f:UR ,一个向量 p 维向量 v 称为 f 在一点 x0U 处的 subgradient ,如果对于任意 xU ,满足

f(x)f(x0)v(xx0)
由在点 x0 处的所有 subgradient 所组成的集合称为 x0 处的 subdifferential ,记为 f(x0)

注意 subgradient 和 subdifferential 只是对凸函数定义的。例如一维的情况, f(x)=|x| ,在 x=0 处的 subdifferential 就是 [1,+1] 这个区间(集合)。注意在 f 的 gradient 存在的点,subdifferential 将是由 gradient 构成的一个单点集合。这样就将 gradient 的概念加以推广了。这个推广有一个很好的性质。

性质condition for global minimizer 点 x0 是凸函数 f 的一个全局最小值点,当且仅当 0f(x0)

证明很简单,将 0f(x0) 带入定义(def: 1)中的那个式子立即就可以得到。有了这个工具之后,就可以对 LASSO 的最优解进行分析了。在此之前,我们先看一下原始的 least square 问题的最优解(eq: 1)现在变成了什么样子,由于 orthonormal design ,我们有

wˆ=1nXTy

然后我们再来看 LASSO ,假设 wˉ=(wˉ1,,wˉp)T JL(w) 的全局最优值点。考虑第 j 个变量 wˉj ,有两种情况。

gradient 存在,此时 wˉj0

由于 gradient 在最小值点必须要等于零,我们有

JL(w)wjwˉj=0

亦即

2n(XTyXTXwˉ)j+λsign(wˉj)=0

根据 orthonormal design 性质以及 least square 问题在 orthonormal design 时的解(eq: 3)化简得到

wˉj=wˆjλ2sign(wˉj)

从这个式子也可以明显看出 wˉj wˆj 是同号的,于是 sign(wˉj) 等于 sign(wˆj) ,所以上面的式子变为

wˉj=wˆjλ2sign(wˆj)=sign(wˆj)(wˆjλ2)

再用一次 sign(wˆj)=sign(wˉj) ,两边同时乘以 sign(wˉj) ,可以得到

wˆjλ2=wˉj0

于是刚才的式子可以进一步写为

wˉj=sign(wˆj)(wˆjλ2)+

(x)+=max{x,0} 表示 x 的正部。

gradient 不存在,此时 wˉj=0

根据 subgradient 在最小值点处的性质的性质,此时比有

0=wˉjJL(wˉ)={2n(XTyXTXwˉ)j+λe:e[1,1]}={2wˉj2wˆj+λe:e[1,1]}

亦即存在 e0[1,1] 使得

0=2wˉj2wˆj+λe0=2wˆj+λe0

于是

|wˆj|=λ2|e0|λ2

又因为 wˉj=0 ,所以这个时候式子也可以统一为(eq: 4)的形式。 如此一来,在 orthonormal design 的情况下,LASSO 的最优解就可以写为(eq: 4),可以用图(fig: 2)形象地表达出来。

图上画了原始的 least square 解,LASSO 的解以及 ridge regression 的解,用上面同样的方法(不过由于 ridge regularizer 是 smooth 的,所以过程却简单得多)可以得知 ridge regression 的解是如下形式

21+2λwˆj

可以 ridge regression 只是做了一个全局缩放,而 LASSO 则是做了一个 soft thresholding :将绝对值小于 λ/2 的那些系数直接变成零了,这也就更加令人信服地解释了 LASSO 为何能够产生稀疏解了。


上面的文字,前半段看懂了,后半段功力不够,还没有看懂

下面就讲下个人的直观理解:


l2正则可以防止参数估计的过拟合,但是选择合适lambda比较困难,需要交叉验证。如果有个特征与输出结果不相关,则L2会给一个特别小的值,但是不会为0.

l1正则会产生稀疏解,即不相关的的特征对应的权重为0,就相当于降低了维度。但是l1的求解复杂度要高于l2,并且l1更为流行

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


jquery.validate使用攻略(表单校验) 目录 jquery.validate使用攻略1 第一章 jquery.validate使用攻略1 第二章 jQuery.validate.js API7 Custom selectors7 Utilities8 Validato
/\s+/g和/\s/g的区别 正则表达式/\s+/g和/\s/g,目的均是找出目标字符串中的所有空白字符,但两者到底有什么区别呢? 我们先来看下面一个例子: let name = 'ye wen jun';let ans = name.replace(/\s/g, '&#3
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母 /^[0-9a-zA-Z]*$/g jQuery.validator.addMethod("letters", function (value, element) { return this.optio
this.optional(element)的用法 this.optional(element)是jquery.validator.js表单验证框架中的一个函数,用于表单控件的值不为空时才触发验证。 简单来说,就是当表单控件值为空的时候不会进行表单校验,此函数会返回true,表示校验通过,当表单控件
jQuery.validate 表单动态验证 实际上jQuery.validate提供了动态校验的方法。而动态拼JSON串的方式是不支持动态校验的。牺牲jQuery.validate的性能优化可以实现(jQuery.validate的性能优化见图1.2 jQuery.validate源码 )。 也可
自定义验证之这能输入数字(包括小数 负数 ) <script type="text/javascript"> function onlyNumber(obj){ //得到第一个字符是否为负号 var t = obj.value.charAt(0); //先把非数字的都
// 引入了外部的验证规则 import { validateAccountNumber } from "@/utils/validate"; validator.js /*是否合法IP地址*/ export function validateIP(rule, value,cal
VUE开发--表单验证(六十三) 一、常用验证方式 vue 中表单字段验证的写法和方式有多种,常用的验证方式有3种: data 中验证 表单内容: <!-- 表单 --> <el-form ref="rulesForm" :rules="formRul
正则表达式 座机的: 例子: 座机有效写法: 0316-8418331 (010)-67433539 (010)67433539 010-67433539 (0316)-8418331 (0316)8418331 正则表达式写法 0\d{2,3}-\d{7,8}|\(?0\d{2,3}[)-]?\d
var reg = /^0\.[1-9]{0,2}$/;var linka = 0.1;console.log (reg.test (linka)); 0到1两位小数正则 ^(0\.(0[1-9]|[1-9]{1,2}|[1-9]0)$)|^1$ 不含0、0.0、0.00 // 验证是否是[1-10
input最大长度限制问题 <input type="text" maxlength="5" /> //可以 <input type="number" maxlength="5" /> //没有效
js输入验证是否为空、是否为null、是否都是空格 目录 1.截头去尾 trim 2.截头去尾 会去掉开始和结束的空格,类似于trim 3.会去掉所有的空格,包括开始,结束,中间 1.截头去尾 trim str=str.trim(); // 强烈推荐 最常用、最实用 or $.trim(str);
正则表达式语法大全 字符串.match(正则):返回符合的字符串,若不满足返回null 字符串.search(正则):返回搜索到的位置,若非一个字符,则返回第一个字母的下标,若不匹配则返回-1 字符串.replace(正则,新的字符串):找到符合正则的内容并替换 正则.test(字符串):在字符串中
正整数正则表达式正数的正则表达式(包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+\d)|0)$正数的正则表达式(不包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+
JS 正则验证 test() /*用途:检查输入手机号码是否正确输入:s:字符串返回:如果通过验证返回true,否则返回false /function checkMobile(s){var regu =/[1][3][0-9]{9}$/;var re = new RegExp(regu);if (r
请输入保留两位小数的销售价的正则: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/ 1.只能输入英文 <input type="text" onkeyup="value
判断价格的正则表达式 价格的正则表达式 /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/; 1 解析:价格符合两种格式 ^ [1-9]\d*(.\d{1,2})?$ : 1-9 开头,后跟是 0-9,可以跟小数点,但小数点后要带上 1-2 位小数,类似 2,2
文章浏览阅读106次。这篇文章主要介绍了最实用的正则表达式整理,比如校验邮箱的正则,号码相关,数字相关等等,本文给大家列举的比较多,需要的朋友可以参考下。_/^(?:[1-9]d*)$/ 手机号
文章浏览阅读1.2k次。4、匹配中的==、an==、== an9、i9 == "9i"和99p==请注意下面这部分的作用,它在匹配中间内容的时候排除了说明:当html字符串如下时,可以匹配到两处,表示匹配的字符串不包含and且不包含空白字符。说明:在上面的正则表达式中,_gvim正则表达式匹配不包含某个字符串
文章浏览阅读897次。【代码】正则表达式匹配a标签的href。_auto.js 正则匹配herf