我們經常聽說海量數據是建立成功的機器學習項目的關鍵。
他是一個主要問題:許多組織不會有你需要的數據。
如果沒有最基本的原材料,我們如何製作和驗證機器學習理念?當資源稀少時,我們如何才能有效地獲取和創建數據價值?
在我的工作場所,我們為客戶生產了許多功能原型。因此,我經常需要讓Small Data走很長的路。在本文中,我將分享7個提示,以便在使用小型數據集進行原型設計時改善結果。
![](https://easyai.tech/wp-content/uploads/2022/08/d9354-2019-09-04-025902.jpg)
1:意識到你的模型不會很好地概括。
這應該是第一項業務。你正在構建一個模型,其知識基於宇宙的一小部分,而且應該是唯一可以預期運行良好的地方或情況。
如果您正在構建基於室內照片選擇的計算機視覺原型,請不要期望它在戶外運行良好。如果你有一個基於聊天室戲弄的語言模型,不要指望它適用於幻想小說。
確保您的經理或客戶了解這一點。這樣,每個人都可以對模型應該提供的結果的實際期望保持一致。它還創造了一個機會,可以提出有用的新KPI來量化原型範圍內外的模型性能。
![](https://easyai.tech/wp-content/uploads/2022/08/c7592-2019-09-04-025917.jpg)
2:構建良好的數據基礎架構。
在許多情況下,客戶端將不具備您需要的數據,並且公共數據將不是一種選擇。如果您的原型的一部分需要收集和標記新數據,請確保您的基礎設施創建儘可能少的摩擦力。
您需要確保數據標籤非常簡單,因此對於非技術人員來說也是平易近人的。我們已經開始使用Prodigy,我認為它是一個很好的工具:可訪問和可擴展。根據項目的大小,您可能還需要設置自動數據攝取,這可以接收新數據並自動將其提供給標籤系統。
如果快速簡便地將新數據導入系統,您將獲得更多數據。
![](https://easyai.tech/wp-content/uploads/2022/08/70ee0-2019-09-04-025929.jpg)
3:做一些數據擴充。
您通常可以通過擴充您擁有的數據來擴展數據集。它是關於對不應顯着改變模型輸出的數據進行輕微更改。例如,貓的圖像仍然是貓的圖像,如果它旋轉40度。
在大多數情況下,增強技術允許您生成更多「半獨特」數據點來訓練模型。作為開始,您可以嘗試在數據中添加少量高斯噪聲。
對於計算機視覺,有很多簡潔的方法可以增強您的圖像。我對Albumentations庫有積極的經驗,它可以在保持標籤不受傷害的同時進行許多有用的圖像轉換。
![](https://easyai.tech/wp-content/uploads/2022/08/ad45f-2019-09-04-025944.jpg)
許多人發現有用的另一種增強技術是Mixup。這種技術實際上需要兩個輸入圖像,將它們混合在一起並組合它們的標籤。
![](https://easyai.tech/wp-content/uploads/2022/08/1d5f7-2019-09-04-030000.jpg)
在擴充其他輸入數據類型時,需要考慮哪些轉換會改變標籤,哪些不會改變。
![](https://easyai.tech/wp-content/uploads/2022/08/a926e-2019-09-04-030011.jpg)
4:生成一些合成數據。
如果您已經用盡了增加實際數據的選項,那麼您可以開始考慮創建一些虛假數據。生成合成數據也可以是覆蓋真實數據集所不具備的一些邊緣情況的好方法。
例如,許多用於機械人的強化學習系統(如OpenAI的Dactyl)在部署到真實機械人之前在模擬3D環境中進行訓練。對於圖像識別系統,您可以類似地構建可為您提供數千個新數據點的3D場景。
![](https://easyai.tech/wp-content/uploads/2022/08/5a35d-2019-09-04-030027.jpg)
創建合成數據的方法有很多種。在Kanda,我們正在開發一種基於轉盤的解決方案,以創建用於對象檢測的數據。如果您的數據要求非常高,則可以考慮使用Generative Adverserial Networks創建合成數據。請注意,GAN因難以訓練而臭名昭着,因此請確保它首先值得。
![](https://easyai.tech/wp-content/uploads/2022/08/2403d-2019-09-04-0_lLbbgo2Uan5P9ujX.gif)
有時您可以結合使用方法:Apple有一種非常聰明的方法,可以使用GAN處理3D建模面部的圖像,使其看起來更逼真。如果你有時間,擴展數據集的真棒技術。
![](https://easyai.tech/wp-content/uploads/2022/08/52aba-2019-09-04-030116.jpg)
5.小心幸運的分裂。
在訓練機器學習模型時,按照某種比例將數據集隨機分成訓練集和測試集是很常見的。通常,這很好。但是,在處理小型數據集時,由於培訓示例數量較少,因此噪音風險很高。
在這種情況下,您可能會意外地獲得幸運分割:特定數據集分割您的模型將在其中執行並且非常適合於測試集。但實際上,這可能只是因為測試集(巧合)不包含任何困難的例子。
在這種情況下,k-fold交叉驗證是更好的選擇。基本上,您將數據集拆分為k個 「摺疊」並為每個k訓練一個新模型,其中一個摺疊用於測試集,其餘用於訓練。這可以控制您看到的測試性能不僅僅是由於幸運(或不幸)拆分。
![](https://easyai.tech/wp-content/uploads/2022/08/2a7ce-2019-09-04-030127.jpg)
6.使用轉學習。
如果您正在使用某種標準化的數據格式,如文本,圖像,視頻或聲音,您可以利用其他人通過轉移學習將這些領域的所有先前工作。這就像站在巨人的肩膀上。
當您進行轉學習時,您會選擇其他人建立的模型(通常,「其他人」是Google,Facebook或主要大學)並根據您的特定需求對其進行微調。
轉學習是有效的,因為與語言,圖像或聲音有關的大多數任務都有許多共同特徵。對於計算機視覺,它可以是檢測某些類型的形狀,顏色或圖案。
最近,我為具有高精度要求的客戶開發了一個物體檢測原型。通過微調已經在Google的Open Images v4數據集(大約900萬張標記圖像!)上訓練過的MobileNet單發探測器,我能夠極大地加速開發。經過一天的訓練,我能夠使用~1500標記的圖像生成相當穩健的物體檢測模型,其測試mAP為0.85。
![](https://easyai.tech/wp-content/uploads/2022/08/9f0ee-2019-09-04-030142.jpg)
7.嘗試一群「弱學習者」。
有時,您只需面對這樣一個事實,即您沒有足夠的數據來做任何花哨的事情。幸運的是,有許多傳統的機器學習算法可以歸結為對數據集大小不太敏感。
類似的算法 支持向量機 當數據集很小且數據點的維數很高時,這是一個很好的選擇。
不幸的是,這些算法並不總是像最先進的方法那樣準確。這就是為什麼它們可以被稱為「弱學習者」,至少與高度參數化的神經網絡相比。
提高性能的一種方法是將這些「弱學習者」(這可能是一組支持向量機或決策樹)組合在一起,以便它們「協同工作」以產生預測。這就是Ensemble Learning的意義所在。
本文轉自towardsdatascience,原文地址
Comments