這多是實際中遇到的最多問題。html
好比FC網絡爲何效果比CNN差那麼多啊,是否是陷入局部最小值啊?是否是過擬合啊?是否是欠擬合啊?算法
在操場跑步的時候,又從SVM角度思考了一下,我認爲Poor Generalization屬於過擬合範疇。數據庫
與個人論文 [深度神經網絡在面部情感分析系統中的應用與改良] 的觀點一致。網絡
ImageNet 2012上出現了一個經典虐殺場景。見[知乎專欄]機器學習
裏面有一段這麼說道:函數
當時,大多數的研究小組還都在用傳統computer vision算法的時候,多倫多大學的Hinton祭出deep net這樣一個大殺器。差距是這樣的:學習 第一名Deepnet的錯誤率是0.16422 |
除了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的例子,我在[深度神經網絡以及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不會過擬合?]