AutoML - 数据增广
打開百度App,看更多圖片
DeepAugment是一個(gè)專注于數(shù)據(jù)擴(kuò)充的自動(dòng)化工具。 它利用貝葉斯優(yōu)化來(lái)發(fā)現(xiàn)針對(duì)您的圖像數(shù)據(jù)集定制的數(shù)據(jù)增強(qiáng)策略。 DeepAugment的主要優(yōu)點(diǎn)和特點(diǎn)是:
降低CNN模型的錯(cuò)誤率(WRN-28-10顯示CIFAR10的錯(cuò)誤率降低了60%)通過(guò)自動(dòng)化流程可以節(jié)省時(shí)間比谷歌之前的解決方案——AutoAugment——快50倍完成的包在PyPI上。你可以通過(guò)運(yùn)行以下命令來(lái)在終端上安裝它:
你也可以訪問(wèn)項(xiàng)目的自述文件或運(yùn)行谷歌Colab筆記本教程。要想了解更多關(guān)于我是如何構(gòu)建這個(gè)的,請(qǐng)繼續(xù)閱讀!
引言
數(shù)據(jù)是人工智能應(yīng)用中最關(guān)鍵的部分。沒(méi)有足夠的標(biāo)記數(shù)據(jù)常常導(dǎo)致過(guò)度擬合,這意味著模型將無(wú)法歸納為未發(fā)現(xiàn)的示例。這可以通過(guò)數(shù)據(jù)擴(kuò)充來(lái)緩解,數(shù)據(jù)擴(kuò)充可以有效地增加網(wǎng)絡(luò)所看到的數(shù)據(jù)的數(shù)量和多樣性。它是通過(guò)對(duì)原始數(shù)據(jù)集(如旋轉(zhuǎn)、裁剪、遮擋等)應(yīng)用轉(zhuǎn)換,人為地生成新數(shù)據(jù)來(lái)實(shí)現(xiàn)的。然而,確定哪種增強(qiáng)對(duì)手頭的數(shù)據(jù)集最有效并不是一項(xiàng)簡(jiǎn)單的任務(wù)。為了解決這個(gè)問(wèn)題,谷歌去年發(fā)布了AutoAugment,它通過(guò)使用強(qiáng)化學(xué)習(xí)發(fā)現(xiàn)了給定數(shù)據(jù)集的優(yōu)化增強(qiáng)。
由于強(qiáng)化學(xué)習(xí)模塊的存在,使用谷歌的AutoAugment需要強(qiáng)大的計(jì)算資源。由于獲得所需的計(jì)算能力代價(jià)高昂,因此我開發(fā)了一種新的方法——DeepAugment,它使用貝葉斯優(yōu)化而不是強(qiáng)化學(xué)習(xí)。
如何獲得更好的數(shù)據(jù)
努力改進(jìn)數(shù)據(jù)質(zhì)量通常比努力改進(jìn)模型獲得更高的投資回報(bào)。改進(jìn)數(shù)據(jù)有三種主要方法:收集更多的數(shù)據(jù)、合成新數(shù)據(jù)或擴(kuò)展現(xiàn)有數(shù)據(jù)。收集額外的數(shù)據(jù)并不總是可行的,而且可能很昂貴。GANs所做的數(shù)據(jù)合成是很有前途的,但也很復(fù)雜,可能與實(shí)際的例子有所不同。
另一方面,數(shù)據(jù)擴(kuò)充簡(jiǎn)單且影響很大。它適用于大多數(shù)數(shù)據(jù)集,并通過(guò)簡(jiǎn)單的圖像轉(zhuǎn)換完成。然而,問(wèn)題是確定哪種增強(qiáng)技術(shù)最適合當(dāng)前的數(shù)據(jù)集。發(fā)現(xiàn)正確的方法需要耗時(shí)的實(shí)驗(yàn)。即使經(jīng)過(guò)多次實(shí)驗(yàn),機(jī)器學(xué)習(xí)(ML)工程師仍然可能找不到最佳選擇。
對(duì)于每個(gè)圖像數(shù)據(jù)集,有效的增強(qiáng)策略是不同的,一些增強(qiáng)技術(shù)甚至可能對(duì)模型有害。例如,如果使用MNIST digits數(shù)據(jù)集,應(yīng)用旋轉(zhuǎn)會(huì)使模型變得更糟,因?yàn)樵凇?”上180度旋轉(zhuǎn)會(huì)使它看起來(lái)像“9”,而仍然被標(biāo)記為“6”。另一方面,對(duì)衛(wèi)星圖像應(yīng)用旋轉(zhuǎn)可以顯著改善結(jié)果,因?yàn)闊o(wú)論旋轉(zhuǎn)多少次,從空中拍攝的汽車圖像仍然是一輛汽車。
DeepAugment:閃電般迅速的autoML
DeepAugment旨在作為一種快速靈活的autoML數(shù)據(jù)擴(kuò)充解決方案。更具體地說(shuō),它被設(shè)計(jì)為AutoAugment的更快和更靈活的替代品。(2018年Cubuk等人的博客)AutoAugment是2018年最令人興奮的發(fā)布之一,也是第一種使用強(qiáng)化學(xué)習(xí)來(lái)解決這一特定問(wèn)題的方法。在本文發(fā)表時(shí),AutoAugment的開源版本沒(méi)有提供控制器模塊,這阻礙了用戶為自己的數(shù)據(jù)集使用它。此外,學(xué)習(xí)增強(qiáng)策略需要15,000次迭代,這需要巨大的計(jì)算資源。即使源代碼完全可用,大多數(shù)人也無(wú)法從中受益。
deepaugmented通過(guò)以下設(shè)計(jì)目標(biāo)來(lái)解決這些問(wèn)題:
在保證結(jié)果質(zhì)量的前提下,最小化數(shù)據(jù)擴(kuò)充優(yōu)化的計(jì)算復(fù)雜度。模塊化和人性化。為了實(shí)現(xiàn)第一個(gè)目標(biāo),與AutoAugment相比,DeepAugment的設(shè)計(jì)具有以下差異:使用貝葉斯優(yōu)化代替強(qiáng)化學(xué)習(xí)(需要更少的迭代)(~100x加速)最小化子模型大小(降低每次訓(xùn)練的計(jì)算復(fù)雜度)(~20x加速)減少隨機(jī)擴(kuò)充搜索空間設(shè)計(jì)(減少所需的迭代次數(shù))為了實(shí)現(xiàn)第二個(gè)目標(biāo),即使DeepAugment模塊化和人性化,用戶界面的設(shè)計(jì)方式為用戶提供了廣泛的可能性配置和模型選擇(例如,選擇子模型或輸入自設(shè)計(jì)的子模型,請(qǐng)參閱配置選項(xiàng))。
設(shè)計(jì)擴(kuò)充策略
DeepAugment旨在為給定的圖像數(shù)據(jù)集找到最佳的擴(kuò)充策略。增強(qiáng)策略被定義為五個(gè)子策略的總和,這兩個(gè)子策略由兩種類型的增強(qiáng)技術(shù)和兩個(gè)實(shí)值[0,1]組成,決定了每種增強(qiáng)技術(shù)的應(yīng)用能力。我使用imgaug包實(shí)現(xiàn)了增強(qiáng)技術(shù),imgaug包以其大量的增強(qiáng)技術(shù)(見下文)而聞名。
當(dāng)多樣化和隨機(jī)應(yīng)用時(shí),增強(qiáng)是最有效的。例如,與其旋轉(zhuǎn)每個(gè)圖像,不如旋轉(zhuǎn)圖像的某些部分,剪切另一部分,然后對(duì)另一部分應(yīng)用顏色反轉(zhuǎn)。基于這一觀察,Deepaugment對(duì)圖像隨機(jī)應(yīng)用五個(gè)子策略之一(包括兩個(gè)增強(qiáng))。優(yōu)化過(guò)程中,每個(gè)圖像被五個(gè)子策略之一增強(qiáng)的概率(16%)相等,而完全不被增強(qiáng)的概率為20%。雖然這個(gè)策略設(shè)計(jì)受到了autoaugmented的啟發(fā),但有一個(gè)主要的區(qū)別:我沒(méi)有使用任何參數(shù)來(lái)應(yīng)用子策略的概率,以便使策略的隨機(jī)性更低,并允許在更少的迭代中進(jìn)行優(yōu)化。
這個(gè)策略設(shè)計(jì)為貝葉斯優(yōu)化器創(chuàng)建了一個(gè)20維的搜索空間,其中10個(gè)維度是分類(增強(qiáng)技術(shù)的類型),其他10個(gè)維度是實(shí)值(大小)。由于涉及到分類值,我將貝葉斯優(yōu)化器配置為使用隨機(jī)森林估計(jì)器。
DeepAugment如何找到最佳策略
DeepAugment的三個(gè)主要組件是控制器(貝葉斯優(yōu)化器),增強(qiáng)器和子模型,整個(gè)工作流程如下:控制器采樣新的增強(qiáng)策略,增強(qiáng)器按新策略轉(zhuǎn)換圖像,子模型是通過(guò)增強(qiáng)圖像從頭開始訓(xùn)練。
根據(jù)子模型的訓(xùn)練歷史計(jì)算獎(jiǎng)勵(lì)。獎(jiǎng)勵(lì)返回給控制器,控制器使用此獎(jiǎng)勵(lì)和相關(guān)的增強(qiáng)策略更新代理模型(請(qǐng)參閱下面的“貝葉斯優(yōu)化如何工作”一節(jié))。然后控制器再次采樣新策略,并重復(fù)相同的步驟。此過(guò)程循環(huán),直到達(dá)到用戶確定的最大迭代次數(shù)。
控制器(貝葉斯優(yōu)化器)是使用scikit- optimization庫(kù)的ask-and-tell方法實(shí)現(xiàn)的。它被配置為使用一個(gè)隨機(jī)森林估計(jì)器作為其基本估計(jì)器,并期望改進(jìn)作為其獲取函數(shù)。
DeepAugment的基本工作流程
貝葉斯優(yōu)化是如何工作的
貝葉斯優(yōu)化的目的是找到一組最大化目標(biāo)函數(shù)值的參數(shù)。 貝葉斯優(yōu)化的工作循環(huán)可以概括為:1.建立目標(biāo)函數(shù)的代理模型2.查找代理上執(zhí)行得最好的參數(shù)3.使用這些參數(shù)執(zhí)行目標(biāo)函數(shù)4.使用這些參數(shù)和目標(biāo)函數(shù)的得分更新代理模型5.重復(fù)步驟2-4,直到達(dá)到最大迭代次數(shù)
有關(guān)貝葉斯優(yōu)化的更多信息,請(qǐng)閱讀高級(jí)的這篇解釋的博客,或者看一下這篇綜述文章。
貝葉斯優(yōu)化的二維描述,其中x和y軸表示增強(qiáng)類型,點(diǎn)(i,j)處的顏色表示用增強(qiáng)i和j所增強(qiáng)的數(shù)據(jù)進(jìn)行訓(xùn)練時(shí)CNN模型的精度。
貝葉斯優(yōu)化的權(quán)衡
目前用于超參數(shù)優(yōu)化的標(biāo)準(zhǔn)方法有隨機(jī)搜索、網(wǎng)格搜索、貝葉斯優(yōu)化、進(jìn)化算法和強(qiáng)化學(xué)習(xí),按方法復(fù)雜度排序。在超參數(shù)優(yōu)化的精度、成本和計(jì)算時(shí)間方面,貝葉斯優(yōu)化優(yōu)于網(wǎng)格搜索和隨機(jī)搜索(參見這里的經(jīng)驗(yàn)比較)。這是因?yàn)樨惾~斯優(yōu)化從先前參數(shù)的運(yùn)行中學(xué)習(xí),與網(wǎng)格搜索和隨機(jī)搜索相反。
當(dāng)貝葉斯優(yōu)化與強(qiáng)化學(xué)習(xí)和進(jìn)化算法進(jìn)行比較時(shí),它提供了具有競(jìng)爭(zhēng)力的準(zhǔn)確性,同時(shí)需要更少的迭代。例如,為了學(xué)習(xí)好的策略,谷歌的AutoAugment迭代15,000次(這意味著訓(xùn)練子CNN模型15,000次)。另一方面,貝葉斯優(yōu)化在100-300次迭代中學(xué)習(xí)良好的策略。貝葉斯優(yōu)化的經(jīng)驗(yàn)法則是使迭代次數(shù)等于優(yōu)化參數(shù)的次數(shù)乘以10。
超參數(shù)優(yōu)化方法的直觀比較。通過(guò)比較類別,加號(hào)(+)的數(shù)量表示該方法有多好。
挑戰(zhàn)及對(duì)策
挑戰(zhàn)1:優(yōu)化增強(qiáng)需要大量的計(jì)算資源,因?yàn)樽幽P蛻?yīng)該從頭開始反復(fù)訓(xùn)練。大大減慢了我的工具的開發(fā)過(guò)程。 盡管使用貝葉斯優(yōu)化使其更快,但優(yōu)化過(guò)程仍然不夠快,無(wú)法使開發(fā)變得可行。
對(duì)策:我開發(fā)了兩種解決方案。首先,我優(yōu)化了子CNN模型(見下圖),這是該過(guò)程的計(jì)算瓶頸。其次,我以更確定的方式設(shè)計(jì)了增強(qiáng)策略,使貝葉斯優(yōu)化器需要更少的迭代。
設(shè)計(jì)子CNN模型。它在AWS p3.2x大型實(shí)例(帶有112 TensorFLOPS的Tesla V100 GPU)上以32x32圖像在約30秒(120個(gè)周期)的時(shí)間內(nèi)完成培訓(xùn)。
挑戰(zhàn)2:我在DeepAugment的開發(fā)過(guò)程中遇到了一個(gè)有趣的問(wèn)題。在通過(guò)一遍又一遍地訓(xùn)練子模型來(lái)優(yōu)化增強(qiáng)期間,它們開始過(guò)度擬合驗(yàn)證集。當(dāng)我更改驗(yàn)證集時(shí),我發(fā)現(xiàn)的最佳策略表現(xiàn)不佳。這是一個(gè)有趣的例子,因?yàn)樗煌谝话阋饬x上的過(guò)度擬合,即模型權(quán)重過(guò)度擬合數(shù)據(jù)中的噪聲。
對(duì)策:我沒(méi)有使用相同的驗(yàn)證集,而是將剩余的數(shù)據(jù)和訓(xùn)練數(shù)據(jù)保留為“種子驗(yàn)證集”,并在每次子CNN模型訓(xùn)練時(shí)對(duì)1000個(gè)圖像的驗(yàn)證集進(jìn)行采樣(參見下面的數(shù)據(jù)管道)。這解決了增強(qiáng)過(guò)度擬合問(wèn)題。
如何集成到ML pipeline中
DeepAugment發(fā)布在PyPI上。你可以通過(guò)運(yùn)行以下命令來(lái)在終端安裝它:
并且使用方便:
通過(guò)配置DeepAugment,可以獲得更高級(jí)的用法:
有關(guān)更詳細(xì)的安裝/使用信息,請(qǐng)?jiān)L問(wèn)項(xiàng)目的自述文件或運(yùn)行Google Colab筆記本教程。
結(jié)論
據(jù)我們所知,DeepAugment是第一種利用貝葉斯優(yōu)化來(lái)尋找最佳數(shù)據(jù)增強(qiáng)的方法。 數(shù)據(jù)增強(qiáng)的優(yōu)化是最近的一個(gè)研究領(lǐng)域,AutoAugment是解決這一問(wèn)題的首批方法之一。
Deepaugment對(duì)開源社區(qū)的主要貢獻(xiàn)在于它使進(jìn)程具有可擴(kuò)展性,允許用戶在不需要大量計(jì)算資源的情況下優(yōu)化擴(kuò)充策略*。它是非常模塊化的,比以前的解決方案AutoAugment快50倍以上。
WideResNet-28-10 CNN模型與CIFAR10圖像在被Deepaugment發(fā)現(xiàn)的策略增強(qiáng)和不增強(qiáng)時(shí)的驗(yàn)證精度比較驗(yàn)證精度提高8.5%,相當(dāng)于減少了60%的誤差。
結(jié)果表明,使用CIFAR-10小圖像數(shù)據(jù)集的WideResNet-28-10模型與不使用增強(qiáng)的模型和數(shù)據(jù)集相比,Deepaugment可以減少60%的誤差。
Deepaugment目前只優(yōu)化圖像分類任務(wù)的增強(qiáng)。它可以擴(kuò)展到優(yōu)化對(duì)象檢測(cè)或分割任務(wù),如果你愿意,我歡迎你的貢獻(xiàn)。但是,我認(rèn)為最好的增強(qiáng)策略非常依賴于數(shù)據(jù)集的類型,而不是任務(wù)(例如分類或?qū)ο髾z測(cè))。這意味著無(wú)論任務(wù)是什么,AutoAugment都應(yīng)該找到類似的策略,但如果這些策略最終變得非常不同,那將是非常有趣的!
雖然DeepAugment目前適用于圖像數(shù)據(jù)集,但將其擴(kuò)展到文本、音頻或視頻數(shù)據(jù)集將非常有趣。同樣的概念也適用于其他類型的數(shù)據(jù)集。
*使用AWS P3.X2Large實(shí)例,DeepAugment在CIFAR-10數(shù)據(jù)集上花費(fèi)4.2小時(shí)(500次迭代),成本約為13美元。
?
總結(jié)
以上是生活随笔為你收集整理的AutoML - 数据增广的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一步步解析Attention is Al
- 下一篇: AutoML:机器学习的下一波浪潮