點(diǎn)擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)

本文轉(zhuǎn)自:深度學(xué)習(xí)算法與計(jì)算機(jī)視覺

正如巴菲特所言:「近似的正確好過精確的錯(cuò)誤。」
在機(jī)器學(xué)習(xí)中,過擬合(overfitting)會使模型的預(yù)測性能變差,通常發(fā)生在模型過于復(fù)雜的情況下,如參數(shù)過多等。本文對過擬合及其解決方法進(jìn)行了歸納闡述。
在機(jī)器學(xué)習(xí)中,如果模型過于專注于特定的訓(xùn)練數(shù)據(jù)而錯(cuò)過了要點(diǎn),那么該模型就被認(rèn)為是過擬合。該模型提供的答案和正確答案相距甚遠(yuǎn),即準(zhǔn)確率降低。這類模型將無關(guān)數(shù)據(jù)中的噪聲視為信號,對準(zhǔn)確率造成負(fù)面影響。即使模型經(jīng)過很好地訓(xùn)練使損失很小,也無濟(jì)于事,它在新數(shù)據(jù)上的性能仍然很差。欠擬合是指模型未捕獲數(shù)據(jù)的邏輯。因此,欠擬合模型具備較低的準(zhǔn)確率和較高的損失。
構(gòu)建模型時(shí),數(shù)據(jù)會被分為 3 類:訓(xùn)練集、驗(yàn)證集和測試集。訓(xùn)練數(shù)據(jù)用來訓(xùn)練模型;驗(yàn)證集用于在每一步測試構(gòu)建的模型;測試集用于最后評估模型。通常數(shù)據(jù)以 80:10:10 或 70:20:10 的比率分配。在構(gòu)建模型的過程中,在每個(gè) epoch 中使用驗(yàn)證數(shù)據(jù)測試當(dāng)前已構(gòu)建的模型,得到模型的損失和準(zhǔn)確率,以及每個(gè) epoch 的驗(yàn)證損失和驗(yàn)證準(zhǔn)確率。模型構(gòu)建完成后,使用測試數(shù)據(jù)對模型進(jìn)行測試并得到準(zhǔn)確率。如果準(zhǔn)確率和驗(yàn)證準(zhǔn)確率存在較大的差異,則說明該模型是過擬合的。如果驗(yàn)證集和測試集的損失都很高,那么就說明該模型是欠擬合的。
交叉驗(yàn)證是防止過擬合的好方法。在交叉驗(yàn)證中,我們生成多個(gè)訓(xùn)練測試劃分(splits)并調(diào)整模型。K-折驗(yàn)證是一種標(biāo)準(zhǔn)的交叉驗(yàn)證方法,即將數(shù)據(jù)分成 k 個(gè)子集,用其中一個(gè)子集進(jìn)行驗(yàn)證,其他子集用于訓(xùn)練算法。交叉驗(yàn)證允許調(diào)整超參數(shù),性能是所有值的平均值。該方法計(jì)算成本較高,但不會浪費(fèi)太多數(shù)據(jù)。交叉驗(yàn)證過程參見下圖:
用更多數(shù)據(jù)進(jìn)行訓(xùn)練
用更多相關(guān)數(shù)據(jù)訓(xùn)練模型有助于更好地識別信號,避免將噪聲作為信號。數(shù)據(jù)增強(qiáng)是增加訓(xùn)練數(shù)據(jù)的一種方式,可以通過翻轉(zhuǎn)(flipping)、平移(translation)、旋轉(zhuǎn)(rotation)、縮放(scaling)、更改亮度(changing brightness)等方法來實(shí)現(xiàn)。
移除特征能夠降低模型的復(fù)雜性,并且在一定程度上避免噪聲,使模型更高效。為了降低復(fù)雜度,我們可以移除層或減少神經(jīng)元數(shù)量,使網(wǎng)絡(luò)變小。對模型進(jìn)行迭代訓(xùn)練時(shí),我們可以度量每次迭代的性能。當(dāng)驗(yàn)證損失開始增加時(shí),我們應(yīng)該停止訓(xùn)練模型,這樣就能阻止過擬合。下圖展示了停止訓(xùn)練模型的時(shí)機(jī):
正則化可用于降低模型的復(fù)雜性。這是通過懲罰損失函數(shù)完成的,可通過 L1 和 L2 兩種方式完成,數(shù)學(xué)方程式如下:
L1 懲罰的目的是優(yōu)化權(quán)重絕對值的總和。它生成一個(gè)簡單且可解釋的模型,且對于異常值是魯棒的。
L2 懲罰權(quán)重值的平方和。該模型能夠?qū)W習(xí)復(fù)雜的數(shù)據(jù)模式,但對于異常值不具備魯棒性。這兩種正則化方法都有助于解決過擬合問題,讀者可以根據(jù)需要選擇使用。
Dropout 是一種正則化方法,用于隨機(jī)禁用神經(jīng)網(wǎng)絡(luò)單元。它可以在任何隱藏層或輸入層上實(shí)現(xiàn),但不能在輸出層上實(shí)現(xiàn)。該方法可以免除對其他神經(jīng)元的依賴,進(jìn)而使網(wǎng)絡(luò)學(xué)習(xí)獨(dú)立的相關(guān)性。該方法能夠降低網(wǎng)絡(luò)的密度,如下圖所示:
過擬合是一個(gè)需要解決的問題,因?yàn)樗鼤屛覀儫o法有效地使用現(xiàn)有數(shù)據(jù)。有時(shí)我們也可以在構(gòu)建模型之前,預(yù)估到會出現(xiàn)過擬合的情況。通過查看數(shù)據(jù)、收集數(shù)據(jù)的方式、采樣方式,錯(cuò)誤的假設(shè),錯(cuò)誤表征能夠發(fā)現(xiàn)過擬合的預(yù)兆。為避免這種情況,請?jiān)诮V跋葯z查數(shù)據(jù)。但有時(shí)在預(yù)處理過程中無法檢測到過擬合,而是在構(gòu)建模型后才能檢測出來。我們可以使用上述方法解決過擬合問題。原文鏈接:https://mahithas.medium.com/overfitting-identify-and-resolve-df3e3fdd2860
下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講在「小白學(xué)視覺」公眾號后臺回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計(jì)數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講在「小白學(xué)視覺」公眾號后臺回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計(jì)算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~