深度學習筆記(16) 誤差分析(一)

2021-09-24 05:24:50 字數 3628 閱讀 7581

假設正在除錯貓分類器

然後在開發集取得了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...