當我們解決任何機器學習問題時,我們面臨的最大問題之一是訓練數(shù)據(jù)不平衡。不平衡數(shù)據(jù)的問題在于學術(shù)界對于相同的定義、含義和可能的解決方案存在分歧。我們將嘗試用圖像分類問題來解開訓練數(shù)據(jù)中不平衡類別的奧秘。
不平衡類會有什么問題?
在一個分類問題中,如果在所有你想要預測的類別里有一個或者多個類別的樣本量非常少,那你的數(shù)據(jù)也許就面臨不平衡類別的問題。
舉例
1.欺詐預測(欺詐的數(shù)量遠遠小于真實交易的數(shù)量)
2.自然災害預測(不好的事情遠遠小于好的事情)
3.在圖像分類中識別惡性腫瘤(訓練樣本中含有腫瘤的圖像遠比沒有腫瘤的圖像少)
為什么這是個問題呢?
不平衡類別會造成問題有兩個主要原因:
1.對于不平衡類別,我們不能得到實時的最優(yōu)結(jié)果,因為模型/算法從來沒有充分地考察隱含類。
2.它對驗證和測試樣本的獲取造成了一個問題,因為在一些類觀測極少的情況下,很難在類中有代表性。
解決這個問題有哪些不同方法?
現(xiàn)在有三種主要建議的方法,它們各有利弊:
1.欠采樣-隨機刪除觀測數(shù)量足夠多的類,使得兩個類別間的相對比例是顯著的。雖然這種方法使用起來非常簡單,但很有可能被我們刪除了的數(shù)據(jù)包含著預測類的重要信息。
2.過采樣-對于不平衡的類別,我們使用拷貝現(xiàn)有樣本的方法隨機增加觀測數(shù)量。理想情況下這種方法給了我們足夠的樣本數(shù),但過采樣可能導致過擬合訓練數(shù)據(jù)。
3.合成采樣( SMOTE )-該技術(shù)要求我們用合成方法得到不平衡類別的觀測,該技術(shù)與現(xiàn)有的使用最近鄰分類方法很類似。問題在于當一個類別的觀測數(shù)量極度稀少時該怎么做。比如說,我們想用圖片分類問題確定一個稀有物種,但我們可能只有一幅這個稀有物種的圖片。
盡管每種方法都有各自的優(yōu)點,但沒有什么特定的啟發(fā)式方法告訴我們什么時候使用哪種方法。我們現(xiàn)在將使用深度學習特定的圖像分類問題詳細研究這個問題。
圖像分類中的不平衡類
在本節(jié)中,我們將選取一個圖像分類問題,其中存在不平衡類問題,然后我們將使用一種簡單有效的技術(shù)來解決它。
問題-我們在 kaggle 網(wǎng)站上選擇「座頭鯨識別挑戰(zhàn)」,我們期望解決不平衡類別的挑戰(zhàn)(理想情況下,所分類的鯨魚數(shù)量少于未分類的鯨類,并且也有少數(shù)罕見鯨類我們有的圖像數(shù)量更少。)
來自 kaggle :「在這場比賽中,你面臨著建立一個算法來識別圖像中的鯨魚種類的挑戰(zhàn)。您將分析 Happy Whale 數(shù)據(jù)庫中的超過25,000張圖像,這些數(shù)據(jù)來自研究機構(gòu)和公共貢獻者。 通過您的貢獻,將會幫助打開有關(guān)全球海洋哺乳動物種群動態(tài)豐富的理解領(lǐng)域。」
我們來看看數(shù)據(jù)
由于這是一個多標簽圖像分類問題,我想首先檢查數(shù)據(jù)在各個類別間的分布情況。
上面的圖表表明,在4251個訓練圖片中,有超過2000個類別中只有一張圖片。還有一些類中有2-5個圖片。現(xiàn)在,這是一個嚴重的不平衡類問題。我們不能指望用每個類別的一張圖片對深度學習模型進行訓練(雖然有些算法可能正是用來做這個的,例如 one-shot 分類問題,但我們現(xiàn)在忽略先這一點)。這也會產(chǎn)生一個問題,即如何劃分訓練樣本和驗證樣本。理想情況下,您會希望每個類都在訓練和驗證樣本中有所體現(xiàn)。
我們現(xiàn)在應(yīng)該做什么?
我們特別考慮了兩個選項:
選項1- 對訓練樣本進行嚴格的數(shù)據(jù)增強(我們可以做到這一點,但因為我們只需要針對特定類的數(shù)據(jù)增強,這可能無法完全達到我們的目的)。因此,我選擇了看起來很簡單的選項2。
選項2-類似于我上面提到的過采樣選項。我僅僅使用不同的圖像增強技術(shù)將不平衡類的圖像在訓練數(shù)據(jù)中復制了15次。這受到了杰里米·霍華德(Jeremy Howard)的啟發(fā),我猜他在一次深度學習講座(fast.ai course課程的第1部分)里提到過這一點。
在開始選項2之前,我們先看看訓練樣本中的一些圖像。
特別的是,這些圖像都是鯨魚的尾巴。因此,識別很可能與特定的圖片方向有關(guān)。
我也注意到在數(shù)據(jù)中有很多圖像是黑白圖片或只有R / B / G通道。
根據(jù)這些觀察結(jié)果,我決定編寫下面的代碼,對訓練樣本中不平衡類的圖像進行小幅改動并保存它們:
以上代碼塊對不平衡類(數(shù)量小于10)中的每個圖像都進行如下處理:
1.將每張圖片的 R、G、B 通道分別保存為增強副本
2.保存每張圖片非銳化的增強副本
3.保存每張圖片非銳化的增強副本
在上面的代碼中可以看到,我們在這個練習中嚴格使用 pillow (一個 python 圖像庫)。
現(xiàn)在在每個不平衡類中都至少有了10個樣本。我們繼續(xù)進行訓練。
圖像增強 -我們簡單考慮這個問題。我們只想確保我們的模型能夠獲得鯨魚尾的詳細視圖。為此,我們將變焦圖包含到圖像增強中。
學習速率探測器 -我們決定將學習率定為0.01,正如學習速率探測器所示。
我們用 Resnet50 模型進行了很少的迭代(先凍結(jié)模型,再解凍)。發(fā)現(xiàn)凍結(jié)的模型對于這個問題也非常有用,因為 imagenet 中有鯨魚尾圖像。
在測試數(shù)據(jù)上表現(xiàn)如何?
最終我們在 kaggle 排行榜上獲得了真相。我們的提出的解決方案在本次比賽中排名34,前五的平均精確度為0.41928 :)
結(jié)論
有時,最簡單的方法是最合理的(如果你沒有更多的數(shù)據(jù),只需稍加變化地拷貝現(xiàn)有的數(shù)據(jù),假裝對模型來說這一類別的大多數(shù)觀測與它們基本類似)。它們最有效并且可以更容易和直觀地完成工作。
-
人工智能
+關(guān)注
關(guān)注
1791文章
47279瀏覽量
238511 -
深度學習
+關(guān)注
關(guān)注
73文章
5503瀏覽量
121170
發(fā)布評論請先 登錄
相關(guān)推薦
評論