博客專欄

EEPW首頁 > 博客 > 機(jī)器學(xué)習(xí)里的bias的一些處理方法和思考

機(jī)器學(xué)習(xí)里的bias的一些處理方法和思考

發(fā)布人:數(shù)據(jù)派THU 時(shí)間:2021-09-19 來源:工程師 發(fā)布文章

來源:深度學(xué)習(xí)愛好者

機(jī)器學(xué)習(xí)的bias對性能影響很大,常常會使一個(gè)線下優(yōu)秀的模型線上落不了地,或者鬧出新聞里的笑話。在機(jī)器學(xué)習(xí)競賽或數(shù)據(jù)集里,很多時(shí)候?qū)ias的處理在test上帶來的提升可能比模型提升還要多。以下寫寫我這些年遇到的一些機(jī)器學(xué)習(xí)里的bias的一些處理方法。

Santander Product Recommendation

https://www.kaggle.com/c/santander-product-recommendation/

關(guān)鍵詞:Less is More

這個(gè)數(shù)據(jù)集提供****用戶2015年1月到2016年5月的產(chǎn)品購買數(shù)據(jù),要求預(yù)測用戶2016年6月購買什么產(chǎn)品。按照通常的觀點(diǎn),訓(xùn)練數(shù)據(jù)都是多多益善的。但是BreakfastPirate 在 When Less is More 里提出,因?yàn)槊磕?月份是****的結(jié)算日,此時(shí)的用戶行為和平時(shí)不一樣的。只使用2015年6月一個(gè)月的數(shù)據(jù),效果要比使用17個(gè)月的數(shù)據(jù)效果要好。

這個(gè)例子說明當(dāng)train 和test 存在bias的時(shí)候 ,只使用train里那部分和test相似的數(shù)據(jù)可能效果更好。

Freesound Audio Tagging 2019

https://www.kaggle.com/c/freesound-audio-tagging-2019

關(guān)鍵詞:warm up

訓(xùn)練集是由4970個(gè)人工標(biāo)注的curated音頻片段和19815個(gè)機(jī)器標(biāo)注的noisy音頻片段組成,而test和人工標(biāo)注的的訓(xùn)練集同源,但是如果只用4970個(gè)數(shù)據(jù)顯然太少了,但深度學(xué)習(xí)的好處就是可以遷移學(xué)習(xí),所以可以用noisy數(shù)據(jù)做warm up訓(xùn)練,最后再用curated數(shù)據(jù)在warm up后的預(yù)訓(xùn)練模型上繼續(xù)訓(xùn)練。在lwlrap這個(gè)metric可以比只用curated訓(xùn)練提升一個(gè)百分點(diǎn)。

這個(gè)例子說明深度學(xué)習(xí)通過warm up,遷移學(xué)習(xí)可以一定程度利用那些和test存在bias的數(shù)據(jù)

樹模型也有類似利用存在bias數(shù)據(jù)的技巧,見嫁接學(xué)習(xí):

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

Toxic Comment Classification Challenge

https://www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge

關(guān)鍵詞:pseudo label

這個(gè)數(shù)據(jù)由于發(fā)生了test泄露,因此中途增加了后續(xù)標(biāo)注的新test數(shù)據(jù)。由于數(shù)據(jù)的數(shù)據(jù)源和標(biāo)注的人不一樣,所以舊的train數(shù)據(jù)和新的test存在bias。一個(gè)解決方法就是用train訓(xùn)練的模型給新test打標(biāo)簽,然后把置信度高的test加入train里訓(xùn)練。AUC從0.9880 提升到了 0.9885。

無論數(shù)據(jù)是否有bias,一般pseudo label都能漲分,但在訓(xùn)練集和測試機(jī)分布不完全一致的時(shí)候,將test通pseudo label過加入訓(xùn)練,效果會更加顯著。

Bengali.AI Handwritten Grapheme Classification

https://www.kaggle.com/c/bengaliai-cv19/

關(guān)鍵詞:CycleGan

這個(gè)數(shù)據(jù)任務(wù)多任務(wù)分類,需要對每一個(gè)手寫字符分別對grapheme root (共168類)、vowel diacritics (共11類)、consonant diacritics (共7類)進(jìn)行分類, 但是數(shù)據(jù)制作者故意在分類的時(shí)候產(chǎn)生bias,本來label應(yīng)該有168×11×7共12936種組合,但是訓(xùn)練集只提供其中的一部分label組合樣本,這就導(dǎo)致訓(xùn)練的模型會認(rèn)為剩下的組合不存在而預(yù)測不出來,而test里實(shí)際上是有的。在冠軍solution Cyclegan Based Zero Shot Learning 里,使用CycleGan把12936種組合對應(yīng)的樣本全部生成了出來,將這些GAN生成的樣本用于訓(xùn)練,就可以把原本train里unseen的數(shù)據(jù)給預(yù)測出來了。

Twitter RecSys Challenge 2020

https://recsys-twitter.com/

關(guān)鍵詞:adversarial validation

這是一個(gè)關(guān)于推特推薦的比賽, 在官方的賽后總結(jié) What Twitter learned from the Recsys 2020 Challenge 可以看到,由于train和test是按照time split的,存在一定的不同,第一名Nvidia 團(tuán)隊(duì)使用adversarial validation 選擇更具通用性的特征來防止過度擬合。即通過將訓(xùn)練集和測試集分別打上不同的標(biāo)簽然后進(jìn)行訓(xùn)練,通過輸出的特征重要性篩選特征。

類似的技巧也可見于 LANL Earthquake Prediction ,這里1st place solution 使用KS統(tǒng)計(jì)篩選相似的特征提高泛化能力。

adversarial validation 不僅可用于篩選特征,也可以篩選樣本。通過分類器得到和test最相近的樣本用于訓(xùn)練和驗(yàn)證。當(dāng)我們無法直接通過業(yè)務(wù)經(jīng)驗(yàn)或者出題者的數(shù)據(jù)說明知道train里哪些樣本和test分布相似,就可以用adversarial validation.

Sberbank Russian Housing Market

https://www.kaggle.com/c/sberbank-russian-housing-market

關(guān)鍵詞: magic number

這個(gè)題用2011年8月到2015年6月的莫斯科房價(jià)數(shù)據(jù)來預(yù)測 2015年7月到2016年5月的房價(jià),而由于眾所周知的原因,貨幣盧布在那幾年發(fā)生了通貨膨脹,導(dǎo)致test的房價(jià)數(shù)據(jù)要高于train的數(shù)據(jù),因此所有的方案都在模型結(jié)果后處理乘了一個(gè)放大系數(shù),在test上可以帶來顯著的提升,大家稱之為magic number。雖然這種人工后處理的方式很不機(jī)器學(xué)習(xí)。但這就是real world. 最后出題方 Sberbank 的 Data Science Lead 也在Question to admins about rules 認(rèn)可了這種后處理方法。

事實(shí)上,后處理也在大量的由時(shí)間導(dǎo)致的bias類數(shù)據(jù)被使用。除了乘系數(shù),還有在分類里調(diào)閾值等等。

后處理或人工規(guī)則遇到外行評審

關(guān)鍵詞: outlier

因?yàn)闄C(jī)器學(xué)習(xí)不能完全解決bias,所以上一段提到乘系數(shù),調(diào)閾值,或者人工規(guī)則在內(nèi)行人里是被認(rèn)可的,但如果遇到外行評審,他會認(rèn)為你不是用機(jī)器學(xué)習(xí),從而否定你的方案。這時(shí)候可能就要包裝自己方案,比如直接乘一個(gè)放大系數(shù)不行,那我們就可以把train里面一些label偏低的樣本作為outlier舍棄掉或降低weight,一樣能起到放大模型輸出的效果,這樣就能忽悠評審了。其他規(guī)則方法也可以用類似調(diào)整train樣本方法來把規(guī)則手法掩蓋起來。

iMet Collection 2019 - FGVC6

https://www.kaggle.com/c/imet-2019-fgvc6

關(guān)鍵詞: 把test放到train里訓(xùn)練

知乎經(jīng)??吹接腥苏f某些論文就是靠把test放到train里訓(xùn)練來達(dá)到SOTA的,這個(gè)也發(fā)生在kaggle競賽里。在這個(gè)數(shù)據(jù)里是對博物館的文物圖片進(jìn)行分類,由于比賽的形式是提交訓(xùn)練完的模型在線上做inference,所以出題者也沒想到有人能作弊,但是俄羅斯x5公司的幾個(gè)參賽者硬是通過爬蟲爬取博物館網(wǎng)站以及谷歌識圖把部分test圖片給標(biāo)注了,然后把這些標(biāo)注的test數(shù)據(jù)用于訓(xùn)練模型,把模型交上去用于欺騙組織者。由于這只是個(gè)CVPR的workshop,沒人上心,只檢查他們的model inference結(jié)果,居然就讓他們騙了過去.

PetFinder.my Adoption Prediction

https://www.kaggle.com/c/petfinder-adoption-prediction

關(guān)鍵詞: hashed ID

后來這幫人看沒受到懲罰,變本加厲,在多模態(tài)數(shù)據(jù)競賽PetFinder.my Adoption Prediction 里又一次去爬數(shù)據(jù),可能由于這次是多模態(tài)數(shù)據(jù)而不是圖像,含有寵物貓狗的表格信息,文字,圖像,比較復(fù)雜,想把爬出的數(shù)據(jù)做成和train一樣格式丟進(jìn)去訓(xùn)練不方便.作弊者于是將這些數(shù)據(jù)和label進(jìn)行編碼,混淆hash到一個(gè)ID字段中,并該ID字段偽裝成來自外部"cute-cats-and-dogs-from-pixabaycom" dataset,在處理數(shù)據(jù)時(shí),對這些哈希ID進(jìn)行解碼,并匹配test的樣本得到label.萬萬沒想到,這個(gè)比賽的出題公司想把獲勝方案部署上線,于是檢查代碼的時(shí)候發(fā)現(xiàn)了作弊情況.最后作弊者被永封,并丟掉了H20.ai的工作。

雖然最后這兩個(gè)例子里的數(shù)據(jù)和bias無關(guān),但是顯然這個(gè)"技巧"顯然可以解決bias,定向過擬合test。

小結(jié)

上面所有的歸納到一起就是,雖然機(jī)器模型變得越來越復(fù)雜,不能像過去那樣對LR模型那樣直接修改權(quán)重去擬合test的bias,但是對ai這個(gè)黑盒子,我們還是可以:

1.有選擇的控制黑盒子的輸入,根據(jù)test bias的分布,我們想得到什么,我們就輸入什么,畢竟現(xiàn)在的模型記憶力很強(qiáng)。

2.有選擇的修改黑盒子的輸出,根據(jù)test bias的分布,我們想得到什么,我們就修改什么,然后封裝起來好像就是模型輸出的一樣。

小結(jié)2

有人說,隨著ai技術(shù)的成長,數(shù)據(jù)的增加,就可以逐步解決bias,我認(rèn)為ai方法只要還是基于數(shù)據(jù)訓(xùn)練那一套,bias就永遠(yuǎn)不可能消除。

從上面舉得例子我們可以看到,機(jī)器學(xué)習(xí)的bias方向完全是可以人為控制的,比方說:用虎撲步行街的語料訓(xùn)練出來的模型肯定和豆瓣小組訓(xùn)練出來的不一樣;復(fù)雜的模型背后可能藏著無數(shù)條規(guī)則,當(dāng)滿足某種條件下就會輸出人為指定的結(jié)果,就像前面提到作弊者直接hash id指定test label一樣,不懷好意的人也可以把自己的目的藏在復(fù)雜的系統(tǒng)里。

我們平時(shí)遇到的搜索和推薦結(jié)果背后也充滿了資本的力量帶來的bias,商品搜索推薦給用戶的不一定是最適合用戶的,而是能給資本帶來最大效益的,信息搜索推薦帶來的也不一定是讀者想看到的,而是資本想讓讀者看到的,想引導(dǎo)讀者思考的。最典型的就是Google 真的在美國幫希拉里屏蔽不利信息嗎? 這個(gè)例子了,什么信息繭房簡直就是笑話,只有資本給你搭的繭房。

機(jī)器學(xué)習(xí)有bias不可怕,可怕的使用者心中有bias。

試想一下,有一天35歲勤勤懇懇工作的打工人被HR用AI模型裁掉了,而導(dǎo)致AI更容易預(yù)測大齡打工人創(chuàng)效低的原因是35歲以上當(dāng)偷奸?;习淄玫慕y(tǒng)計(jì)學(xué)幾率比剛畢業(yè)的小白兔大。而更可怕的是老板和HR故意在模型訓(xùn)練增加了35歲打工人的負(fù)面樣本和權(quán)重來確保達(dá)到自己的目的.然后把這個(gè)結(jié)果全部推脫給AI,而打工人只能看到輸出的結(jié)果卻看不到模型的細(xì)節(jié)。

那有人說說不允許把年齡作為輸入條件加入模型里不就行了嗎?答:并沒用。大數(shù)據(jù)時(shí)代,很多數(shù)據(jù)暗含用戶年齡信息,比如手機(jī)上安裝的app(參看2020 騰訊廣告算法大賽)。

由于AI存在種種的bias會被濫用情況,所以我認(rèn)為一方面AI的使用必須透明,另一方面應(yīng)該限制被隨意使用在人身上,及和人交互上。我們要警惕和反對亞馬遜利用算法自動解雇無效率的倉庫工人,上海某小學(xué)通過 AI 圖像識別學(xué)生上課開小差并對學(xué)生進(jìn)行評分這種AI落地。

*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



關(guān)鍵詞: 機(jī)器學(xué)習(xí)

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉