关于过拟合、局部最小值、以及Poor Generalization的思考
Poor Generalization
這可能是實際中遇到的最多問題。
比如FC網絡為什么效果比CNN差那么多啊,是不是陷入局部最小值啊?是不是過擬合啊?是不是欠擬合啊?
在操場跑步的時候,又從SVM角度思考了一下,我認為Poor Generalization屬于過擬合范疇。
與我的論文 [深度神經網絡在面部情感分析系統中的應用與改良] 的觀點一致。
SVM
ImageNet 2012上出現了一個經典虐殺場景。見[知乎專欄]
里面有一段這么說道:
| 當時,大多數的研究小組還都在用傳統computer vision算法的時候,多倫多大學的Hinton祭出deep net這樣一個大殺器。差距是這樣的: 第一名Deepnet的錯誤率是0.16422 |
除了Hinton組是用CNN之外,第二第三都是經典的SIFT+SVM的分離模型。
按照某些民科的觀點,SVM是宇宙無敵的模型,結構風險最小化,全局最小值,那么為什么要綁個SIFT?
眾所周知,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不會過擬合?]
轉載于:https://www.cnblogs.com/neopenx/p/5001851.html
總結
以上是生活随笔為你收集整理的关于过拟合、局部最小值、以及Poor Generalization的思考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【iOS开发】跳转到『设置App』的任意
- 下一篇: mac osx安装mysql5.7.9