假設正在除錯貓分類器
然後在開發集取得了90%準確率,相當於10%錯誤
這離希望的目標還有很遠
也許需要看了一下演算法分類出錯的例子
注意到演算法將一些狗分類為貓
試想一下,可以針對狗,收集更多的狗圖
或者設計一些只處理狗的演算法功能之類的
為了讓的貓分類器在狗圖上做的更好,讓演算法不再將狗分類成貓
建議做的是,先收集一下,比如說100個錯誤標記的開發集樣本
然後手動檢查,一次只看乙個,看看開發集裡有多少錯誤標記的樣本是狗
假設事實上,100個錯誤標記樣本中只有5%是狗
就是說在100個錯誤標記的開發集樣本中,有5個是狗
意味著100個樣本,在典型的100個出錯樣本中
即使完全解決了狗的問題,也只能修正這100個錯誤中的5個
在機器學習中,有時稱之為效能上限
就意味著,最好能到**,完全解決狗的問題可以有多少幫助
但現在,假設發生了另一件事,假設觀察一下這100個錯誤標記的開發集樣本
你發現實際有50張圖都是狗,所以有50%都是狗的**
現在花時間去解決狗的問題可能效果就很好
這種情況下,如果真的解決了狗的問題
那麼錯誤率可能就從10%下降到5%了
在機器學習中,有時候很鄙視手工操作,或者使用了太多人為數值
但如果要搭建應用系統,那這個簡單的人工統計步驟,錯誤分析
可以節省大量時間,迅速決定什麼是最重要的
有時在做錯誤分析時,也可以同時並行評估幾個想法
比如,有幾個改善貓檢測器的想法,也許可以改善針對狗的效能,或者有時候要注意,那些貓科動物,如獅子,豹,獵豹等
所以,也許可以想辦法解決這個錯誤
或者也許發現有些影象是模糊的
如果能設計出一些系統,能夠更好地處理模糊影象,也能快速地降低錯誤率
其實,可以建立乙個**
在最左邊,人工過一遍想分析的影象集,影象可能是從1到100
**的一列就對應要評估的想法,比如狗的問題,貓科動物的問題,模糊影象的問題
在做到一半時,有時可能會發現其他錯誤型別
比如可能發現有instagram濾鏡,花哨的影象濾鏡,干擾了分類器
在這種情況下,實際上可以在錯誤分析途中,增加這樣一列
比如多色濾鏡 instagram濾鏡和snapchat濾鏡
然後再過一遍,也統計一下那些問題
並確定這個新的錯誤型別佔了多少百分比
例如,在樣本中,有很多錯誤來自模糊,也有很多錯誤型別是大貓
所以,這個分析的結果不是說一定要處理模糊
這個分析沒有給乙個嚴格的數學公式,告訴應該做什麼
但它能讓你對應該選擇那些手段有個概念
比如說不管對狗或者instagram處理得有多好
在這些例子中,最多只能取得8%或者12%的效能提公升
所以總結一下,進行錯誤分析,應該找一組錯誤樣本
可能在開發集裡或者測試集裡,觀察錯誤標記的樣本
看看假陽性(false positives)和假陰性(false negatives)
統計不同錯誤標記型別佔總數的百分比
可以幫助發現哪些問題需要優先解決,或者給構思新優化方向的靈感
建議快速搭建乙個系統,並進行迭代,有乙個訓練過的系統,確定偏差方差的範圍,能夠進行錯誤分析
在貓分類問題中,是貓,y=1;不是貓,y=0
假設在檢視了一些資料樣本
發現標記為貓的有些其實不是貓
所以這是標記錯誤的樣本
「標記錯誤的樣本」來表示學習演算法輸出了錯誤的 y 值
對於標記錯誤的樣本,參考資料集,在訓練集或者測試集 y 的標籤
人類給這部分資料加的標籤,實際上是錯的
這實際上是乙隻狗,所以 y 其實應該是0
首先考慮訓練集
事實證明,深度學習演算法對於訓練集中的隨機錯誤是相當健壯的(robust)
只要標記出錯的樣本並且離隨機錯誤不太遠
有時可能做標記的人沒有注意或者不小心,按錯鍵了
如果錯誤足夠隨機,那麼放著這些錯誤不管可能也沒問題
而不要花太多時間修復它們
當然瀏覽一下訓練集,檢查一下這些標籤,並修正它們也沒什麼害處
有時候修正這些錯誤是有價值的,有時候放著不管也可以
只要總資料集總足夠大,實際錯誤率可能不會太高
如果是開發集和測試集中有這些標記出錯的樣本
在錯誤分析時,新增乙個額外的列,這樣也可以統計標籤 y=1錯誤的樣本數
統計一下對100個標記出錯的樣本的影響
所以會找到100個樣本,其中分類器的輸出和開發集的標籤不一致
有時對於其中的少數樣本,分類器輸出和標籤不同
是因為標籤錯了,而不是分類器出錯
所以也許在這個樣本中,發現標記的人漏了背景裡的乙隻貓
所以那裡打個勾,來表示樣本98標籤出錯了
所以現在問題是,是否值得修正這6%標記出錯的樣本
建議是,如果這些標記錯誤嚴重影響了在開發集上評估演算法的能力
那麼就應該去花時間修正錯誤的標籤
但是,如果它們沒有嚴重影響到用開發集評估成本偏差的能力
那麼可能就不應該花寶貴的時間去處理
如果決定要去修正開發集資料,手動重新檢查標籤並嘗試修正一些標籤
還有一些額外的方針和原則需要考慮
首先,不管用什麼修正手段都應該要同時作用到開發集和測試集上
因為開發和測試集必須來自相同的分布
其次,強烈建議要考慮同時檢驗演算法判斷正確和判斷錯誤的樣本
要檢查演算法出錯的樣本很容易
只需要看看那些樣本是否需要修正
但還有可能有些樣本演算法判斷正確,那些也需要修正
如果只修正演算法出錯的樣本,對演算法的偏差估計可能會變大
這會讓演算法有一點不公平的優勢,就需要再次檢查出錯的樣本
但也需要再次檢查判斷對的樣本
因為演算法有可能因為運氣好把某個東西判斷對了
在那個特例裡,修正那些標籤可能會讓演算法從判斷結果對變成錯
這一點不是很容易做,所以通常不會這麼做
原因是如果分類器很準確,那麼判斷錯的次數比判斷正確的次數要少得多
那麼就有2%出錯,98%都是對的
所以更容易檢查2%資料上的標籤
然而檢查98%資料上的標籤要花的時間長得多
所以通常不這麼做,但也是要考慮到的
最後,如果進入到乙個開發集和測試集去修正這裡的部分標籤
可能會對訓練集做同樣的事情,而修正訓練集中的標籤其實相對沒那麼重要
可能決定只修正開發集和測試集中的標籤
因為它們通常比訓練集小得多
可能不想把所有額外的精力投入到修正大得多的訓練集中的標籤
所以這樣其實是可以的
在構造實際系統時,通常需要更多的人工錯誤分析,更多的人類見解來架構這些系統
想知道它所犯的錯誤,應親自去看看這些資料,嘗試和一部分錯誤作鬥爭
因為花了這幾分鐘,或者幾個小時去親自統計資料
真的可以找到需要優先處理的任務
參考:
深度學習筆記(16) 深度商店
與其說學習筆記,不如說這是一次體驗之旅。看到深度商店讓我想起了android系統的商店,把軟體放到商店裡,作為商品 這種感覺很入心 接地氣,也是大眾人所能接受的,老陌要為這種設計點讚。老陌接觸計算機比較早,是從dos時代走過來的。剛接觸windows95時感覺太強大了,不過那個時代想要找一款軟體很費...
深度學習筆記(一)
深度學習筆記 一 logistic分類 深度學習筆記 二 簡單神經網路,後向傳播演算法及實現 深度學習筆記 三 啟用函式和損失函式 深度學習筆記 優化方法總結 bgd,sgd,momentum,adagrad,rmsprop,adam 深度學習筆記 四 迴圈神經網路的概念,結構和 注釋 深度學習筆記...
深度學習筆記(一)
在mxnet中,ndarray是乙個類,也是儲存和交換資料的主要工具。ndarray和numpy的多維陣列非常類似,ndarray提供gpu計算和自動求梯度等更多功能。首先,從mxnet中匯入ndarray模組。使用shape屬性獲取ndarray例項的形狀,也可以通過size屬性得到ndarray...