链接:https://www.zhihu.com/question/26485586/answer/616029832
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
理解L1,L2 范数
L1,L2 范数即 L1-norm 和 L2-norm,自然,有L1、L2便也有L0、L3等等。因为在机器学习领域,L1 和 L2 范数应用比较多,比如作为正则项在回归中的使用 Lasso Regression(L1) 和 Ridge Regression(L2)。
因此,此两者的辨析也总被提及,或是考到。不过在说明两者定义和区别前,先来谈谈什么是范数(Norm)吧。
什么是范数?
在线性代数以及一些数学领域中,norm 的定义是
a function that assigns a strictly positive length or size to each vector in a vector space, except for the zero vector. ——Wikipedia
简单点说,一个向量的 norm 就是将该向量投影到 [0, ) 范围内的值,其中 0 值只有零向量的 norm 取到。看到这样的一个范围,相信大家就能想到其与现实中距离的类比,于是在机器学习中 norm 也就总被拿来表示距离关系:根据怎样怎样的范数,这两个向量有多远。
上面这个怎样怎样也就是范数种类,通常我们称为p-norm,严格定义是:
![v2-21c3e9c1972631e78330f27f1ac1ac8b_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/4e5404247d9ea1580e747d20d764acb4.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/20f479a07d1781bd8daa27453c6378e4.jpeg)
其中当 p 取 1 时被称为 1-norm,也就是提到的 L1-norm,同理 L2-norm 可得。
L1 和 L2 范数的定义
根据上述公式 L1-norm 和 L2-norm 的定义也就自然而然得到了。
先将 p=1 代入公式,就有了 L1-norm 的定义:
![v2-cec18f20eab9513cbfc06e1cee9f5fd1_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/66e1d105338c5a805d70d987b4202287.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/151281d22877495e8ea932fbc5941486.jpeg)
然后代入 p=2,L2-norm 也有了:
![v2-9f25240cdcb22f6dbc588004c8de1b4a_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/350d4bc8471c2cb75a462240db431ba8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bb1a2ed3796e187fff2588f8e6bea29c.png)
L2 展开就是熟悉的欧几里得范数:
![v2-719517542906dea80a8bed94cfd4318e_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/9bdaa558dbadcbb1b19607eb43568896.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/f0101c36f6a50212e167a86164801612.jpeg)
题外话,其中 L1-norm 又叫做 taxicab-norm 或者 Manhattan-norm,可能最早提出的大神直接用在曼哈顿区坐出租车来做比喻吧。下图中绿线是两个黑点的 L2 距离,而其他几根就是 taxicab 也就是 L1 距离,确实很像我们平时用地图时走的路线了。
![v2-f98502d6681a040760464cbe276cce8d_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/62a14c44e36ec73a2cb1416ae528b2dd.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/e095242a16ee3e467300001c720bfb34.jpeg)
L1 和 L2 范数在机器学习上最主要的应用大概分下面两类
- 作为损失函数使用
- 作为正则项使用也即所谓 L1-regularization 和 L2-regularization
我们可以担当损失函数
先来看个回归问题
![v2-3ddfc7ea94a81c6992028b9b3026e9f3_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/3ee43736c5154237b04fa8343007a05a.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/2d7f5692ce3a08d7e7545e2f4e6baa24.jpeg)
我们需要做的是,获得一条线,让数据点到线上的总距离(也就是error)最小。
还记得之前在范数介绍中提到的用来表示距离吗,于是也可以用能表示距离的 L1-norm 和 L2-norm 来作为损失函数了。
首先是 L1-norm 损失函数,又被称为 least absolute deviation (LAD,最小绝对偏差)
![v2-385e738fa75411a9150a289a30662d98_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/bec397f77034084e24068fb74e91fa5d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6bfe92faebeed4d7aab12f00575ed1ec.png)
如果我们最小化上面的损失函数,其实就是在最小化预测值 和目标值 的绝对值。
之后是大家最熟悉的 L2-norm 损失函数,又有大名最小二乘误差 (least squares error, LSE):
![v2-786e7280c82044198c3821849dc105c5_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/e86e0089ae6930349ea9420beaee752f.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/0ba30fd7a924c40cc53df6628a8c62bc.jpeg)
这个便不多解释了。
那么问题来了,这里不谈挖掘机,为什么大家一般都用 L2 损失函数,却不用 L1 呢?
这个就说来话长了,如果你问一个学习过微积分的同学,如何求一个方程的最小值,他/她大概会想当然的说:“求导,置零,解方程。” 号称微积分届的农夫三拳。
但如果给出一个绝对值的方程,突然就会发现农夫三拳不管用了,求最小值就有点麻烦了。主要是因为绝对值的倒数是不连续的。
同样的对于 L1 和 L2 损失函数的选择,也会碰到同样的问题,所以最后大家一般用 L2 损失函数而不用 L1 损失函数的原因就是:
因为计算方便!
可以直接求导获得取最小值时各个参数的取值。
此外还有一点,用 L2 一定只有一条最好的预测线,L1 则因为其性质可能存在多个最优解。(更多关于L1 L2 损失函数参考索引5)
当然 L1 损失函数难道就没有什么好处了吗,也是有的,那就是鲁棒性 (Robust) 更强,对异常值更不敏感。
我们还能担当正则项
因为机器学习中众所周知的过拟合问题,所以用正则化防止过拟合,成了机器学习中一个非常重要的技巧。
但数学上来讲,其实就是在损失函数中加个正则项(Regularization Term),来防止参数拟合得过好。
L1-regularization 和 L2-regularization 便都是我们常用的正则项,两者公式的例子分别如下
![v2-81dd2e4621f822929ccd321dfa4ca413_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/fc699672e93192541841a210e3055ac5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0bd70b3e3f278e93f241fcf5b0f8622b.png)
![v2-dd562d85f0bd2550ac04b9daa4762969_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/e8bfb25acbf9fccdc54535ded8e97f71.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d268e207b644477cb0bf587e22ec2e53.png)
这两个正则项最主要的不同,包括两点:
- 如上面提到的,L2 计算起来更方便,而 L1 在特别是非稀疏向量上的计算效率就很低;
- 还有就是 L1 最重要的一个特点,输出稀疏,会把不重要的特征直接置零,而 L2 则不会;
- 最后,如之前多次提过,L2 有唯一解,而 L1 不是。
这里关于第二条输出稀疏我想再进行一些详细讲解,因为 L1 天然的输出稀疏性,把不重要的特征都置为 0,所以它也是一个天然的特征选择器。
可是为什么 L1 会有这样的性质呢,而 L2 没有呢?这里用个直观的例子来讲解。
来一步一步看吧,首先获知用梯度下降法来优化时,需要求导获得梯度,然后用以更新参数。
![v2-949bffa97f4541c5926434ca493cdea5_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/3ab7ab21b3bf88f420997c727faab161.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1012fbfa2ff9427cb641bbf3e396edff.png)
于是分别先对 L1 正则项和 L2 正则项来进行求导,可得。
![v2-724ff11590c2fee9fdece95dad8f5346_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/ecccc6f81e73a4ba89c9f60e40ece64f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0ae38e44a8940cb1173301d6f899a49b.png)
![v2-4c423dee6740fec107d2cf5e101b09c3_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/ed9b23648cdb6180f55aae5b0e69e3a1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5775df4174a245d20fedac7cf8125574.png)
之后将 L1 和 L2 和它们的导数画在图上
![v2-ea5454fc80e6c601fdb347caeeba28cc_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/cbf714b543a031306829332485eb98d5.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/6dceccd2fef477d62e16cbdb19577b52.jpeg)
![v2-d88e01e730c8e8d91facbd2b1248bfec_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/15910138d8456ae793c69e753512b09f.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/759cc1b1e81b23b331a41f84788df710.jpeg)
于是会发现,在梯度更新时,不管 L1 的大小是多少(只要不是0)梯度都是1或者-1,所以每次更新时,它都是稳步向0前进。
![v2-dea7fcc3452712b966967e18cd293387_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/d0eb4ddb5fc6a6edf6b8bf2034194656.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/2e51b076d543b61b49e6e72ddf27adf7.jpeg)
而看 L2 的话,就会发现它的梯度会越靠近0,就变得越小。
![v2-7c0bf87174eb8e7cdc38c86318843a88_hd.jpg](https://i-blog.csdnimg.cn/blog_migrate/a1064cfc5663e31f444a0e032946e02e.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/2c997753a11ade3f60d707239fb89fdb.jpeg)
也就是说加了 L1 正则的话基本上经过一定步数后很可能变为0,而 L2 几乎不可能,因为在值小的时候其梯度也会变小。于是也就造成了 L1 输出稀疏的特性。