《機(jī)器學(xué)習(xí)訓(xùn)練秘籍》為吳恩達(dá)未發(fā)表的作品,其中文版通過微信公眾號每周更新,以下是讀書筆記
舉個例子:如何建立一個貓咪圖片初創(chuàng)公司
有許多的改進(jìn)方案,例如:
1.獲取更多的數(shù)據(jù),即收集更多貓的圖片
2.收集更加多樣化的訓(xùn)練數(shù)據(jù)集,比如處于不常見位置的貓的圖片,顏色奇異的貓的圖片,以及使用不同相機(jī)參數(shù)拍攝的貓的圖片
3.通過增加梯度下降(gradient descent)的迭代次數(shù),使算法訓(xùn)練得久一些
4.嘗試一個擁有更多層(layer)/更多隱藏元(hidden units)/更多參數(shù)(parameters)的,規(guī)模更大的神經(jīng)網(wǎng)絡(luò)
5.嘗試加入正則化(例如 L2 正則化)
6.改變神經(jīng)網(wǎng)絡(luò)的架構(gòu)(激活函數(shù),隱藏元數(shù)量等等)
一般將數(shù)據(jù)集按照 70% / 30% 的比例劃分為訓(xùn)練集(training set)和測試集(test set),并且使用這些數(shù)據(jù)構(gòu)建出了一個在訓(xùn)練集和測試集上均表現(xiàn)良好的貓咪檢測器,效果可能并不好,另外定義開發(fā)集用于調(diào)試模型
訓(xùn)練集(training set)用于運(yùn)行你的學(xué)習(xí)算法。
開發(fā)集(development set)用于調(diào)整參數(shù),選擇特征,以及對學(xué)習(xí)算法作出其它決定。有時也稱為留出交叉驗證集(hold-out cross validation set)。
測試集(test set)用于評估算法的性能,但不會據(jù)此決定使用什么學(xué)習(xí)算法或參數(shù)。
要在特定的機(jī)器學(xué)習(xí)應(yīng)用上取得進(jìn)展,而不是搞研究,嘗試選擇服從相同分布的開發(fā)集和測試集數(shù)據(jù),這會讓團(tuán)隊更有效率
訓(xùn)練集和開發(fā)集大小并非越大越好
單值評估指標(biāo)進(jìn)行優(yōu)化,比如準(zhǔn)確率
貓分類器的查準(zhǔn)率指的是在訓(xùn)練集(或者測試集)被預(yù)測為貓的圖片中,實際類別是貓的樣本比例。而查全率指的是在訓(xùn)練集(或者測試集)所有實際類別為貓的圖片中,被正確預(yù)測為貓的樣本比例。人們常常在查準(zhǔn)率和查全率之間權(quán)衡取舍。
?優(yōu)化指標(biāo)和滿意度指標(biāo)
首先定義一個“可接受的”運(yùn)行時間,一般低于 100ms 。接著在限定的運(yùn)行時間范圍內(nèi)最大化分類器的準(zhǔn)確率。此處的運(yùn)行時間是一個“滿意度指標(biāo)” —— 你的分類器必須在這個指標(biāo)上表現(xiàn)得“足夠好”,這兒指的是它應(yīng)該至多需要 100ms,而準(zhǔn)確度是一個“優(yōu)化指標(biāo)”。
通過開發(fā)集和度量指標(biāo)加速迭代
如何修改開發(fā)集,首先需要研究為什么分類效果不佳
1.你需要處理的實際數(shù)據(jù)的分布和開發(fā)集/測試集數(shù)據(jù)的分布情況不同
2.你在開發(fā)集上過擬合了。
當(dāng)你完成開發(fā)后,應(yīng)該在測試集上評估你的系統(tǒng)。如果你發(fā)現(xiàn)算法在開發(fā)集上的性能比測試集好得多,則表明你很有可能在開發(fā)集上過擬合了。
3.該指標(biāo)所度量的不是項目應(yīng)當(dāng)優(yōu)化的目標(biāo)。
>總結(jié)如何通過改進(jìn)數(shù)據(jù)集對模型進(jìn)行優(yōu)化
選擇作為開發(fā)集和測試集的數(shù)據(jù),應(yīng)當(dāng)與你預(yù)期在將來獲取并良好處理的數(shù)據(jù)有著相同的分布,但不需要和訓(xùn)練集數(shù)據(jù)的分布一致。
開發(fā)集和測試集的分布應(yīng)當(dāng)盡可能一致。
為你的團(tuán)隊選擇一個單值評估指標(biāo)進(jìn)行優(yōu)化。需要考慮多項目標(biāo)時,不妨將它們整合到一個表達(dá)式里(比如對多個誤差指標(biāo)取平均),或者定義滿意度指標(biāo)和優(yōu)化指標(biāo)。
機(jī)器學(xué)習(xí)是一個高速迭代的過程:在最終令人滿意的方案出現(xiàn)前,你可能要嘗試很多想法。
擁有開發(fā)集、測試集和單值評估指標(biāo)可以幫你快速評估一個算法,從而加速迭代過程。
當(dāng)你探索一個全新的應(yīng)用時,盡可能在一周內(nèi)建立你的開發(fā)集、測試集和指標(biāo),而在成熟的應(yīng)用上則可以花費(fèi)更長的時間。
傳統(tǒng)的 70% / 30% 訓(xùn)練集/測試集劃分對大規(guī)模數(shù)據(jù)并不適用,實際上開發(fā)集和測試集的比例會遠(yuǎn)低于 30%。
開發(fā)集的規(guī)模應(yīng)當(dāng)大到能夠檢測出算法精度的細(xì)微改變,但也不用太大;測試集的規(guī)模應(yīng)該大到能夠使你對系統(tǒng)的最終性能作出一個充分的估計。
當(dāng)開發(fā)集和評估指標(biāo)不再能給團(tuán)隊一個正確的導(dǎo)向時,就盡快修改它們:(i) 如果你在開發(fā)集上過擬合,則獲取更多的開發(fā)集數(shù)據(jù)。(ii) 如果開發(fā)集和測試集的數(shù)據(jù)分布和實際關(guān)注的數(shù)據(jù)分布不同,則獲取新的開發(fā)集和測試集。(iii) 如果評估指標(biāo)不能夠?qū)ψ钪匾娜蝿?wù)目標(biāo)進(jìn)行度量,則需要修改評估指標(biāo)。
誤差分析(Error Analysis) 指的是檢查算法誤分類的開發(fā)集樣本的過程,以便你找到造成這些誤差的原因
清洗誤標(biāo)注的開發(fā)集和測試集樣本
?將大型開發(fā)集拆分為兩個子集,專注其一
1.Eyeball開發(fā)集:隨機(jī)選擇10%的開發(fā)集進(jìn)行人為檢查(選擇的標(biāo)準(zhǔn)是錯誤樣本能夠反映錯誤來源)
2.Blackbox 開發(fā)集:用剩余90%的開發(fā)集測量錯誤率來自動評估分類器,也可以使用它來選擇算法或調(diào)整超參數(shù)
意義:當(dāng)你在 Eyeball 開發(fā)集中建立對樣本的直觀認(rèn)識之后,則容易更快地過擬合。當(dāng)Eyeball 開發(fā)集的性能比 Blackbox 開發(fā)集提升得更快,說明已經(jīng)過擬合 Eyeball 開發(fā)集了。此時可能需要丟棄它并尋找一個新的 Eyeball 開發(fā)集
>總結(jié)如何進(jìn)行基礎(chǔ)誤差分析
通過手動檢查約100個算法錯誤分類的開發(fā)集樣本來執(zhí)行誤差分析
考慮將開發(fā)集分為人為檢查的Eyeball開發(fā)集和非人為檢查的Blackbox 開發(fā)集
偏差和方差:誤差的兩大來源
此處定義偏差(bias)為訓(xùn)練集上的錯誤率
方差(variance)為算法在開發(fā)集(或測試集)上的表現(xiàn)比訓(xùn)練集差多少
總誤差=偏差+方差
如果具有較高的可避免偏差,那么加大模型的規(guī)模(例如通過添加層/神經(jīng)元數(shù)量來增加神經(jīng)網(wǎng)絡(luò)的大?。?。
如果具有較高的方差,那么向訓(xùn)練集增加數(shù)據(jù)。
診斷偏差與方差:學(xué)習(xí)曲線
學(xué)習(xí)曲線可以將開發(fā)集的誤差與訓(xùn)練集樣本的數(shù)量進(jìn)行關(guān)聯(lián)比較