機器學習-3

阿蘇爾發表於2018-04-16

本文來自於網易雲課堂

進行誤差分析

如果你希望讓學習演算法能夠達到人類的地步,但是還沒有達到,那麼人工檢查一下你的演算法犯的錯誤,會讓你瞭解接下來該做什麼。這個過程稱為誤差分析。
這裡寫圖片描述
對於一個貓狗分類的任務,你最終實現了90%的精度,這遠遠沒有達到你的目標。然後你對出錯的分類圖片進行分析,發現他們看起來是有點像貓。或許你的隊友給你提一些建議,增加一些針對狗的圖片優化演算法,讓你對狗的分類更加合理。那麼,問題來了,是不是應該開始去做一個專案專門處理狗呢?這個過程可能會花費你幾個月的時間,這樣做是不是值得?可能最後一點用都沒有。
這裡有個誤差分析流程,可以讓你很快知道這個方向是否值得努力。
誤差分析:
- 獲取大約100個作用錯誤分類的dev set 樣本
- 統一有多少是狗。

假如說在錯誤標記的開發集例子中有5%是狗,這意味著在100個例子中就算你全部修復了你也只能修正這100個錯誤中的5個。或者換句話說你在狗的分類上花費了大量時間最終只是讓你的誤差從10%下降到9.5%。這裡有個效能上限(ceiling)的概念,它可以幫你確定演算法效能呢的上限,比如說完全解決狗的問題可以對你有多少幫助。但是,如果說你發現錯誤分類的例子中有50%是狗,那麼花時間去解決狗的問題可能效果就更好。這個時候你如果真正的去解決狗的問題,那麼你的誤差可能就從10%下降到5%了。然後你覺得可以向誤差減半的方向嘗試,可以集中精力減少錯誤標記的狗圖的問題。在機器學習中,有時很鄙視手工操作,但如果要搭建應用系統,那這個簡單的人工統計步驟-誤差分析,可以節省大量時間。對於錯誤分類,你可以化5-10分鐘統計下有沒有佔比5%或者50%的東西,然後這個會給你確定一個方向,幫你節省幾個月的時間,然後你就可以投入到解決錯誤標記的狗圖中。
這裡寫圖片描述
有時做誤差分析時也可以同時並行評估幾個想法。比如你有幾個改善貓檢測器的想法,比如狗誤識別為貓,或者大型貓科動物如獅子,豹,獵豹等被誤識別,或者是想提高模糊影像的表現。Andrew Ng一般會列一張表格來統計其中的百分比,有時候還會加一些備註,來判斷是否這個方向值得你去努力。假如說模糊圖片佔比很大,分析的結果不是說你一定要處理模糊圖片,這個分析沒有一個嚴格的數學公式告訴你應該做什麼,但它能讓你對應該選擇哪些手段有個概念。這個很大程度上取決於你有多少改善模型的想法。

清楚標註錯誤的資料

在監督學習中,你的資料有X和Y組成,對於有些輸出Y,你可能會錯誤的標記,就是說你的原始資料有了錯誤的標籤Y,那麼是否值得花時間去修正這些標籤呢?注意這裡是原始資料的誤標記的例子而不是演算法訓練出來的分類錯誤的例子。
首先,對於訓練集。事實證明,深度學習演算法對於訓練集中的隨機誤差是相當魯棒的。只要你的標記出錯的例子,比如可能是輸入錯誤,距離隨機誤差很近,也就是說只要誤差足夠隨機,那麼放著這些誤差不管可能也沒問題。警告:深度學習演算法對隨機誤差很魯棒,但是對系統性的錯誤就沒那麼魯棒了。比如說如果做標記的人一直把白色的狗標記為貓,那就成問題了。因為你的分類器學習之後會把所有白色的狗都分類為貓。
對於開發集或測試集錯誤分類的例子呢。那麼在誤差分析中,你可以單獨開闢一列來統計錯誤標註的數量。
這裡寫圖片描述
那麼是否值得修復這6%的樣本呢?Andrew Ng建議如果這些標記錯誤嚴重影響了你在開發集上評估演算法的能力,那麼就應該花時間修正錯誤的標籤。反之沒必要花寶貴的時間去處理。
這裡有一些指導原則來糾正誤標註的例子。
1.不管用什麼手段都要同時作用在開發集和測試集上。
2. 強烈建議你要考慮同時檢驗演算法判斷正確和判斷錯誤的例子。
第二點不容易做,也經常不做。因為找錯誤的好處理,因為可能只有2%,但找98%的很難。儘管如此,但也是要考慮到的。
這裡寫圖片描述
最後幾個建議:
首先,深度學習研究人員有時會喜歡這樣說,“我只是把資料提供給演算法,我訓練過了,效果拔群”,這話說出了很多深度學習錯誤的真相。更多時候,我們把資料餵給演算法,然後訓練它,並減少人工干預,減少使用人類的見解。但Andrew Ng認為在構造實際系統時,通常需要更多的人工誤差分析,更多的人類見解來架構這些系統,儘管深度學習的研究人員不願意承認這點。
第二點,不知道為什麼,我-指Andrew Ng 看一些工程師和研究人員不願意親自去看這些例子,可能是因為這些例子很無聊。但是,花幾分鐘或者幾個小時是很值得的。

快速搭建你的第一個系統並進行迭代

如果你正在開發全新的機器學習應用,Andrew Ng給出這樣的建議:
你應該儘快建立你的第一個系統原型,然後快速迭代。對於一個機器學習應用,一般會有很多個方向,並且每個方向都是相對合理的,可以改善你的系統,但挑戰在於你如何選擇一個方向集中精力處理。建議是,如果你想搭建全新的機器學習程式,就是快速搭好你的第一個系統然後開始迭代。具體就是設定開發集和驗證集還有指標,這樣就決定了你的目標所在。然後馬上搭好一個機器學習系統原型,然後找到訓練集,訓練一下看看效果,開始理解你的演算法表現如何。接著,建立好一個系統以後,你就可以使用偏差方差分析以及誤差分析來確定下一步優先做什麼。
如果你將將其學習演算法應用到新的應用程式裡,你的主要目標是弄出能用的系統,而不是發明全新的機器學習演算法,這是完全不同的目標。所以鼓勵搭建快速而粗糙的實現然後慢慢改進。

相關文章