為什麼稀疏係數的2範數越小越接近人臉

2022-02-05 15:09:26 字數 5329 閱讀 7737

1樓:匿名使用者

應該是具有防止過擬合作用吧。

參考下文:

二、l2範數

除了l1範數,還有一種更受寵幸的規則化範數是l2範數: ||w||2。它也不遜於l1範數,它有兩個美稱,在迴歸裡面,有人把有它的迴歸叫「嶺迴歸」(ridge regression),有人也叫它「權值衰減weight decay」。

這用的很多吧,因為它的強大功效是改善機器學習裡面一個非常重要的問題:過擬合。至於過擬合是什麼,上面也解釋了,就是模型訓練時候的誤差很小,但在測試的時候誤差很大,也就是我們的模型複雜到可以擬合到我們的所有訓練樣本了,但在實際**新的樣本的時候,糟糕的一塌糊塗。

通俗的講就是應試能力很強,實際應用能力很差。擅長背誦知識,卻不懂得靈活利用知識。例如下圖所示(來自ng的course):

上面的圖是線性迴歸,下面的圖是logistic迴歸,也可以說是分類的情況。從左到右分別是欠擬合(underfitting,也稱high-bias)、合適的擬合和過擬合(overfitting,也稱high variance)三種情況。可以看到,如果模型複雜(可以擬合任意的複雜函式),它可以讓我們的模型擬合所有的資料點,也就是基本上沒有誤差。

對於迴歸來說,就是我們的函式曲線通過了所有的資料點,如上圖右。對分類來說,就是我們的函式曲線要把所有的資料點都分類正確,如下圖右。這兩種情況很明顯過擬合了。

ok,那現在到我們非常關鍵的問題了,為什麼l2範數可以防止過擬合?回答這個問題之前,我們得先看看l2範數是個什麼東西。

l2範數是指向量各元素的平方和然後求平方根。我們讓l2範數的規則項||w||2最小,可以使得w的每個元素都很小,都接近於0,但與l1範數不同,它不會讓它等於0,而是接近於0,這裡是有很大的區別的哦。而越小的引數說明模型越簡單,越簡單的模型則越不容易產生過擬合現象。

為什麼越小的引數說明模型越簡單?我也不懂,我的理解是:限制了引數很小,實際上就限制了多項式某些分量的影響很小(看上面線性迴歸的模型的那個擬合的圖),這樣就相當於減少引數個數。

其實我也不太懂,希望大家可以指點下。

這裡也一句話總結下:通過l2範數,我們可以實現了對模型空間的限制,從而在一定程度上避免了過擬合。

l2範數的好處是什麼呢?這裡也扯上兩點:

1)學習理論的角度:

從學習理論的角度來說,l2範數可以防止過擬合,提升模型的泛化能力。

2)優化計算的角度:

從優化或者數值計算的角度來說,l2範數有助於處理 condition number不好的情況下矩陣求逆很困難的問題。哎,等等,這condition number是啥?我先google一下哈。

這裡我們也故作高雅的來聊聊優化問題。優化有兩大難題,一是:區域性最小值,二是:

ill-condition病態問題。前者俺就不說了,大家都懂吧,我們要找的是全域性最小值,如果區域性最小值太多,那我們的優化演算法就很容易陷入區域性最小而不能自拔,這很明顯不是觀眾願意看到的劇情。那下面我們來聊聊ill-condition。

ill-condition對應的是well-condition。那他們分別代表什麼?假設我們有個方程組ax=b,我們需要求解x。

如果a或者b稍微的改變,會使得x的解發生很大的改變,那麼這個方程組系統就是ill-condition的,反之就是well-condition的。我們具體舉個例子吧:

咱們先看左邊的那個。第一行假設是我們的ax=b,第二行我們稍微改變下b,得到的x和沒改變前的差別很大,看到吧。第三行我們稍微改變下係數矩陣a,可以看到結果的變化也很大。

換句話來說,這個系統的解對係數矩陣a或者b太敏感了。又因為一般我們的係數矩陣a和b是從實驗資料裡面估計得到的,所以它是存在誤差的,如果我們的系統對這個誤差是可以容忍的就還好,但系統對這個誤差太敏感了,以至於我們的解的誤差更大,那這個解就太不靠譜了。所以這個方程組系統就是ill-conditioned病態的,不正常的,不穩定的,有問題的,哈哈。

這清楚了吧。右邊那個就叫well-condition的系統了。

還是再囉嗦一下吧,對於一個ill-condition的系統,我的輸入稍微改變下,輸出就發生很大的改變,這不好啊,這表明我們的系統不能實用啊。你想想看,例如對於一個迴歸問題y=f(x),我們是用訓練樣本x去訓練模型f,使得y儘量輸出我們期待的值,例如0。那假如我們遇到一個樣本x』,這個樣本和訓練樣本x差別很小,面對他,系統本應該輸出和上面的y差不多的值的,例如0.

00001,最後卻給我輸出了一個0.9999,這很明顯不對呀。就好像,你很熟悉的一個人臉上長了個青春痘,你就不認識他了,那你大腦就太差勁了,哈哈。

所以如果一個系統是ill-conditioned病態的,我們就會對它的結果產生懷疑。那到底要相信它多少呢?我們得找個標準來衡量吧,因為有些系統的病沒那麼重,它的結果還是可以相信的,不能一刀切吧。

終於回來了,上面的condition number就是拿來衡量ill-condition系統的可信度的。condition number衡量的是輸入發生微小變化的時候,輸出會發生多大的變化。也就是系統對微小變化的敏感度。

condition number值小的就是well-conditioned的,大的就是ill-conditioned的。

如果方陣a是非奇異的,那麼a的conditionnumber定義為:

也就是矩陣a的norm乘以它的逆的norm。所以具體的值是多少,就要看你選擇的norm是什麼了。如果方陣a是奇異的,那麼a的condition number就是正無窮大了。

實際上,每一個可逆方陣都存在一個condition number。但如果要計算它,我們需要先知道這個方陣的norm(範數)和machine epsilon(機器的精度)。為什麼要範數?

範數就相當於衡量一個矩陣的大小,我們知道矩陣是沒有大小的,當上面不是要衡量一個矩陣a或者向量b變化的時候,我們的解x變化的大小嗎?所以肯定得要有一個東西來度量矩陣和向量的大小吧?對了,他就是範數,表示矩陣大小或者向量長度。

ok,經過比較簡單的證明,對於ax=b,我們可以得到以下的結論:

也就是我們的解x的相對變化和a或者b的相對變化是有像上面那樣的關係的,其中k(a)的值就相當於倍率,看到了嗎?相當於x變化的界。

對condition number來個一句話總結:conditionnumber是一個矩陣(或者它所描述的線性系統)的穩定性或者敏感度的度量,如果一個矩陣的condition number在1附近,那麼它就是well-conditioned的,如果遠大於1,那麼它就是ill-conditioned的,如果一個系統是ill-conditioned的,它的輸出結果就不要太相信了。

好了,對這麼一個東西,已經說了好多了。對了,我們為什麼聊到這個的了?回到第一句話:

從優化或者數值計算的角度來說,l2範數有助於處理 condition number不好的情況下矩陣求逆很困難的問題。因為目標函式如果是二次的,對於線性迴歸來說,那實際上是有解析解的,求導並令導數等於零即可得到最優解為:

然而,如果當我們的樣本x的數目比每個樣本的維度還要小的時候,矩陣xtx將會不是滿秩的,也就是xtx會變得不可逆,所以w*就沒辦法直接計算出來了。或者更確切地說,將會有無窮多個解(因為我們方程組的個數小於未知數的個數)。也就是說,我們的資料不足以確定一個解,如果我們從所有可行解裡隨機選一個的話,很可能並不是真正好的解,總而言之,我們過擬合了。

但如果加上l2規則項,就變成了下面這種情況,就可以直接求逆了:

這裡面,專業點的描述是:要得到這個解,我們通常並不直接求矩陣的逆,而是通過解線性方程組的方式(例如高斯消元法)來計算。考慮沒有規則項的時候,也就是λ=0的情況,如果矩陣xtx的 condition number 很大的話,解線性方程組就會在數值上相當不穩定,而這個規則項的引入則可以改善condition number。

另外,如果使用迭代優化的演算法,condition number 太大仍然會導致問題:它會拖慢迭代的收斂速度,而規則項從優化的角度來看,實際上是將目標函式變成λ-strongly convex(λ強凸)的了。哎喲喲,這裡又出現個λ強凸,啥叫λ強凸呢?

當f滿足:

時,我們稱f為λ-stronglyconvex函式,其中引數λ>0。當λ=0時退回到普通convex 函式的定義。

在直觀的說明強凸之前,我們先看看普通的凸是怎樣的。假設我們讓f在x的地方做一階泰勒近似(一階泰勒忘了嗎?f(x)=f(a)+f『(a)(x-a)+o(||x-a||).):

直觀來講,convex 性質是指函式曲線位於該點處的切線,也就是線性近似之上,而 strongly convex 則進一步要求位於該處的一個二次函式上方,也就是說要求函式不要太「平坦」而是可以保證有一定的「向上彎曲」的趨勢。專業點說,就是convex 可以保證函式在任意一點都處於它的一階泰勒函式之上,而strongly convex可以保證函式在任意一點都存在一個非常漂亮的二次下界quadratic lower bound。當然這是一個很強的假設,但是同時也是非常重要的假設。

可能還不好理解,那我們畫個圖來形象的理解下。

大家一看到上面這個圖就全明白了吧。不用我囉嗦了吧。還是囉嗦一下吧。

我們取我們的最優解w*的地方。如果我們的函式f(w),見左圖,也就是紅色那個函式,都會位於藍色虛線的那根二次函式之上,這樣就算wt和w*離的比較近的時候,f(wt)和f(w*)的值差別還是挺大的,也就是會保證在我們的最優解w*附近的時候,還存在較大的梯度值,這樣我們才可以在比較少的迭代次數內達到w*。但對於右圖,紅色的函式f(w)只約束在一個線性的藍色虛線之上,假設是如右圖的很不幸的情況(非常平坦),那在wt還離我們的最優點w*很遠的時候,我們的近似梯度(f(wt)-f(w*))/(wt-w*)就已經非常小了,在wt處的近似梯度?

f/?w就更小了,這樣通過梯度下降wt+1=wt-α*(?f/?

w),我們得到的結果就是w的變化非常緩慢,像蝸牛一樣,非常緩慢的向我們的最優點w*爬動,那在有限的迭代時間內,它離我們的最優點還是很遠。

所以僅僅靠convex 性質並不能保證在梯度下降和有限的迭代次數的情況下得到的點w會是一個比較好的全域性最小點w*的近似點(插個話,有地方說,實際上讓迭代在接近最優的地方停止,也是一種規則化或者提高泛化效能的方法)。正如上面分析的那樣,如果f(w)在全域性最小點w*周圍是非常平坦的情況的話,我們有可能會找到一個很遠的點。但如果我們有「強凸」的話,就能對情況做一些控制,我們就可以得到一個更好的近似解。

至於有多好嘛,這裡面有一個bound,這個 bound 的好壞也要取決於strongly convex性質中的常數α的大小。看到這裡,不知道大家學聰明瞭沒有。如果要獲得strongly convex怎麼做?

最簡單的就是往裡面加入一項(α/2)*||w||2。

呃,講個strongly convex花了那麼多的篇幅。實際上,在梯度下降中,目標函式收斂速率的上界實際上是和矩陣xtx的 condition number有關,xtx的 condition number 越小,上界就越小,也就是收斂速度會越快。

這一個優化說了那麼多的東西。還是來個一句話總結吧:l2範數不但可以防止過擬合,還可以讓我們的優化求解變得穩定和快速。

好了,這裡兌現上面的承諾,來直觀的聊聊l1和l2的差別,為什麼一個讓絕對值最小,一個讓平方最小,會有那麼大的差別呢?我看到的有兩種幾何上直觀的解析:

為什麼面積越小的省越發達,為什麼面積越小的省越發達?

就個人而言,地盤越小的地方資源越有限,資源越少的地方生活賺錢就更辛苦 除非生活所逼,沒有人願意住蝸居,這個道理很明瞭 所以居住的人就越少,之所謂是人為財死!地球上的綠色越來越少,是因為什麼?這個當然主要是人類的生產活動造成的。比如,人類的濫砍濫伐,開荒修路,城市建設及各種人造工程等等,都會造成地球大...

2階常係數齊次線性微分方程的通解。為什麼用特徵方程來求,這方法是怎麼來的

特徵方程只是源於e ax ae ax 這個特殊性質。如果你覺得這太 巧合 了,我有一個看似更令人信服的解法,即分解降解 二階常係數非齊次線性微分方程特解怎麼設?較常用的幾個 1 ay by cy e mx 特解 y c x e mx 2 ay by cy a sinx bcosx 特解 y msin...

電壓控制電流源的控制係數g2S,S是什麼意思

s是跨導的單位西門子 1a 1v 1西門子,2s可以理解為 1v電壓變化可以得到2a變化的電流。g為跨導,定義為 電流 電壓。g為跨導,定義為 電流 電壓。s是跨導的單位西門子 1a 1v 1西門子 2s可以理解為 1v電壓變化可以得到2a變化的電流。在電路中,g 0.1s是什麼意思?受控電流源的形...