笨蛋,問題在DATA
#作者不熟悉NLP相關,因此以下文章以影像為主。
前言
學習AI(深度學習)的同好,應該都知道ImageNet、VOC、MSCOCO、KITTI、Cityscape等開源資料庫,正因為有這些資料庫,在學校學習AI的同學和同好才能專注於學習機器/深度學習相關知識,課程中鮮少提到資料的部分,老師通常在指導學生都是說看reference用什麼資料庫,看能不能將其clone下來,跟reference去比較就好,希望學生專注於發展演算法(model structure, training tricks,…),因此大家對資料的取得或是有效度都不太專注(心理OS:反正資料都ready好了,幹嘛自找麻煩,跟別人比用reference就好了)。
謎之音: 某一派的研究人員評論現今的模型演算法說「現在的深度學習模型結構太大,大多是在這些開源資料庫overfitting了,換個實務資料就不太能work」,另一派的人說「不是模型太複雜,是你們實務標註資料數量太少,給愈多標註資料模型就會表現得越好」,通常去問第二派的人,那你們要多少資料,他們又答不上來,這跟「給我一個立足點和一根足夠長的槓桿,我就可以撬動地球。」這句幹話一樣。其
實這兩題的答案根本沒有解(也許我學藝不精,當作open issue來討論吧)。
大多數的同好在進行實務AI專案時,如果遇到模型偵測率不佳,腦袋第一件想到的事情就是資料不足,除了繼續收集資料和繼續標註資料外,通常也會採用resampling、data augmentation、GAN、metric learning、meta learning等方式來試圖解決樣本不足或是class imbalance的問題。
本篇文章會針對兩個方向來說明
1. 資料?
2. 大家最喜歡問系列:訓練模型需要多少資料?
1. 資料?
資料萬萬種,資料庫也萬萬種,如果做過IMAGENET的數據的人都知道由李飛飛教授實驗室提供的這個資料庫有千萬張有標註的圖像,除了分類任務外,還有object localization和Object detection等任務,有興趣可以上IMAGENET官網來看細節,但IMAGENET數據集中有很多標註是有錯誤的,參考:「ImageNet 存在十萬標籤錯誤,你知道嗎?」,IMAGENET在2010年開始進行比賽,但ImageNet存在錯誤卻是在今年(去年?)才被廣泛拿出來討論,讀者是否好奇一堆研究在用IMAGENET怎麼都沒有發現有問題,在幾千萬張圖要去找找到錯誤標註,應該很少有這麼有空的人願意做這件事(就有人這麼有心)。OS:有人願意免費提供這麼大的資料庫我們就應該心存感激了,怎麼敢質疑勒。但學術上就是要一直保持著「為什麼」的心,這樣在研究上才能有突破,萬事都都照著教科書來做,從不質疑內容,就只會像印度電影三個傻瓜裡面的書呆子學霸一樣,不問內容反正就被下來就對了。
實務上到了社會就如同大陸電影「銀河補習班」這段內容,
現實生活沒有ABCD選項給你們選,如果有應該還有EFGHI,….等。
資料也是如此,現實的資料不像公開資料庫,公開資料庫通常已經預選過拿出來進行標註通常這些資料都是有意義富有訊息的圖像,實務上通常收集到的資料都是非常大量而且複雜度很高,像是自駕車相關的圖像資料都非常可觀(通常都是好幾萬小時的資料,一秒30幅,一小時就60*60*30=108,000張圖),且通常收集到的資料除了有用的影像之外更多的是noisy或是無效的資料。
Note: 醫療相關數據因為牽涉到人個體的差異,複雜度更高,且數據量一定不足或是有偏誤,例如一家醫院有10萬張X光圖,但你可以保證這10萬張圖含括所有個人種差異嗎?沒有任何偏誤嗎?
複雜度高
在進行車輛偵測的時候,複雜度高就是指道路背景很複雜,例如:晴天、陰天、雨天或是夜晚,高速公路平面道路鄉間小路,或是山路等,這時候應該做相關的人就會說那就所有scenarios都收集就好了,這樣說也沒有錯,針對這樣的資料只需要訂好metadata,將可能的scenarios都囊括就好了,但凡事都有例外,你做好的設備就有人這麼無聊拿去雪地或是沙漠測試,結果因為訓練資料沒有看過背景全白或是全黃的狀況導致出錯,所以scenarios定義很重要。當定義出來所有scenarios後,這時候資料的收集就變得非常困難,因為在台灣路上行走的時候大多數的物件都是機車、小客車或是人,如果你要偵測的類別為自行車和狗時候,你就會發現資料真的非常難收集到,第二就算你真的找到自行車和狗的資料了,你有辦法在雨天和晚上找到這樣的資料嗎?
Noisy或是無效的資料
有時候收集回來的資料都是機車和小客車的資料,結果我們收錄的1小時的資料,裡面有59分鐘都是同一台車和機車,這樣的資料是否都有效? 或是有59分鐘的資料都是在拍山壁,類似這樣的資料要怎麼刪除/屏除或是保留,目前的作法都是用”人”來判斷(這個讓我保留)。如果給標註人員48小時影像的原始影片,但沒有metadata,標註人員就要花費不少的時間在做資料meta分門別類和進行篩選的動作。題外話:類似山壁的這種只有背景的影像我們需要用嗎? 這是open issue,但我的經驗是需要。
另外,資料集的偏誤(後面文章要提的資料變異性不足)也會造成AI學習不好的問題,例如「AI算法參照歐巴馬卻生成白人面孔,LeCun連發17條推文回復爭議」,所述,當資料集有偏見得時候,這時候的AI模型就會有偏見,見下圖,
美國前總統歐巴馬(Barack Obama)有人把原圖的解析度降低了許多,利用AI算法進行Super-resolution imaging還原,結果還原的圖變成白人,同樣的實驗有人用在華人演員劉玉玲上,得到一樣的變成白人的結果,這樣的資料偏見部是我們樂見的。
2. 大家最喜歡問系列:訓練模型需要多少資料?
我先破題講個幹話,答案是我也不知道。
因為大家問我的時候,我一定先說這句,我個人認為這個問題如果有general solution的時候,能正確解出這個問題的人就是「神」
我用個例子來說明為什麼? 假設有貓和狗分類問題,我們將貓和狗的所有可能的資料分布放到二維空間來說明,下圖紅色就是貓影像所有可能資料集,黃色就是狗得所有可能資料集。
當我們在進行AI訓練前,我們會去收集大量貓和狗的數據回來,第一點要問的是我們收集的夠嗎? 有人會說我收集了100萬張,應該夠吧,比如收集了下面的資料(我認為是所有的貓和狗了)來訓練模型。
結果大家都拿下面這種資料來進行inference,這時候AI的偵測就很糟糕了,
大家可能會想說實務上又不會這樣搞,但我只是舉個極端的例子,而且你怎麼知道不會有人這樣搞,就像做指紋辨識的人也沒有想過有人用貓的紋路來測試吧,
貓可能不夠看,用烏龜的頭來測試好像也不錯
好啦,坦白說這些真的太極端了,回到正題,這個問題其實不在「量」,而是在「質」,這邊提的質不是影像的Quality,而是資料的變異,也就是前一陣子炒很兇的大數據議題中4V(Volume、Variety、Velocity、Veracity)的Variety。
我們從剛剛的資料集合來看,「下圖紅色就是貓影像所有可能資料集,黃色就是狗得所有可能資料集,我們收集到的貓的資料是紫色的範圍,土黃色是收集到狗的資料」。若我們收集的資料(樣本資料)可以跟所有可能的資料(母體資料)範圍越match則越好,如下圖
如果我們收集到的都是部分資料,如下圖所示,
這時候模型學習就不可能做得很好,因為怎麼學都是部分的資料,如果拿到分布不同位置的資料來測試模型就掛了。
我們從統計觀點來看,上面所述的「紅色就是貓影像所有可能資料集,黃色就是狗得所有可能資料集」這就是貓和狗的母體(通常是未知的),實際上的任何應用我們在做的都是樣本資料,所以從母體來看,我們不可能知道母體的所有case長怎樣,我們只能從文字來區隔「貓和狗」的差異,根本無法從現有我們認知的所有資料發現所有的case出來(前面範例圖已經放了例子,給狗穿貓衣服人也無法第一時間認出是狗)。
統計人應該就會說上述的問題就是你sample資料有問題,這時候我們應該問「實務上衍生的問題是你怎麼知道母體是什麼?」你有辦法列出所有的資料可能嗎? 無法,所以回到第一節介紹的資料部分,如何有效定義出所有的可能,在這個定義出的可能下盡可能地去收集數據吧。
AI要做得好重點在資料,在訓練模型的過程中,將資料區隔訓練集、驗證集和測試集三組資料,用訓練集訓練模型,驗證集進行模型調整,然後讓測試集的資料盡可以有最好得結果,但記得定義scenarios,且所有的scenarios都要有收到有效的資料。所以需要多少資料,就只能從測試的部份給你feedback,測試有問題就反過頭來看你的訓練資料是不是跟你測試的資料分布不同。
做AI的同好記得資料才是王道,當做AI遇到頻頸的時候就回頭看看根本的問題和資料的「質」吧。
BTW如果硬要量化數據的話,可以依據YOLOv4作者建議,在物件偵測上每類至少需要500~2000張圖才能有好的偵測結果。
以上內容如果圖片有侵犯的原圖的作者利益或是不悅再麻煩通知我拿掉你的圖片等。