在深度學習中,是否應該打破正負樣本1:1的迷信思想?

作者丨劉芷寧 伊利諾伊大學香檳分校

來源丨PaperWeekly

編輯丨極市平台

正負樣本的比例並不是唯一決定任務難度的因素。

在深度學習中,樣本不均衡普遍被認為是數據集中不同類別的樣本數量不等。特別地,當訓練集和測試集的類別分佈不匹配時,採用處理樣本不均衡的策略顯得尤為重要。

然而,當訓練集和測試集分佈匹配,但是正負樣本比例仍然是懸殊的,這種情況下是否有必要再引入處理不平衡樣本的策略?例如,在自然科學領域,如預測藥物與靶點結合(即正負樣本)的場景中,實際情況往往是正負樣本本身不均衡的。在這種情況下,使用過采樣等技術人為使訓練集中的正負樣本比例達到 1:1 是否合理?

筆者做過相當長一段時間的不平衡/長尾問題,上述內容對兩個問題答案的假設一對一錯。

  • Q:是否應該打破正負樣本 1:1 的迷信思想?

    A:是的,類別不平衡的比例只是表象,並非本質。

  • Q:當訓練集和測試集分佈匹配,但正負樣本比例仍然懸殊,是否有必要再引入處理不平衡樣本的策略?

    A:通常需要,除非你只關心 overall accuracy,但這意味著你幾乎不關心模型分類少數類的能力。

01 Q:是否應該打破正負樣本1:1的迷信思想?

長話短說,正負樣本並不需要是 1:1,因為類別不平衡的比例一直只是表象,問題的本質從來都是如何幫助模型對每個類(尤其是少數類)都學習到合理的表示。 而後者和正負樣本比例之間並沒有直接的關係。

理論上如果任務足夠簡單(如完全線性可分,且滿足 train/test i.i.d),那麼無論正負樣本比例多懸殊,模型都能夠對測試數據進行完美分類。,當然這隻對一些直接使用全量數據學習的模型成立,比如決策樹、SVM 等。在實際中訓練 NN 需要進行 batch-wise 的隨機梯度下降訓練,連續多個 batch 都只有來自負類的數據會讓模型很快收斂到一個 local optimal solution,將所有數據全部預測為負類。

因此出現了其他答案所提到的一些經驗結果(如 1:10 等比例),這些比例應該是在特定場景下能夠避免模型訓練過程 collapse 的比例。

具體在特定場景下,採用什麼正負比例還是需要根據實際的 task、model,和 metric 決定。我不認為這個問題存在一個可以解決一切的 magic number。

為什麼正負樣本比例不一定重要:一個 toy example

見下圖,用一個 toy example 就可以從直覺上解釋為什麼正負樣本的比例並不是唯一決定任務難度的因素。

▲ 從左到右:類別比例(imbalance ratio/IR)逐漸增長。第一行:一個線性可分的簡單任務。第二行:一個相對困難的複雜任務。

如果任務很簡單(如上圖第一行的數據分佈,線性可分) ,那麼即便有很懸殊的正負樣本數量比例(如最右側,正負樣本 1:100),也不影響模型可以直接在原始數據上學習得到一個完美的分類邊界,並實現 0 錯誤率:見下圖第一行,即使 IR=100 模型也可以實現 0 分類錯誤(分類錯誤的 sample 由紅色表示)。

而如果任務本身就很睏難(如上圖第二行,不同類別的 underlying distribution 有較大 overlap 且在 feature space 中有複雜的 pattern),那麼即便正負樣本比例差距不大,同樣的模型也很難學到合理的邊界(見下圖第二行)。

▲ 第一列:任務示例。第二/三列:KNN/AdaBoost 分類器在每個任務上的結果。紅色的點被誤分類。▲ 第一列:任務示例。第二/三列:KNN/AdaBoost 分類器在每個任務上的結果。紅色的點被誤分類。

02 Q:當訓練集和測試集分佈匹配,但正負樣本比例仍然懸殊,是否有必要再引入處理不平衡樣本的策略?

A:通常需要,除非你只關心 overall accuracy,但這意味著你幾乎不關心模型分類少數類的能力。

如上所述,如果兩類樣本數量懸殊且不做任何處理,模型會連續很多 batch 都只遇到來自負類的樣本,這容易使其收斂到 trivial solution。將所有樣本預測為負類的 trivial solution 會有很高的 overall accuracy(例如正負比 1:10000,那其 acc=99.99%)。

但通常我們都更加關心少數類樣本(positive cases,例如醫療診斷中的病人、欺詐/攻擊檢測中的惡意用戶等)並使用 balanced accuracy,macro-f1 等 metric。優化這些更加合理的 metric 就需要引入處理不平衡樣本的策略

03 Q:重采樣之餘,還有哪些方式處理類別不平衡?

重新采樣改變正負樣本比例只是其中一種從數據出發的方式。 我開發的 imbens package 實現了為類別不平衡設計的十幾種重采樣技術與 ensemble 學習方法,具有與 sklearn-style 的易用 API 設計和詳細的文檔及示例,並已在 github 收穫近 300 星,每月下載逾 2000 次

https://github.com/ZhiningLiu1998/imbalanced-ensemble

https://zhuanlan.zhihu.com/p/376572330

▲ 一些 IMBENS 官方文檔中提供的使用示例▲ 一些 IMBENS 官方文檔中提供的使用示例
▲ IMBENS Github Page Shot▲ IMBENS Github Page Shot

在重采樣之餘,處理深度學習的不平衡有很多從其他方面入手的經典例子:

  • 類別重加權: Class-Balanced Loss Based on Effective Number of Samples(CVPR 2019)

  • 難例挖掘: Focal loss for dense object detection(ICCV 2017)

  • margin-based loss: Learning Imbalanced Datasets with Label-Distribution-Aware Margin Loss(NIPS 2019)

  • meta-learning 自動學習加權/采樣策略:

    • MESA: Boost Ensemble Imbalanced Learning with MEta-SAmpler(NeurIPS 2020)

    • Meta-weight-net: Learning an explicit mapping for sample weighting(NIPS 2019)

    設計特殊模型架構: BBN: Bilateral-Branch Network with Cumulative Learning for Long-Tailed Visual Recognition(CVPR 2020)

    改變訓練過程/策略: Decoupling Representation and Classifier for Long-tailed Recognition(ICLR 2020)

    後驗概率校正: Posterior Re-calibration for Imbalanced Datasets(NeurIPS 2020)

    更多相關的技術和論文,請見我們的 awesome-imbalanced-learning 項目,已在 github 上收穫逾 1.3k 星:

    https://github.com/ZhiningLiu1998/awesome-imbalanced-learning

    https://zhuanlan.zhihu.com/p/111460698