搞過機器學習的同窗都知道,L1正則就是絕對值的方式,而L2正則是平方和的形式。L1能產生稀疏的特徵,這對大規模的機器學習灰常灰常重要。可是L1的求解過程,實在是太過蛋疼。因此即便L1能產生稀疏特徵,不到萬不得已,咱們也仍是寧肯用L2正則,由於L2正則計算起來方便得多。。。html
正則化項不該該以正則化的表面意思去理解,應該翻譯爲規則化纔對!git
通常回歸分析中迴歸ww表示特徵的係數,從上式能夠看到正則化項是對係數作了處理(限制)。L1正則化和L2正則化的說明以下:markdown
通常都會在正則化項以前添加一個係數,Python中用αα表示,一些文章也用λλ表示。這個係數須要用戶指定。機器學習
那添加L1和L2正則化有什麼用?下面是L1正則化和L2正則化的做用,這些表述能夠在不少文章中找到。函數
機器學習中幾乎均可以看到損失函數後面會添加一個額外項,經常使用的額外項通常有兩種,通常英文稱做ℓ1ℓ1-norm和ℓ2ℓ2-norm,中文稱做L1正則化和L2正則化,或者L1範數和L2範數。post
L1正則化和L2正則化能夠看作是損失函數的懲罰項。所謂『懲罰』是指對損失函數中的某些參數作一些限制。對於線性迴歸模型,使用L1正則化的模型建叫作Lasso迴歸,使用L2正則化的模型叫作Ridge迴歸(嶺迴歸)。下圖是Python中Lasso迴歸的損失函數,式中加號後面一項α||w||1α||w||1即爲L1正則化項。學習
下圖是Python中Ridge迴歸的損失函數,式中加號後面一項α||w||22α||w||22即爲L2正則化項。atom
通常回歸分析中迴歸ww表示特徵的係數,從上式能夠看到正則化項是對係數作了處理(限制)。L1正則化和L2正則化的說明以下:spa
通常都會在正則化項以前添加一個係數,Python中用αα表示,一些文章也用λλ表示。這個係數須要用戶指定。.net
那添加L1和L2正則化有什麼用?下面是L1正則化和L2正則化的做用,這些表述能夠在不少文章中找到。
上面提到L1正則化有助於生成一個稀疏權值矩陣,進而能夠用於特徵選擇。爲何要生成一個稀疏矩陣?
稀疏矩陣指的是不少元素爲0,只有少數元素是非零值的矩陣,即獲得的線性迴歸模型的大部分系數都是0. 一般機器學習中特徵數量不少,例如文本處理時,若是將一個詞組(term)做爲一個特徵,那麼特徵數量會達到上萬個(bigram)。在預測或分類時,那麼多特徵顯然難以選擇,可是若是代入這些特徵獲得的模型是一個稀疏模型,表示只有少數特徵對這個模型有貢獻,絕大部分特徵是沒有貢獻的,或者貢獻微小(由於它們前面的係數是0或者是很小的值,即便去掉對模型也沒有什麼影響),此時咱們就能夠只關注係數是非零值的特徵。這就是稀疏模型與特徵選擇的關係。
這部份內容將解釋爲何L1正則化能夠產生稀疏模型(L1是怎麼讓係數等於零的),以及爲何L2正則化能夠防止過擬合。
假設有以下帶L1正則化的損失函數:
圖1 L1正則化
圖中等值線是J0J0的等值線,黑色方形是LL函數的圖形。在圖中,當J0J0等值線與LL圖形首次相交的地方就是最優解。上圖中J0J0與LL在LL的一個頂點處相交,這個頂點就是最優解。注意到這個頂點的值是(w1,w2)=(0,w)(w1,w2)=(0,w)。能夠直觀想象,由於LL函數有不少『突出的角』(二維狀況下四個,多維狀況下更多),J0J0與這些角接觸的機率會遠大於與LL其它部位接觸的機率,而在這些角上,會有不少權值等於0,這就是爲何L1正則化能夠產生稀疏模型,進而能夠用於特徵選擇。
而正則化前面的係數αα,能夠控制LL圖形的大小。αα越小,LL的圖形越大(上圖中的黑色方框);αα越大,LL的圖形就越小,能夠小到黑色方框只超出原點範圍一點點,這是最優勢的值(w1,w2)=(0,w)(w1,w2)=(0,w)中的ww能夠取到很小的值。
相似,假設有以下帶L2正則化的損失函數:
圖2 L2正則化
二維平面下L2正則化的函數圖形是個圓,與方形相比,被磨去了棱角。所以J0J0與LL相交時使得w1w1或w2w2等於零的機率小了許多,這就是爲何L2正則化不具備稀疏性的緣由。
擬合過程當中一般都傾向於讓權值儘量小,最後構造一個全部參數都比較小的模型。由於通常認爲參數值小的模型比較簡單,能適應不一樣的數據集,也在必定程度上避免了過擬合現象。能夠設想一下對於一個線性迴歸方程,若參數很大,那麼只要數據偏移一點點,就會對結果形成很大的影響;但若是參數足夠小,數據偏移得多一點也不會對結果形成什麼影響,專業一點的說法是『抗擾動能力強』。
那爲何L2正則化能夠得到值很小的參數?
以線性迴歸中的梯度降低法爲例。假設要求的參數爲θθ,hθ(x)hθ(x)是咱們的假設函數,那麼線性迴歸的代價函數以下:
最開始也提到L1正則化必定程度上也能夠防止過擬合。以前作了解釋,當L1的正則化係數很小時,獲得的最優解會很小,能夠達到和L2正則化相似的效果。
一般越大的λλ可讓代價函數在參數爲0時取到最小值。下面是一個簡單的例子,這個例子來自Quora上的問答。爲了方便敘述,一些符號跟這篇帖子的符號保持一致。
假設有以下帶L1正則化項的代價函數:
圖3 L1正則化參數的選擇
分別取λ=0.5λ=0.5和λ=2λ=2,能夠看到越大的λλ越容易使F(x)F(x)在x=0x=0時取到最小值。
從公式5能夠看到,λλ越大,θjθj衰減得越快。另外一個理解能夠參考圖2,λλ越大,L2圓的半徑越小,最後求得代價函數最值時各參數也會變得很小。
過擬合的解釋:
https://hit-scir.gitbooks.io/neural-networks-and-deep-learning-zh_cn/content/chap3/c3s5ss2.html
正則化的解釋:
https://hit-scir.gitbooks.io/neural-networks-and-deep-learning-zh_cn/content/chap3/c3s5ss1.html
正則化的解釋:
http://blog.csdn.net/u012162613/article/details/44261657
正則化的數學解釋(一些圖來源於這裏):
http://blog.csdn.net/zouxy09/article/details/24971995