關於過擬合、局部最小值、以及Poor Generalization的思考

Poor Generalization

這多是實際中遇到的最多問題。html

好比FC網絡爲何效果比CNN差那麼多啊,是否是陷入局部最小值啊?是否是過擬合啊?是否是欠擬合啊?算法

在操場跑步的時候,又從SVM角度思考了一下,我認爲Poor Generalization屬於過擬合範疇。數據庫

與個人論文 [深度神經網絡在面部情感分析系統中的應用與改良] 的觀點一致。網絡

SVM

ImageNet 2012上出現了一個經典虐殺場景。見[知乎專欄]機器學習

裏面有一段這麼說道:函數

當時,大多數的研究小組還都在用傳統computer vision算法的時候,多倫多大學的Hinton祭出deep net這樣一個大殺器。差距是這樣的:學習

第一名Deepnet的錯誤率是0.16422
第二名日本東京大學的錯誤率是0.2617
第三名牛津大學的錯誤率是0.2679測試

 
 
 
 
 
 
 
 

除了Hinton組是用CNN以外,第二第三都是經典的SIFT+SVM的分離模型。大數據

按照某些民科的觀點,SVM是宇宙無敵的模型,結構風險最小化,全局最小值,那麼爲何要綁個SIFT?spa

衆所周知,SIFT是CV裏最優良的Hand-Made特徵,爲何須要這樣的特徵?

由於它是一種Encoding,複雜的圖像通過它的Encoding以後,有一些很明顯的性質(好比各類不變性)就會暴露出來。

通過Encoding的數據,分類起來是很是容易的。這也是模式識別的經典模式:先特徵提取、再分類識別。

 
Question:若是用裸SVM跑ImageNet會怎麼樣?
My Answer:SVM的支持向量集會十分龐大。好比有10000個數據,那麼就會有10000個支持向量。
 
 
 

SVM不一樣於NN的一個關鍵點就是,它的支持向量是動態的,雖然它等效於NN的隱層神經元,可是它服從結構風險最小化。

結構風險最小化會根據數據,動態算出需求最少的神經元(或者說是隱變量[Latent Variable])。

若是SVM自己很難去切分Hard數據,那麼很顯然支持向量會增多,由於[Train Criterion] 會認爲這是明顯的欠擬合。

欠擬合狀況下,增長隱變量,增大VC維,是不違背結構風險最小化的。

極限最壞狀況就是,對每一個點,擬合一個值,這樣會致使最後的VC維無比龐大,但仍然知足結構風險最小化。圖示以下:

 
 
 

之因此要調大VC維,是由於數據太緊密。

若是吃不下一個數據,那麼找局部距離的時候,就會老是產生錯誤的結果。

儘管已經很大了,可是仍然須要更大,最好是每一個點各佔一個維度,這樣100%不會分錯。

這會致使另一個狀況發生:過擬合,以及維數災難:

 
維數災難:
 
在Test Phase,因爲參數空間十分龐大,測試數據只要與訓練數據有稍微變化,很容易發生誤判。
緣由是訓練數據在參數空間裏擬合得過於離散,在作最近局部距離評估時,各個維度上,偏差尺度很大。測試數據的輕微變化就能形成毀滅級誤判,學習的參數毫無魯棒性。
 
 
 
 
 
 

不過,因爲現代SVM的[Train Criterion] 通常含有L2 Regularier,因此能夠盡力壓制擬合的敏感度。

若是L2係數大點,對於大量分錯的點,會所有視爲噪聲扔掉,把過擬合壓成欠擬合。

若是L2係數小點,對於大量分錯的點,會當成寶去擬合,雖然不至於維數災難,過擬合也會很嚴重。

固然,通常L2的係數都不會壓得太狠,因此過擬合可能性應當大於欠擬合。

 

我曾經碰到一個例子,個人導師拿了科大訊飛語音引擎轉化的數據來訓練SVM。

Train Error很美,Test Error慘不忍睹,他當時和我說,SVM過擬合好嚴重,讓我換個模型試試。

後來我換了CNN和FC,效果也差很少。

從Bayesian Learning觀點來說,Model自己擁有的Prior並不能摸清訓練數據Distribution。

這時候,不管你是SVM仍是CNN,都是迴天無力的,必然形成Poor Generalization。

 

不是說,你搞個大數據就好了,你的大數據有多大,PB級?根本不夠。

單純的擬合來模擬智能,倒更像是是一個NPC問題,搜遍所有可能的樣本就行了。

悲劇的是,世界上都沒有一片樹葉是徹底相同的,美國的PB級樹葉的圖像數據庫可能根本沒法解決中國的樹葉問題。

 

也不是說,你隨便套個模型就了事了,更有甚者,連SVM、NN都不用,認爲機器學習只要LR就好了。

「LR便可解決灣區數據問題」,不得不說,不管是傳播這種思惟、仍是接受這種思惟的人,都是時代的悲哀。

 

NN

再來看一個NN的例子,我在[深度神經網絡以及Pre-Training的理解]一文的最後,用了一個神奇的表格:

[FC]

負似然函數 1.69 1.55 1.49 1.44 1.32 1.25 1.16 1.07 1.05 1.00
驗證集錯誤率 55% 53% 52% 51% 49% 48%

49%

49% 49% 49%

 

 

 

[CNN]

負似然函數 1.87 1.45 1.25 1.15 1.05 0.98 0.94 0.89 0.7 0.63
驗證集錯誤率 55% 50% 44% 43% 38% 37%

35%

34% 32% 31%

 

 

 

當初只是想說明:FC網絡的Generalization能力真是比CNN差太多。

但如今回顧一下,其實還有有趣的地方。

I、先看FC的Epoch狀況,能夠看到,後期的Train Likelihood進度緩慢,甚至基本不動。

此時並不能準確判斷,究竟是欠擬合仍是陷入到局部最小值。

但,咱們有一點能夠確定,增大FC網絡的規模,應該是可讓Train Likelihood變低的。

起碼在這點上,應該與SVM作一個同步,就算是過擬合,也要讓Train Likelihood更好看。

 

II、相同Train Likelihood下,CNN的Test Error要低不少。

若是將兩個模型當作是等效的規模(實際上CNN的規模要比FC低不少),此時FC網絡能夠直接被判爲過擬合的。

這點須要轉換參照物的座標系,將CNN看做是靜止的,將FC網絡看做是運動的,那麼FC網絡Test Error就呈倒退狀態。

與過擬合的狀況很是相似。

 

綜合(I)(II),我的認爲,從相對運動角度,Poor Generalization也能夠看做是一種過擬合。

(II)自己就很糟了,若是遇到(I)的狀況,那麼盲目擴張網絡只會變本加厲。

這是爲何SVM過擬合很是可怕的緣由,[知乎:爲何svm不會過擬合?]

相關文章
相關標籤/搜索