分享用小型數(shù)據(jù)集處理數(shù)據(jù)的7個小技巧
我們經(jīng)常聽說,大數(shù)據(jù)是那些成功的機器學習項目的關(guān)鍵。
這是一個主要問題:許多組織沒有你需要的數(shù)據(jù)。
如果沒有最基本的原材料,我們?nèi)绾卧突万炞C機器學習思想?在資源稀缺的情況下,如何有效地利用數(shù)據(jù)獲取和創(chuàng)造價值?
在我的工作場所,我們?yōu)榭蛻糁谱髁撕芏喙δ茉?。正因為如此,我?jīng)常需要讓小數(shù)據(jù)走得更遠。在本文中,我將分享7個技巧來改進使用小型數(shù)據(jù)集進行原型設(shè)計時的結(jié)果。
1. 要意識到你的模型不能很好地推廣
這應該是目前最重要的。你正在建立一個模型,它的知識是浩瀚的知識海洋中的一小部分,而這種情況應該是必然的。
如果你正在構(gòu)建一個基于室內(nèi)照片的計算機視覺原型,不要期望它在戶外工作得很好。如果你有一個基于聊天室玩笑的語言模型,不要期望它適用于夢幻的小說。
確保你的經(jīng)理或客戶能理解這一點。這樣,每個人都可以對模型應該交付的結(jié)果有一個現(xiàn)實的期望。它還為提出有用的新的KPI提供了機會,以便在原型范圍內(nèi)外對模型性能進行量化。
2.建立良好的數(shù)據(jù)基礎(chǔ)設(shè)施
在許多情況下,客戶端沒有你需要的數(shù)據(jù),公共數(shù)據(jù)也不是一個選項。如果原型的一部分需要收集和標記新數(shù)據(jù),請確保你的基礎(chǔ)設(shè)施盡可能少地產(chǎn)生摩擦。
你需要確保數(shù)據(jù)標記非常簡單,以便非技術(shù)人員也可以使用。我們已經(jīng)開始使用Prodigy,我認為這是一個很好的工具:既可訪問又可擴展。根據(jù)項目的大小,你可能還想設(shè)置一個自動數(shù)據(jù)攝取器,它可以接收新數(shù)據(jù)并自動將其提供給標記系統(tǒng)。
如果將新數(shù)據(jù)快速而簡單地導入系統(tǒng),你將獲得更多的數(shù)據(jù)。
3.做一些數(shù)據(jù)擴充
通??梢酝ㄟ^增加現(xiàn)有的數(shù)據(jù)來擴展數(shù)據(jù)集。它是對數(shù)據(jù)進行微小的更改,而不應該顯著地更改模型輸出。例如,如果一只貓旋轉(zhuǎn)了40度,它的圖像仍然是一只貓的圖像。
在大多數(shù)情況下,增強技術(shù)允許你生成更多的"semi-unique"數(shù)據(jù)點來訓練模型。首先,可以嘗試在數(shù)據(jù)中添加少量高斯噪聲。
對于計算機視覺,有許多簡單的方法來增強圖像。我對Albumentations庫有很多的經(jīng)驗,它做了許多有用的圖像轉(zhuǎn)換,同時保持你的標簽完好無損。

許多人發(fā)現(xiàn)另一種有用的增強技術(shù)是Mixup。這種技術(shù)實際上是獲取兩個輸入圖像,將它們混合在一起并組合它們的標簽。

在擴展其他輸入數(shù)據(jù)類型時,需要考慮哪些轉(zhuǎn)換會更改標簽,哪些不會。
4.生成一些合成數(shù)據(jù)
如果你已經(jīng)用盡了擴展真實數(shù)據(jù)的選項,你可以開始考慮創(chuàng)建一些假數(shù)據(jù)。生成合成數(shù)據(jù)也是覆蓋真實數(shù)據(jù)集沒有的一些邊緣情況的好方法。
例如,許多機器人強化學習系統(tǒng)(如OpenAI的Dactyl)在部署到真實機器人之前,都是在模擬的3D環(huán)境中進行訓練的。對于圖像識別系統(tǒng),你同樣可以構(gòu)建3D場景,為你提供數(shù)千個新的數(shù)據(jù)點。

有許多方法可以創(chuàng)建合成數(shù)據(jù)。在Kanda,我們正在開發(fā)一個基于 turntable-based 的解決方案,來創(chuàng)建用于對象檢測的數(shù)據(jù)。如果你有很高的數(shù)據(jù)需求,你可以考慮使用Generative Adverserial Networks 來創(chuàng)建合成數(shù)據(jù)。要知道GAN是出了名的難訓練,所以首先要確保它是可以創(chuàng)建的。

有時你可以將這些方法結(jié)合起來:蘋果有一個非常聰明的方法,使用GAN來處理3D建模人臉的圖像,使其看起來更像照片。
5. 小心幸運的分割
在訓練機器學習模型時,通常會將數(shù)據(jù)集按照一定的比例隨機分割成訓練集和測試集。通常情況下這很好。但是,在處理小數(shù)據(jù)集時,由于訓練示例的數(shù)量較少,存在很高的噪聲風險。
在這種情況下,你可能會意外地得到一個幸運的分割:一個特定的數(shù)據(jù)集分割,你的模型將在其中執(zhí)行并很好地推廣到測試集。
而在這種情況下,k-fold交叉驗證是更好的選擇。本質(zhì)上,你將數(shù)據(jù)集分割為k個"folds",并為每個k訓練一個新的模型,其中一個folds用于測試集,其余的用于訓練。這控制了你所看到的測試性能不僅僅是由于幸運(或不幸)的分割。
6. 使用遷移學習
如果你使用的是某種標準化的數(shù)據(jù)格式,比如文本、圖像、視頻或聲音,那么你可以利用其他人之前在這些領(lǐng)域所做的所有工作來進行遷移學習。這就像站在巨人的肩膀上。
當你進行遷移學習時,你采用別人建立的模型(通常,"其他人"是谷歌、Facebook或一所主要大學),并根據(jù)你的特殊需要對它們進行微調(diào)。
遷移學習之所以有效,是因為大多數(shù)與語言、圖像或聲音有關(guān)的任務(wù)都具有許多共同的特征。對于計算機視覺,它可以檢測特定類型的形狀、顏色或圖案。
最近,研究出來一個高精度的目標檢測原型。通過微調(diào)一個MobileNet單鏡頭檢測器,我可以極大地加快開發(fā)速度,該檢測器是在谷歌的Open Images v4數(shù)據(jù)集(約900萬標記圖像!)上訓練的。經(jīng)過一天的訓練,我能夠使用~1500張帶標簽的圖像生成一個相當健壯的對象檢測模型,測試圖為0.85。
遷移學習是有效的,因為與語言、圖像或聲音有關(guān)的大多數(shù)任務(wù)都有許多共同特征。 對于計算機視覺,它可以是檢測某些類型的形狀、顏色或圖案。
7. 嘗試一組"weak learners"
有時候,你不得不面對這樣一個事實:你沒有足夠的數(shù)據(jù)來做任何花哨的事情。幸運的是,有許多傳統(tǒng)的機器學習算法可以使用,它們對數(shù)據(jù)集的大小不那么敏感。
當數(shù)據(jù)集較小且數(shù)據(jù)點維度較高時,支持向量機等算法是一個很好的選擇。
不幸的是,這些算法并不總是像***進的方法那樣精確。這就是為什么他們可以被稱為"weak learners",至少與高度參數(shù)化的神經(jīng)網(wǎng)絡(luò)相比。
提高性能的一種方法是將這些"weak learners"(這可以是一組支持向量機或決策樹組合起來,以便他們"一起工作"來生成預測。這就是集成學習的全部內(nèi)容