從一個例子開始講吧。
假設正在除錯貓分類器,然後取得了90%準確率,相當於10%錯誤,,開發集上做到這樣,這離希望的目標還有很遠。也許的隊員看了一下演算法分類出錯的例子,注意到演算法將一些狗分類為貓,看看這兩隻狗,它們看起來是有點像貓,至少乍一看是。所以也許的隊友給一個建議,如何針對狗的圖片最佳化演算法。試想一下,可以針對狗,收集更多的狗圖,或者設計一些只處理狗的演算法功能之類的,為了讓的貓分類器在狗圖上做的更好,讓演算法不再將狗分類成貓。所以問題在於,是不是應該去開始做一個專案專門處理狗?這專案可能需要花費幾個月的時間才能讓演算法在狗圖片上犯更少的錯誤,這樣做值得嗎?或者與其花幾個月做這個專案,有可能最後發現這樣一點用都沒有。這裡有個錯誤分析流程,可以讓很快知道這個方向是否值得努力。
這是建議,首先,收集一下,比如說100個錯誤標記的開發集樣本,然後手動檢查,一次只看一個,看看的開發集裡有多少錯誤標記的樣本是狗。現在,假設事實上,100個錯誤標記樣本中只有5%是狗,就是說在100個錯誤標記的開發集樣本中,有5個是狗。這意味著100個樣本,在典型的100個出錯樣本中,即使完全解決了狗的問題,也只能修正這100個錯誤中的5個。或者換句話說,如果只有5%的錯誤是狗圖片,那麼如果在狗的問題上花了很多時間,那麼最多隻能希望的錯誤率從10%下降到9.5%,對吧?錯誤率相對下降了5%(總體下降了0.5%,100的錯誤樣本,錯誤率為10%,則樣本為1000),那就是10%下降到9.5%。就可以確定這樣花時間不好,或者也許應該花時間,但至少這個分析給出了一個上限。如果繼續處理狗的問題,能夠改善演算法效能的上限,對吧?在機器學習中,有時稱之為效能上限,就意味著,最好能到哪裡,完全解決狗的問題可以對有多少幫助。
但現在,假設發生了另一件事,假設觀察一下這100個錯誤標記的開發集樣本,發現實際有50張圖都是狗,所以有50%都是狗的照片,現在花時間去解決狗的問題可能效果就很好。這種情況下,如果真的解決了狗的問題,那麼的錯誤率可能就從10%下降到5%了。然後可能覺得讓錯誤率減半的方向值得一試,可以集中精力減少錯誤標記的狗圖的問題。
知道在機器學習中,有時候很鄙視手工操作,或者使用了太多人為數值。但如果要搭建應用系統,那這個簡單的人工統計步驟,錯誤分析,可以節省大量時間,可以迅速決定什麼是最重要的,或者最有希望的方向。實際上,如果觀察100個錯誤標記的開發集樣本,也許只需要5到10分鐘的時間,親自看看這100個樣本,並親自統計一下有多少是狗。根據結果,看看有沒有佔到5%、50%或者其他東西。這個在5到10分鐘之內就能給估計這個方向有多少價值,並且可以幫助做出更好的決定,是不是把未來幾個月的時間投入到解決錯誤標記的狗圖這個問題。
在本幻燈片中,要描述一下如何使用錯誤分析來評估某個想法,這個樣本里狗的問題是否值得解決。有時在做錯誤分析時,也可以同時並行評估幾個想法,比如,有幾個改善貓檢測器的想法,也許可以改善針對狗圖的效能,或者有時候要注意,那些貓科動物,如獅子,豹,獵豹等等,它們經常被分類成小貓或者家貓,所以也許可以想辦法解決這個錯誤。或者也許發現有些影像是模糊的,如果能設計出一些系統,能夠更好地處理模糊影像。也許有些想法,知道大概怎麼處理這些問題,要進行錯誤分析來評估這三個想法。
會做的是建立這樣一個表格,通常用電子表格來做,但普通文字檔案也可以。在最左邊,人工過一遍想分析的影像集,所以影像可能是從1到100,如果觀察100張圖的話。電子表格的一列就對應要評估的想法,所以狗的問題,貓科動物的問題,模糊影像的問題,通常也在電子表格中留下空位來寫評論。所以記住,在錯誤分析過程中,就看看演算法識別錯誤的開發集樣本,如果發現第一張識別錯誤的圖片是狗圖,那麼就在那裡打個勾,為了幫自己記住這些圖片,有時會在評論裡註釋,也許這是一張位元犬的圖。如果第二張照片很模糊,也記一下。如果第三張是在下雨天動物園裡的獅子,被識別成貓了,這是大型貓科動物,還有圖片模糊,在評論部分寫動物園下雨天,是雨天讓影像模糊的之類的。最後,這組影像過了一遍之後,可以統計這些演算法(錯誤)的百分比,或者這裡每個錯誤型別的百分比,有多少是狗,大貓或模糊這些錯誤型別。所以也許檢查的影像中8%是狗,可能43%屬於大貓,61%屬於模糊。這意味著掃過每一列,並統計那一列有多少百分比影像打了勾。
在這個步驟做到一半時,有時可能會發現其他錯誤型別,比如說可能發現有Instagram濾鏡,那些花哨的影像濾鏡,干擾了的分類器。在這種情況下,實際上可以在錯誤分析途中,增加這樣一列,比如多色濾鏡
Instagram濾鏡和Snapchat濾鏡,然後再過一遍,也統計一下那些問題,並確定這個新的錯誤型別佔了多少百分比,這個分析步驟的結果可以給出一個估計,是否值得去處理每個不同的錯誤型別。
例如,在這個樣本中,有很多錯誤來自模糊圖片,也有很多錯誤型別是大貓圖片。所以這個分析的結果不是說一定要處理模糊圖片,這個分析沒有給一個嚴格的數學公式,告訴應該做什麼,但它能讓對應該選擇那些手段有個概念。它也告訴,比如說不管對狗圖片或者Instagram圖片處理得有多好,在這些例子中,最多隻能取得8%或者12%的效能提升。而在大貓圖片這一型別,可以做得更好。或者模糊影像,這些型別有改進的潛力。這些型別裡,效能提高的上限空間要大得多。所以取決於有多少改善效能的想法,比如改善大貓圖片或者模糊圖片的表現。也許可以選擇其中兩個,或者的團隊成員足夠多,也許把團隊可以分成兩個團隊,其中一個想辦法改善大貓的識別,另一個團隊想辦法改善模糊圖片的識別。但這個快速統計的步驟,可以經常做,最多需要幾小時,就可以真正幫選出高優先順序任務,並瞭解每種手段對效能有多大提升空間。
所以總結一下,進行錯誤分析,應該找一組錯誤樣本,可能在的開發集裡或者測試集裡,觀察錯誤標記的樣本,看看假陽性(false positives)和假陰性(false negatives),統計屬於不同錯誤型別的錯誤數量。在這個過程中,可能會得到啟發,歸納出新的錯誤型別,就像看到的那樣。如果過了一遍錯誤樣本,然後說,天,有這麼多Instagram濾鏡或Snapchat濾鏡,這些濾鏡干擾了的分類器,就可以在途中新建一個錯誤型別。總之,透過統計不同錯誤標記型別佔總數的百分比,可以幫發現哪些問題需要優先解決,或者給構思新最佳化方向的靈感。