理解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,嚴格定義是:
其中當 p 取 1 時被稱為 1-norm,也就是提到的 L1-norm,同理 L2-norm 可得。
L1 和 L2 范數的定義
根據上述公式 L1-norm 和 L2-norm 的定義也就自然而然得到了。
先將 p=1 代入公式,就有了 L1-norm 的定義:
然后代入 p=2,L2-norm 也有了:
L2 展開就是熟悉的歐幾里得范數:
題外話,其中 L1-norm 又叫做 taxicab-norm 或者 Manhattan-norm,可能最早提出的大神直接用在曼哈頓區坐出租車來做比喻吧。下圖中綠線是兩個黑點的 L2 距離,而其他幾根就是 taxicab 也就是 L1 距離,確實很像我們平時用地圖時走的路線了。
L1 和 L2 范數在機器學習上最主要的應用大概分下面兩類
作為損失函數使用
作為正則項使用也即所謂 L1-regularization 和 L2-regularization
我們可以擔當損失函數
先來看個回歸問題
我們需要做的是,獲得一條線,讓數據點到線上的總距離(也就是error)最小。
還記得之前在范數介紹中提到的用來表示距離嗎,于是也可以用能表示距離的 L1-norm 和 L2-norm 來作為損失函數了。
首先是 L1-norm 損失函數,又被稱為 least absolute deviation (LAD,最小絕對偏差)
如果我們最小化上面的損失函數,其實就是在最小化預測值 ? 和目標值 ? 的絕對值。
之后是大家最熟悉的 L2-norm 損失函數,又有大名最小二乘誤差 (least squares error, LSE):
這個便不多解釋了。
那么問題來了,這里不談挖掘機,為什么大家一般都用 L2 損失函數,卻不用 L1 呢?
這個就說來話長了,如果你問一個學習過微積分的同學,如何求一個方程的最小值,他/她大概會想當然的說:“求導,置零,解方程。” 號稱微積分屆的農夫三拳。
但如果給出一個絕對值的方程,突然就會發現農夫三拳不管用了,求最小值就有點麻煩了。主要是因為絕對值的倒數是不連續的。
同樣的對于 L1 和 L2 損失函數的選擇,也會碰到同樣的問題,所以最后大家一般用 L2 損失函數而不用 L1 損失函數的原因就是:
因為計算方便!
可以直接求導獲得取最小值時各個參數的取值。
此外還有一點,用 L2 一定只有一條最好的預測線,L1 則因為其性質可能存在多個最優解。(更多關于L1 L2 損失函數參考索引5)
當然 L1 損失函數難道就沒有什么好處了嗎,也是有的,那就是魯棒性 (Robust) 更強,對異常值更不敏感。
我們還能擔當正則項
因為機器學習中眾所周知的過擬合問題,所以用正則化防止過擬合,成了機器學習中一個非常重要的技巧。
但數學上來講,其實就是在損失函數中加個正則項(Regularization Term),來防止參數擬合得過好。
L1-regularization 和 L2-regularization 便都是我們常用的正則項,兩者公式的例子分別如下
這兩個正則項最主要的不同,包括兩點:
如上面提到的,L2 計算起來更方便,而 L1 在特別是非稀疏向量上的計算效率就很低;
還有就是 L1 最重要的一個特點,輸出稀疏,會把不重要的特征直接置零,而 L2 則不會;
最后,如之前多次提過,L2 有唯一解,而 L1 不是。
這里關于第二條輸出稀疏我想再進行一些詳細講解,因為 L1 天然的輸出稀疏性,把不重要的特征都置為 0,所以它也是一個天然的特征選擇器。
可是為什么 L1 會有這樣的性質呢,而 L2 沒有呢?這里用個直觀的例子來講解。
來一步一步看吧,首先獲知用梯度下降法來優化時,需要求導獲得梯度,然后用以更新參數。
于是分別先對 L1 正則項和 L2 正則項來進行求導,可得。
之后將 L1 和 L2 和它們的導數畫在圖上
于是會發現,在梯度更新時,不管 L1 的大小是多少(只要不是0)梯度都是1或者-1,所以每次更新時,它都是穩步向0前進。
而看 L2 的話,就會發現它的梯度會越靠近0,就變得越小。
也就是說加了 L1 正則的話基本上經過一定步數后很可能變為0,而 L2 幾乎不可能,因為在值小的時候其梯度也會變小。于是也就造成了 L1 輸出稀疏的特性。