無論在機器學習還是深度學習建模當中都可能會遇到兩種最常見結果,一種叫過擬合(over-fitting )另外一種叫欠擬合(under-fitting)。
所謂過擬合(over-fitting)其實就是所建的機器學習模型或者是深度學習模型在訓練樣本中表現得過於優越,導致在驗證資料集以及測試資料集中表現不佳。打個比喻就是當我需要建立好乙個模型之後,比如是識別乙隻狗狗的模型,我需要對這個模型進行訓練。恰好,我訓練樣本中的所有訓練都是二哈,那麼經過多次迭代訓練之後,模型訓練好了,並且在訓練集中表現得很好。基本上二哈身上的所有特點都涵括進去,那麼問題來了!假如我的測試樣本是乙隻金毛呢?將乙隻金毛的測試樣本放進這個識別狗狗的模型中,很有可能模型最後輸出的結果就是金毛不是一條狗(因為這個模型基本上是按照二哈的特徵去打造的)。所以這樣就造成了模型過擬合,雖然在訓練集上表現得很好,但是在測試集中表現得恰好相反,在效能的角度上講就是協方差過大(variance is large),同樣在測試集上的損失函式(cost function)會表現得很大。
所謂欠擬合呢(under-fitting)?相對過擬合欠擬合還是比較容易理解。還是拿剛才的模型來說,可能二哈被提取的特徵比較少,導致訓練出來的模型不能很好地匹配,表現得很差,甚至二哈都無法識別。
那麼問題來了,我們需要怎麼去解決過擬合和欠擬合的問題呢??
過擬合:
首先我們從上面我們可以知道,造成過擬合的原因有可以歸結為:引數過多。那麼我們需要做的事情就是減少引數,這裡有兩種辦法:
1、回想下我們的模型,假如我們採用梯度下降演算法將模型中的損失函式不斷減少,那麼最終我們會在一定範圍內求出最優解,最後損失函式不斷趨近0。那麼我們可以在所定義的損失函式後面加入一項永不為0的部分,那麼最後經過不斷優化損失函式還是會存在。其實這就是所謂的「正則化」。
下面這張就是加入了正則化(regulation)之後的損失函式。這裡m是樣本數目,landa(後面我用「t」表示,實在是打不出)表示的是正則化係數。
注意:當t(landa)過大時,則會導致後面部分權重比加大,那麼最終損失函式過大,從而導致欠擬合
當t(landa)過小時,甚至為0,導致過擬合。
2、對於神經網路,引數膨脹原因可能是因為隨著網路深度的增加,同時引數也不斷增加,並且增加速度、規模都很大。那麼可以採取減少神經網路規模(深度)的方法。也可以用一種叫dropout的方法。dropout的思想是當一組引數經過某一層神經元的時候,去掉這一層上的一部分神經元,讓引數只經過一部分神經元進行計算。注意這裡的去掉並不是真正意義上的去除,只是讓引數不經過一部分神經元計算而已。
另外增大訓練樣本規模同樣也可以防止過擬合。
欠擬合:
其實個人覺得欠擬合基本上都會發生在訓練剛開始的時候,經過不斷訓練之後欠擬合應該不怎麼考慮了。。但是如果真的還是存在的話,可以通過增加網路複雜度或者在模型中增加多點特徵點,這些都是很好解決欠擬合的方法。
大白話給你講分布式架構
隨著越來越多的人參與到網際網路的浪潮來,曾經的單體應用架構越來越無法滿足需求,所以,分布式集群架構出現,也因此,分布式搭建開發成為了web開發者必掌握的技能之一。包含但不限於zookeeper dubbo 訊息佇列 activemq kafka rabbitmq nosql redis mongod...
一口白話 將測試分類方法說清楚!
一 按開發階段劃分 1.單元測試 unit testing 又稱模組測試,測試物件的最小單位是模組 如登入註冊等程式模組 檢驗軟體測試基本組成單位 2.整合測試 integration testing 整合測試也稱聯合測試 聯調 組裝測試 將程式模組採用適當的整合策略組裝起來,對系統的介面及整合後的...
20170511 請說清楚什麼是菱形繼承
20170511 請說清楚什麼是菱形繼承?1 我們都知道c 中的三大特性 封裝 繼承 多型 但是當我們談到 繼承 時,不免會想起乙個很重要的問題 菱形繼承。2 那麼菱形繼承是什麼呢?請看圖。如上圖所示,中間類a 和中間類b 共同繼承了基類base,而與此同時,派生類d 又同時繼承了a 和b。意思就是...