模型效果上限預(yù)估、分類模型Bad Case分析方法
給定訓(xùn)練和測(cè)試數(shù)據(jù)集,訓(xùn)練某個(gè)二分類模型(如,GBDT算法),我們通過交叉驗(yàn)證的方法得到了一組最優(yōu)超參數(shù)以及對(duì)應(yīng)的最優(yōu)模型,但在測(cè)試集上這個(gè)模型仍有一定的誤差率,也就說模型的預(yù)測(cè)結(jié)果存在一定數(shù)量的bad case。那么,目前的模型逼近了效果的上限了嗎? 這些bad case有可能被解決嗎?如果可以,該如何解決呢?
回答這些問題的前提條件是樣本和特征已經(jīng)固定下來,本文不討論那些數(shù)據(jù)集本身還在迭代變化的情況。
一、兩類Bad Case
- 標(biāo)簽正確的困難樣本。模型沒有擬合好這類樣本,也就是模型還有進(jìn)步的空間,尚未逼近效果的上界。
- 標(biāo)簽錯(cuò)誤的噪聲樣本(outlier)。模型沒有必要去擬合這類樣本,過擬合會(huì)導(dǎo)致模型在真實(shí)使用環(huán)境的效果下降。
需要注意的是,這里說的噪聲樣本不一定是我們收集、加工數(shù)據(jù)的過程中出現(xiàn)了錯(cuò)誤,有可能是樣本對(duì)應(yīng)的真實(shí)世界中的行為就是一個(gè)小概率的行為,這些小概率的異常行為雖然本身有可能真實(shí)存在,但是過度關(guān)注這些行為,會(huì)導(dǎo)致模型擬合正常行為的能力下降,而且并不會(huì)在模型的真實(shí)使用時(shí)帶來增益。
由此可見,我們只要識(shí)別出噪聲樣本的數(shù)量,就能大致估算出模型的效果上界是多少。另外一方面,識(shí)別出標(biāo)簽正確的困難樣本,也有助于我們尋找到模型改進(jìn)的方法。
二、噪聲樣本識(shí)別方法
目前基于帶噪標(biāo)簽數(shù)據(jù)的學(xué)習(xí)方法主要有兩大類,一類是直接訓(xùn)練對(duì)噪聲魯棒的模型(noise-robust models),另一類方法首先識(shí)別出噪聲數(shù)據(jù),然后基于清洗后的數(shù)據(jù)訓(xùn)練模型。
盡管第一類方法已經(jīng)足夠好,但是面對(duì)老板如下的“靈魂拷問”,我們還是要關(guān)注一下第二類方法。
- 模型的效果上限是多少?
- 這個(gè)case為什么預(yù)測(cè)錯(cuò)誤?
本文主要關(guān)注第二類方法。
1. 基于K近鄰算法識(shí)別噪聲樣本
假設(shè)我們有一個(gè)樣本相似度模型能夠度量?jī)蓚€(gè)樣本的相似度,那么可以針對(duì)bad case使用K近鄰算法對(duì)其分類,根據(jù)分類結(jié)果識(shí)別其是否是噪聲樣本。這種方法的原理是假設(shè)相似的樣本具有相同的分類標(biāo)簽。
一個(gè)二分類模型的bad case有以下兩種情況:
- False Negative: 正樣本被錯(cuò)誤地預(yù)測(cè)為負(fù)樣本
- False Positive: 負(fù)樣本被錯(cuò)誤地預(yù)測(cè)為正樣本
FN) 正樣本被錯(cuò)誤地預(yù)測(cè)為負(fù)樣本
- 根據(jù)樣本特征的相似度度量,在訓(xùn)練集上檢索出與目標(biāo)正樣本最相似的K個(gè)鄰居樣本;
- 統(tǒng)計(jì)K個(gè)鄰居樣本中正負(fù)樣本的比例分布,假設(shè)K個(gè)鄰居樣本中N個(gè)正樣本,則分類為正樣本的概率
- 如果
大于某個(gè)設(shè)定的閾值(如,0.6),則判斷該bad case樣本為“標(biāo)簽正確的困難樣本”,后續(xù)的模型迭代要更加關(guān)注這類樣本。
- 如果
小于某個(gè)設(shè)定的閾值(如,0.6),則判斷該bad case樣本為“標(biāo)簽錯(cuò)誤的噪聲樣本”。該樣本后續(xù)建議從訓(xùn)練集和測(cè)試集中移除。
FP) 負(fù)樣本被錯(cuò)誤地預(yù)測(cè)為正樣本
- 根據(jù)樣本特征的相似度度量,在訓(xùn)練集上檢索出與目標(biāo)負(fù)樣本最相似的K個(gè)鄰居樣本;
- 統(tǒng)計(jì)K個(gè)鄰居樣本中正負(fù)樣本的比例分布,假設(shè)K個(gè)鄰居樣本中N個(gè)負(fù)樣本,則分類為負(fù)樣本的概率
- 如果
大于某個(gè)設(shè)定的閾值(如,0.6),則判斷該bad case樣本為“標(biāo)簽正確的困難樣本”,后續(xù)的模型迭代要更加關(guān)注這類樣本。
- 如果
小于某個(gè)設(shè)定的閾值(如,0.6),則判斷該bad case樣本為“標(biāo)簽錯(cuò)誤的噪聲樣本”。該樣本后續(xù)建議從訓(xùn)練集和測(cè)試集中移除。
如何度量樣本特征的相似度
- 建立模型,比如采用“度量學(xué)習(xí)”的方法;優(yōu)點(diǎn)是相似度度量更加精準(zhǔn)。
- 使用特征向量的余弦相似度;優(yōu)點(diǎn)是使用門檻低。
- 使用特征向量的加權(quán)余弦相似度;優(yōu)點(diǎn)是相比于簡(jiǎn)單的余弦相似度,精度更高。
余弦相似度計(jì)算公式:
加權(quán)余弦相似度:
并不是每個(gè)特征在分類決策中做出的貢獻(xiàn)都是相同的,所以,在有特征重要度權(quán)重的條件下,使用“加權(quán)余弦相似度”會(huì)比基礎(chǔ)的“余弦相似度”度量方法有更好的結(jié)果。
使用GBDT算法,如阿里云平臺(tái)上的 PS_SMART,訓(xùn)練的模型通常都可以輸出每個(gè)特征的重要度分?jǐn)?shù),這些特征重要度分?jǐn)?shù)的量級(jí)差異通常都比較大,在代入到“加權(quán)余弦相似度”計(jì)算公式時(shí),需要先做softmax歸一化,具體公式如下:
如何快速從海量的樣本庫中檢索Top K個(gè)最相似的鄰居樣本
使用向量檢索引擎,比如 faiss, mivus,有一定的使用門檻。
推薦使用阿里云開源的推薦算法訓(xùn)練框架EasyRec中集成的向量檢索算法,可以直接運(yùn)行在MaxCompute上,使用命令如下:
pai -name easy_rec_ext -project algo_public_dev
-Dcmd=vector_retrieve
-Dquery_table=odps://pai_online_project/tables/query_vector_table
-Ddoc_table=odps://pai_online_project/tables/doc_vector_table
-Doutput_table=odps://pai_online_project/tables/result_vector_table
-Dcluster='{"worker" : {"count":3, "cpu":600, "gpu":100, "memory":10000}}'
-Dknn_distance=inner_product
-Dknn_num_neighbours=100
-Dknn_feature_dims=128
-Dknn_index_type=gpu_ivfflat
-Dknn_feature_delimiter=','
-Dbuckets='oss://${oss_bucket}/'
-Darn='acs:ram::${xxxxxxxxxxxxx}:role/AliyunODPSPAIDefaultRole'
-DossHost='oss-cn-hangzhou-internal.aliyuncs.com'
模型參數(shù)說明請(qǐng)查看文檔:https://easyrec.readthedocs.io/en/latest/vector_retrieve.html
2. 基于Confident Learning方法的噪音樣本識(shí)別方法
置信學(xué)習(xí)(Confident Learning)是MIT和Google的研究人員提出一種可以快速地找出錯(cuò)誤標(biāo)簽樣本的迭代模型,并且有開源的工具庫Cleanlab可以使用。
術(shù)語定義:
- 人工標(biāo)簽
:樣本中的標(biāo)簽(可能存在錯(cuò)誤,不一定指人手工打上的標(biāo)簽,也可能是業(yè)務(wù)回流數(shù)據(jù)生成的標(biāo)簽)
- 真實(shí)標(biāo)簽
:樣本對(duì)應(yīng)的真實(shí)標(biāo)簽,是未知的。
條件獨(dú)立假設(shè):每個(gè)樣本被誤標(biāo)注都是條件獨(dú)立的。
第一步:計(jì)算置信度聯(lián)合分布矩陣
置信度聯(lián)合計(jì)數(shù)矩陣 (有點(diǎn)類似混淆矩陣)的行表示預(yù)測(cè)標(biāo)簽樣本個(gè)數(shù),列表示真實(shí)標(biāo)簽樣本個(gè)數(shù)。每個(gè)單元格
表示真實(shí)標(biāo)簽為
,人工標(biāo)簽為
的樣本個(gè)數(shù)。
對(duì)于一個(gè)樣本,它的人工標(biāo)簽是已知的,即樣本中的標(biāo)簽。
但是該樣本的真實(shí)標(biāo)簽卻是未知的,可以通過如下兩個(gè)條件判斷真實(shí)標(biāo)簽:
- 該標(biāo)簽的預(yù)測(cè)概率在所有標(biāo)簽概率中最大
- 該標(biāo)簽的預(yù)測(cè)概率大于計(jì)算得到的閾值,閾值的計(jì)算方法如下:
對(duì)于二分類問題,真實(shí)標(biāo)簽為正樣本的閾值為 所有預(yù)測(cè)為正樣本的預(yù)測(cè)概率的平均值;負(fù)樣本閾值為 所有預(yù)測(cè)為負(fù)樣本的預(yù)測(cè)概率的平均值。
上述兩個(gè)條件中的第一個(gè)很好滿足,但是第二個(gè)條件不一定滿足,所以并不是所有的樣本都可以找到其真實(shí)標(biāo)簽,這也會(huì)在后續(xù)的步驟中有所體現(xiàn)。
| 100 | 40 | |
| 50 | 80 |
上表例子中的總樣本數(shù)為:
置信度聯(lián)合計(jì)數(shù)矩陣 的計(jì)算公式如下:

第二步:計(jì)算置信度聯(lián)合概率分布矩陣
在前一步構(gòu)造置信度聯(lián)合計(jì)數(shù)矩陣時(shí),受到概率閾值限制,部分樣本沒有計(jì)算出真實(shí)標(biāo)簽。置信度聯(lián)合計(jì)數(shù)矩陣中的樣本數(shù)<=真實(shí)樣本數(shù)。所以需要對(duì)置信度聯(lián)合計(jì)數(shù)矩陣中的樣本數(shù)量進(jìn)行重新校準(zhǔn),校準(zhǔn)公式如下:
即針對(duì)矩陣中的每一行計(jì)算屬于各個(gè)真實(shí)標(biāo)簽的概率值(上述公式右項(xiàng)乘號(hào)前面的子項(xiàng)),再乘以人工標(biāo)簽為
的樣本總數(shù)(上述公式右項(xiàng)乘號(hào)后面的子項(xiàng))。
根據(jù)校準(zhǔn)之后的置信度聯(lián)合計(jì)數(shù)矩陣,我們可以通過如下公式計(jì)算置信度聯(lián)合概率分布矩陣:
舉例如下:
| 0.37 (=100/270) | 0.15 (=40/270) | |
| 0.185 (=50/270) | 0.296 (=80/270) |
備注:這里省略了計(jì)數(shù)校準(zhǔn)的標(biāo)準(zhǔn)。
第三步:尋找錯(cuò)誤標(biāo)簽樣本
原始論文中提供了四種方法,這里介紹其中兩種。
假設(shè)樣本總數(shù)為,對(duì)于置信度聯(lián)合概率分布矩陣的每個(gè)非對(duì)角線元素,計(jì)算
作為對(duì)
的預(yù)估。比如,假設(shè)共有100個(gè)樣本,根據(jù)上表中的數(shù)據(jù),判定有15個(gè)標(biāo)注為正樣本的數(shù)據(jù)實(shí)際上屬于負(fù)樣本。
- Prune by Class
對(duì)于每個(gè)類 ,選擇
個(gè)置信度最低(模型預(yù)測(cè)概率最低)樣本作為“噪聲”樣本。
根據(jù)上表中的數(shù)據(jù),預(yù)測(cè)結(jié)果為正樣本的樣本集合中,15個(gè)預(yù)測(cè)概率最低的樣本被判定為“噪聲”樣本;預(yù)測(cè)結(jié)果為負(fù)樣本的樣本集合中,18個(gè)預(yù)測(cè)概率最低(predict label=1的概率最高)的樣本被判定為“噪聲”樣本。
- Prune by Noise Rate
對(duì)于置信度聯(lián)合概率分布矩陣的每個(gè)非對(duì)角線元素,計(jì)算 個(gè)樣本(
)作為“噪聲”樣本,選擇條件是預(yù)測(cè)概率差值(
)最大的那個(gè)子集。
根據(jù)上表中的數(shù)據(jù),預(yù)測(cè)結(jié)果為正樣本的樣本集合中,15個(gè) “預(yù)測(cè)為負(fù)樣本的概率-預(yù)測(cè)為正樣本的概率” 最大的樣本被標(biāo)記為“噪聲”樣本;預(yù)測(cè)結(jié)果為負(fù)樣本的樣本集合中,18個(gè) “預(yù)測(cè)為正樣本的概率-預(yù)測(cè)為負(fù)樣本的概率” 最大的樣本被標(biāo)記為“噪聲”樣本;
3. 深度學(xué)習(xí)模型的噪音樣本識(shí)別方法
a. 基于Forgetting Events識(shí)別錯(cuò)誤標(biāo)簽
在模型訓(xùn)練過程中,某個(gè)樣本已經(jīng)被模型正確分類,隨著模型參數(shù)的更新,該樣本又被錯(cuò)誤分類,這一過程被稱之為該樣本的一次遺忘事件(forgetting event)。根據(jù)論文《AN EMPIRICAL STUDY OF EXAMPLE FORGETTING DURING DEEP NEURAL NETWORK LEARNING》的研究,在模型訓(xùn)練過程中噪聲樣本往往會(huì)比正常樣本經(jīng)歷更多的遺忘事件。基于這一啟發(fā)式規(guī)則,我們可以記錄下每個(gè)樣本經(jīng)歷的遺忘事件總次數(shù),進(jìn)一步辨別出可能的噪聲標(biāo)簽數(shù)據(jù)。
b. 基于訓(xùn)練過程的樣本loss值識(shí)別錯(cuò)誤標(biāo)簽
基于訓(xùn)練過程中樣本的loss值的相對(duì)大小來識(shí)別錯(cuò)誤標(biāo)簽,這一方法是淘系技術(shù)部的同學(xué)在ICCV2019的論文《O2U-Net: A Simple Noisy Label Detection Approach for Deep Neural Networks》中提出的。
大致思路基于以下邏輯:在一次訓(xùn)練中,隨著迭代輪次增加,網(wǎng)絡(luò)逐漸從欠擬合逐漸過渡到過擬合狀態(tài),在訓(xùn)練的初期,模型精度的提升是非常明顯的,因?yàn)榫W(wǎng)絡(luò)很快學(xué)會(huì)了那部分“簡(jiǎn)單的”樣本,因此這類樣本的loss比較小,與之相反,那些“困難的”樣本通常在訓(xùn)練的后期才逐漸被學(xué)會(huì)。觀察訓(xùn)練過程發(fā)現(xiàn),噪聲樣本通常是在訓(xùn)練的后期才被學(xué)會(huì),因而在訓(xùn)練的早期,噪聲樣本的平均loss是遠(yuǎn)大于干凈樣本的,而在訓(xùn)練的后期,因?yàn)榫W(wǎng)絡(luò)逐漸學(xué)會(huì)了所有樣本,兩類樣本的loss區(qū)別不大??v觀整個(gè)訓(xùn)練過程,從欠擬合到過擬合,噪聲樣本loss的均值和方差都比干凈樣本要大。通過循環(huán)學(xué)習(xí)率策略,使網(wǎng)絡(luò)在欠擬合和過擬合之間多次切換,并追蹤不同階段不同參數(shù)的模型對(duì)樣本的loss,通過在時(shí)間維度上捕獲多樣性足夠豐富的模型(類似集成學(xué)習(xí),對(duì)滿足多樣性和準(zhǔn)確性的多個(gè)模型進(jìn)行ensemble),統(tǒng)計(jì)各個(gè)樣本loss的均值和方差,均值和方差越大,樣本屬于噪聲樣本的概率也就越大。
三、如何估算模型效果上界
假設(shè)測(cè)試集樣本數(shù)為 ,其中模型預(yù)測(cè)錯(cuò)誤的樣本數(shù)為
,這些預(yù)測(cè)錯(cuò)誤的樣本中有
條被上述方法識(shí)別為噪聲樣本,那么:
- 目前模型的分類正確率為:
- 估計(jì)的模型正確率上界為:
對(duì)于二分類問題,召回率、準(zhǔn)確率的上界計(jì)算方法類似,這里不再贅述。
四、如何改進(jìn)模型,使模型逼近效果上界
借鑒AdaBoost算法原理,通過改變訓(xùn)練數(shù)據(jù)的樣本權(quán)重,迫使模型更加關(guān)注分類錯(cuò)誤的困難樣本,從而得到更加魯棒的模型。
- 使用初始模型,得到訓(xùn)練集、測(cè)試集上錯(cuò)誤預(yù)測(cè)bad case集合;
- 使用上述噪聲樣本識(shí)別算法,識(shí)別出bad case的類型;
- 從數(shù)據(jù)集中移除所有被識(shí)別為“噪聲”的bad case樣本;
- 把識(shí)別為“困難”的bad case樣本添加到訓(xùn)練集中,并設(shè)置一個(gè)較高的樣本權(quán)重;減小其余初始模型預(yù)測(cè)正確的樣本的權(quán)重(假設(shè)所有樣本的默認(rèn)初始權(quán)重都為1);
- 使用新的帶權(quán)重的數(shù)據(jù)集重新訓(xùn)練模型;
- 重復(fù)上述1~6步,直到模型逼近效果上界為止。
參考文章:
本文由mdnice多平臺(tái)發(fā)布