向量的範數:
向量範數是定義了向量的類似於長度的性質,滿足正定,齊次,三角不等式的關係就稱作範數。
向量的範數一般有L0, L1, L2與L_infinity範數,
L0範數:
定義為
即非0元素個數。
L0範數表示向量中非零元素的個數。如果我們使用L0來規則化參數向量w,就是希望w的元素大部分都為零。L0範數的這個屬性,使其非常適用於機器學習中的稀疏編碼。在特徵選擇中,通過最小化L0範數來尋找最少最優的稀疏特徵項。但是,L0範數的最小化問題是NP難問題。而L1範數是L0範數的最優凸近似,它比L0範數要更容易求解。因此,優化過程將會被轉換為更高維的範數(例如L1範數)問題。
L1範數:
L1範數是向量中各個元素絕對值之和,也被稱作「Lasso regularization」(稀疏規則算子)。
在機器學習特徵選擇中,稀疏規則化能夠實現特徵的自動選擇。一般來說,輸入向量X的大部分元素(也就是特徵)都是和最終的輸出Y沒有關係或者不提供任何信息的,在最小化目標函數的時候考慮這些額外的特徵,雖然可以獲得更小的訓練誤差,但在預測新的樣本時,這些沒用的信息反而會被考慮,從而幹擾了對正確Y的預測。稀疏規則化算子的引入就是為了完成特徵自動選擇,它會學習地去掉這些沒有信息的特徵,也就是把這些特徵對應的權重置為0。
L0範數與L1範數都可以實現稀疏,而L1範數比L0具有更好的優化求解特性而被廣泛使用。 L0範數本身是特徵選擇的最直接的方案,但因為之前說到的理由,其不可分,且很難優化,因此實際應用中我們使用L1來得到L0的最優凸近似。
總結一下上兩段的結論就是:L1範數和L0範數可以實現稀疏,L1因為擁有比L0更好的優化求解特性而被廣泛應用。這樣我們大概知道了可以實現稀疏,但是為什麼我們希望稀疏?讓參數稀疏有什麼好處呢?這裡有兩個理由:
1)特徵選擇(Feature Selection):
大家希望稀疏規則化的一個關鍵原因在於它能實現特徵的自動選擇。一般來說,X的大部分元素(也就是特徵)都是和最終的輸出沒有關係或者不提供任何信息的,在最小化目標函數的時候考慮這些額外的特徵,雖然可以獲得更小的訓練誤差,但在預測新的樣本時,這些沒用的信息反而會被考慮,從而幹擾了對正確的預測。稀疏規則化算子的引入就是為了完成特徵自動選擇的光榮使命,它會學習地去掉這些沒有信息的特徵,也就是把這些特徵對應的權重置為0。
2)可解釋性(Interpretability):
另一個青睞於稀疏的理由是,模型更容易解釋。例如患某種病的概率是y,然後我們收集到的數據x是1000維的,也就是我們需要尋找這1000種因素到底是怎麼影響患上這種病的概率的。假設這是個回歸模型:
當然了,為了讓y限定在的範圍,一般還得加個Logistic函數。 通過學習,如果最後學習到的就只有很少的非零元素,例如只有5個非零的,那麼我們就有理由相信,這些對應的特徵在患病分析上面提供的信息是巨大的,決策性的。也就是說,患不患這種病只和這5個因素有關,那醫生就好分析多了。但如果1000個都非0,醫生面對這1000種因素只能一臉懵逼不知如何是好。
L2範數
L2範數是最常用的範數了,我們用的最多的度量距離歐氏距離就是一種L2範數。在回歸裡面,有人把加了L2範數項的回歸c稱為「嶺回歸」(Ridge Regression),有人也叫它「權值衰減weight decay」。它被廣泛的應用在解決機器學習裡面的過擬問題合。
為什麼L2範數可以防止過擬合?回答這個問題之前,我們得先看看L2範數實際上是什麼。
L2範數是指向量各元素的平方和然後求平方根。我們讓L2範數的規則項最小,可以使得的每個元素都很小,都接近於0,但與L1範數不同,它不會讓它等於0,而是接近於0,這是有很大的區別的。而越小的參數說明模型越簡單,越簡單的模型則越不容易產生過擬合現象。為什麼越小的參數說明模型越簡單?因為當限制了參數很小,實際上就限制了多項式某些分量的影響很小(看上面線性回歸的模型的那個擬合的圖),這樣就相當於減少參數個數。
總結下:通過L2範數,我們可以實現了對模型空間的限制,從而在一定程度上避免了過擬合。
L2範數的好處是什麼呢?
1)學習理論的角度: 從學習理論的角度來說,L2範數可以防止過擬合,提升模型的泛化能力。
2)優化計算的角度: 從優化或者數值計算的角度來說,L2範數有助於處理 condition number不好的情況下矩陣求逆很困難的問題。關於condition number的知識參見這篇文章:https://blog.csdn.net/zouxy09/article/details/24972869
矩陣的範數:
矩陣範數是定義了矩陣的類似於長度的性質,與向量範數不同,他要滿足額外的性質:
矩陣範數一般有1-, 2-, infinity-, F-範數
列和範數,即所有矩陣列向量絕對值之和的最大值
譜範數,即ATA矩陣的最大特徵值的開平方。
行和範數,即所有矩陣行向量絕對值之和的最大值。以上這些都是誘導範數,由向量的Lp範數誘導而來。非誘導範數常見的為F-範數,即Frobenius範數以及核範數。
行和範數,即所有矩陣行向量絕對值之和的最大值,matlab調用函數norm(A, inf)。 以上這些都是誘導範數,由向量的範數誘導而來。
Frobenius範數,即矩陣元素絕對值的平方和再開平方
核範數英文稱呼叫Nuclear Norm。這個相對於上面火熱的L1和L2來說,可能大家就會陌生點。那它是幹嘛用的呢?約束Low-Rank(低秩)
秩可以度量相關性,而矩陣的相關性實際上有帶有了矩陣的結構信息。如果矩陣之間各行的相關性很強,那麼就表示這個矩陣實際可以投影到更低維的線性子空間,也就是用幾個向量就可以完全表達了,它就是低秩的。所以我們總結的一點就是:如果矩陣表達的是結構性信息,例如圖像、用戶-推薦表等等,那麼這個矩陣各行之間存在著一定的相關性,那這個矩陣一般就是低秩的。
如果A是一個m行n列的數值矩陣,rank(A)是X的秩,假如rank(A)遠小於m和n,則我們稱X是低秩矩陣。低秩矩陣每行或每列都可以用其他的行或列線性表出,可見它包含大量的冗餘信息。利用這種冗餘信息,可以對缺失數據進行恢復,也可以對數據進行特徵提取。
好了,低秩有了,那約束低秩只是約束rank(A)呀,和我們這節的核範數有什麼關係呢?他們的關係和L0與L1的關係一樣。因為rank()是非凸的函數,在優化問題裡面很難求解,那麼就需要尋找它的凸近似來近似它了。對,rank(A)的凸近似就是核範數。