吳恩達深度學習專項課程3學習筆記/week2/Error analysis
Error analysis
Carrying out error analysis
Error analysis是手動分析算法錯誤的過程。
通過一個例子來說明error analysis的過程。假設你在做貓圖像識別的算法,它的錯誤率高達10%,你希望提高它的表現。
你已經有了一些改進的想法,包括:
- 算法把狗的圖片錯誤識別為貓,需要修正;
- 算法把其他一些貓科動物(比如獅子,豹,...)錯誤識別為貓,需要修正;
- 算法對於比較模糊的圖片容易識別錯誤,需要改進;
- 算法對於加了濾鏡的圖片容易識別錯誤,需要改進。
那麽,究竟哪個想法是最有價值去花費時間實現的呢?我們可以通過一個表格進行error analysis,從而給我們一個直觀的指導。
- 首先,從dev set中手動地找出比如約100個被錯誤標記的樣本;
- 然後,用一個表格進行統計,在這些選出的錯誤樣本中,各個原因導致錯誤的比例;
- 最後,分析下一步集中解決哪個問題可以使得準確率有最大的提升。
比如假設我們的統計結果如上表所示,那麽集中解決其他貓科動物的識別或者模糊圖像的問題顯然更有價值,我們可以采取再去多收集一些其他貓科動物的圖片加入訓練集等措施。
Cleaning up incorrectly labled data
當我們發現我們使用的數據中有些被標記錯誤,是否需要手動一一更正呢?我們應該怎麽處理?
對於training set
事實上,DL算法對於訓練集中的[隨機誤差
對於dev/tests set
建議在error analysis過程中,增加統計“錯誤標記”一項造成錯誤的比例。例如,我們在表格增加了“錯誤標記”列並且得到以下統計結果。那麽我們是否需要花費精力取修改這6%的標記錯誤呢?
建議:需要看錯誤標記的問題是否影響dev/test set準確地反映算法正確性的能力。通過三個數據來判斷:1.整體dev set誤差;2.錯誤標記造成的誤差;3.其他問題造成的誤差。
舉例來說,對於左邊的情況,0.6%與9.4%相比占比較少,因此可以考慮不修改;對於右邊的情況,0.6%與1.4%相比占比已經比較大了,因此考慮修改。
另外還有一些其他的建議:
- 對於dev和test set始終進行同樣的處理過程,以確保它們來自同樣的分布。dev set進行的錯誤標記的更正,那麽test set也應該更正。
- 可以考慮對算法判斷錯誤的和判斷正確的都進行檢查,算法可能把某些本身標記錯誤的貓判讀為貓造成正確分類的假象。但是判斷錯誤比例一般較小,容易檢查,而正確檢查則較為困難。
- 訓練集和dev/test set可以來自略不相同的分布。訓練集一般很大,檢查較困難,因此只更正dev/test set而不更正training set可能是OK的。
Bulid your first system quickly, then iterate
如果你在建立一個全新應用的ML系統,你可能一開始考慮到很多可能因素的影響,迷茫於集中解決什麽,對此的建議是:首先快速建立起來第一個系統,不要考慮過多,然後再叠代改進。 不要一開始想的過於復雜,增加困難建立了過於復雜的系統。
- 設置好dev/test set和評估指標,這決定了瞄準的目標;
- 建立初步的系統(快速訓練,fit參數;dev set,調整參數;test set,評價結果)
- 進行bias/variance分析和 error analysis分析來確定下一步優先解決什麽問題,逐步優化。
如果你是在有一些先驗經驗的基礎上建立ML系統,或者已經有較為完善的學術研究基礎可以解決很多你建立系統的相同問題,比如人臉識別已經有很多研究基礎,你可以考慮在這些基礎上直接建立一個較為復雜的系統。
吳恩達深度學習專項課程3學習筆記/week2/Error analysis