雷鋒網 AI 科技評論按:數據增強是提升圖像識別模型性能的重要手段。伯克利 AI 研究院的一篇關於數據增強的論文便被 ICML 2019 收錄為 oral 論文,該論文巧妙地運用基於種群的數據增強算法,在降低計算成本的情況下,既能提高學習數據增強策略的速度,又能提升模型的整體性能。伯克利 AI 研究院也在官方博客上對論文進行了解讀,雷鋒網 AI 科技評論編譯如下。
將基於種群的增強算法應用於圖像上的效果,隨增強百分比的變化情況
在本文中,我們將介紹基於種群的增強算法(Population Based Augmentation,PBA),它能夠快速、高效地學習到一個目前最先進的應用於神經網絡訓練的數據增強方法。PBA 能夠在將速度提升 1000 倍的情況下,達到與之前在 CIFAR 和 SVHN 數據集上最佳的效果,這使得研究者和從業人員可以使用單個工作站的 GPU 有效地學習新的增強策略。研究者可以廣泛地使用 PBA 算法來提升深度學習在圖像識別任務上的性能。
同時,我們將討論我們最新發表的論文「Population Based Augmentation: Efficient Learning of Augmentation Policy Schedules」(論文下載地址:https://arxiv.org/abs/1905.05393.pdf)中 PBA 算法的實驗結果,然後說明如何利用「Tune」(https://ray.readthedocs.io/en/latest/tune.html)框架在新數據集上運行 PBA 算法(https://github.com/arcelien/pba)。
你為什麼需要關注數據增強技術?
近年來,深度學習模型的進步很大程度上歸功於收集到的數據,在數量和多樣性上的增加。數據增強是一種使從業人員在無需實際收集新數據的情況下,能夠顯著提升可用於訓練模型的數據的多樣性的策略。諸如裁剪,填充和水平翻轉等數據增強技術通常被用於訓練大型神經網絡。然而,用於訓練神經網絡的的大多數方法僅僅使用了基本類型的數據增強技術。儘管研究者們已經深入研究了神經網絡架構,但著眼於開發強大的數據增強和能夠捕獲數據不變性的數據增強策略的工作就相對較少了。
數字「3」的原始形式和應用了基本的數據增強技術的結果
最近,谷歌已經能夠通過使用 AutoAugment(一種新型的自動數據增強技術,https://arxiv.org/abs/1805.09501)在諸如 CIFAR-10 之類的數據集上達到目前最高的準確率。AutoAugment 說明了:之前只使用一系列固定變換(如水平翻轉、填充和裁剪)的數據增強方法還有很大的提升空間。AutoAugment引入了 16 種幾何變換和基於顏色的變換,並制定了一種可以最多選擇兩個指定幅度的變換的數據增強策略,從而應用於每批數據。這些具有更高性能的數據增強策略是通過直接在數據上使用強化學習訓練模型學習到的。
有什麼進步?
AutoAugment 是一種計算成本非常大的算法,從開始訓練到收斂需要訓練 15,000 個模型以為基於強化學習的策略生成足夠的樣本。同時,樣本之間不共享計算過程,學習 ImageNet 的增強策略需要在NVIDIA Tesla P100 上訓練 15,000 個 GPU 小時,而學習 CIFAR-10 則需要耗費 5,000 個 GPU 小時。例如,如果使用谷歌雲上按需隨選的 P100 GPU,探索 CIFAR 數據集上的數據增強策略將花費大約 7,500 美元,而探索 ImageNet 數據集上的數據增強策略則需要高達 37,500 美元!因此,在對新數據集進行訓練時,更常見的用例是遷移作者證明效果相對較好的預先存在的已開發出來的策略。
基於種群的數據增強策略(PBA)
我們的數據增強策略搜索方法被稱為「基於種群的增強」(PBA),它在各種神經網絡模型上在將計算成本降低三個數量級的情況下,達到了相似的測試準確度水平。我們通過在 CIFAR-10 數據上訓練幾個小型模型副本來學習數據增強策略,在學習過程中需要使用 NVIDIA Titan XP GPU 訓練 5 個小時。當在大型模型架構和 CIFAR-100 數據上從頭開始進行訓練時,此策略展現出了強大的性能。
相對於訓練大型 CIFAR-10 網絡時動輒花費好幾天才能收斂的計算成本而言,事先運行 PBA 的計算成本就微不足道了,並且在實驗結果上能夠取得顯著的提升。例如,在 CIFAR-10 上訓練一個 PyramidNet 需要在一塊 NVIDIA V100 GPU 上花費超過 7 天的時間,因此學習 PBA 策略僅僅增加了 2% 的預計算訓練時間成本。對於 SVHN 數據及而言,這種成本甚至更低,低於 1%。
在 WideResNet(https://arxiv.org/abs/1605.07146),Shake-Shake(https://arxiv.org/abs/1705.07485),以及 PyramidNet(https://arxiv.org/abs/1610.02915)+ShakeDrop(https://arxiv.org/abs/1802.02375)模型上運用 PBA、AutoAugment 以及僅僅使用水平翻轉、填充和裁剪等操作的對比基線時,各自在 CIFAR-10 測試集上產生的誤差。
PBA 利用基於種群的訓練算法(若想了解更多關於該算法的信息,可前往 https://deepmind.com/blog/population-based-training-neural-networks/閱讀相關內容)來生成一個增強策略計劃,它可以根據當前訓練的迭代情況進行自適應的調整。這與沒有考慮當前訓練迭代情況而應用相同的變換方式的固定增強策略,形成了鮮明對比。
這就使得一個普通的工作站用戶可以很容易地使用搜索算法和數據增強操作進行實驗。一個有趣的用例是引入一個新的數據增強操作,它可能針對的是特定的數據集或圖像模態,可以迅速生成一個定製化的、高性能的數據增強計劃。通過模型簡化實驗,我們發現學到的超參數和計劃順序對於得到好的實驗結果非常重要。
如何學習到數據增強計劃?
我們使用了基於種群的訓練,該種群由 16 個小型 WideResNet 模型構成。種群中的每個個體會學習到不同的候選超參數計劃。我們將性能最佳的計劃進行遷移,從而從頭開始訓練更大的模型,而我們將從中得到測試誤差指標。
基於種群的訓練示意圖,它通過訓練一個神經網路的種群來探索超參數計劃。它將隨機搜索(探索)和拷貝高性能個體的模型權重(利用)結合起來(https://deepmind.com/blog/population-based-training-neural-networks/)。
我們在感興趣的數據集上訓練種群模型,一開始將所有的增強超參數設置為「0」(不應用任何數據增強技術)。通常而言,一個「探索-利用」過程會通過將高性能個體的模型權重拷貝給性能較低的個體來「利用」高性能個體,並且會通過擾動個體的超參數來進行「探索」。通過這個過程,我們可以讓個體之間大量共享超參數,並且在訓練的不同區域針對於不同的增強超參數。因此,PBA 可以節省訓練上千個模型才能達到收斂以實現高性能的計算成本。
示例和代碼
我們使用了「TUNE」內置的 PBT 的實現來直接使用 PBA 算法。
我們使用自定義的探索函數來調用「Tune」對 PBT 的實現,而這將會創建出 16 份 WideResNet 模型的副本,並且在時分多工模式下訓練它們。每個模型副本使用的策略計劃將會被保存到磁碟中,並且可以再程序終止後被檢索,用於訓練新模型。
感興趣的人可以按照 Github 中「README」文件的指示運行 PBA 算法,地址如下:
https://github.com/arcelien/pba
在一塊 Titan XP 顯卡上,你只需一個小時就可以學到一個作用於 SVHN 數據集的高性能數據增強策略計劃。你也可以很輕易地在自定義的數據集上使用 PBA 算法:只需簡單定義一個數據加載器(dataloader),其它的部分就會自動就緒。
參考文獻
ICML 2019 oral 論文:Population Based Augmentation: Efficient Learning of Augmentation Policy Schedules
論文作者:Daniel Ho, Eric Liang, Ion Stoica, Pieter Abbeel, Xi Chen論文連結:https://arxiv.org/abs/1905.05393代碼連結:https://github.com/arcelien/pbaVia https://bair.berkeley.edu/blog/2019/06/07/data_aug/ 雷鋒網