AutoAugment: Learning Augmentation Strategies from Data論文筆記 === ###### tags: `Note` :::info :::spoiler click to open TOC [TOC] ::: ![](https://i.imgur.com/obvLdyO.png) ## Introduction - Google Brain於2019在CVPR發表 - [CVPR報告影片](https://www.youtube.com/watch?v=KHEknuuCz0E&ab_channel=ComputerVisionFoundationVideos) - 該論文發布了一個Search Algorithm,在Search Space中尋找對當前Dataset最適合的Policy - 最適合即為可使模型Accuracy最大化 - 一個Policy包含五個Sub-Policy,一個Sub-Policy包含兩個Operation - 一個Operation即為一個Augumentation函數,例如旋轉、平移等 - 一個Operation包含兩個Hyper parameter,執行強度和機率 - 其中,強度分為十個等級 - 機率分為十一個等級(包含零) ## Related Work ### Augmentation - 由於在絕大多數情況下我們能取得的資料數量都是有限的 - 然而,現實世界中,我們的影像常因光線、角度等環境因素,造成影像具有極高的變化性。同一種物體也可能在環境影響下產生無限種變化 - 為了在有限資源訓練出泛化度夠高,可以處理真實世界情況的模型,Augumentation是一種常用的方法。它透過對原有的影像進行旋轉、翻轉、彩度變化或高斯模糊等變化,產生新的資料,藉此擴增原有Dataset - 直觀來說,Augmentation透過對圖片進行簡單的轉換,來使新圖片和原圖片有些微不同,藉此教導模型學習其中的不變性 - 我們亦可將對圖片進行簡單轉換的工作寫死在模型中 - e.g.從卷積網路的數學性質來看,已經內建平移的效果 - 不過這樣的方法遠沒有Augmentation具有泛化性和可操作性 ### 強化學習 - 一種機器學習策略,旨在從機器與環境的互動中得到反饋並進行學習,並自我進步。 - 分為幾個部分 - Enviroment:恩對就是環境 - State:目前機器的狀態 - Action/Policy:機器根據目前狀態所做出的行為 - Reward:機器做出的行為所得到的反饋 - Value Function:將Reward數值化,轉換成模型可接收的形式。RL的目標之一即為最佳化此Valu Function #### PPO - 一種RL的方法,概念上是透過限制新行為和舊行為之間的差異性,保證每次行為所獲得的反饋是安全的。解決了過去RL進步方向不穩定的問題 ## Problem - 在許多已經經過仔細處理的Dataset中,專家們已經發現了適合它們的Augumentation - e.g.MNIST中,大多數e.g.MNIST中,大多數top-ranked的模型使用扭曲(elastic distortions)、平移(translation)、縮放(scale)、旋轉(rotation)。 - e.g.CIFAR-10通常使用隨機剪裁(random cropping)、鏡像變換(image mirroring)、顏色偏移(color shifting)、白話( whitening)。 - 不過要發現這些合適的Augumentation通常需要耗費許多的時間和心力,甚至是深厚的專業背景知識 - 在一個Dataset已經被證明有效的Augumentation,不一定移植到另一組Dataset也一樣有效 - e.g.對於動物分類任務,上下or水平翻轉可能是很有效的Augumentation。但如果你在MNIST上使用這個,模型大概會很Confuse ## Propose Method - AutoAugumentation - 輸入一組Dataset,輸出一組有效的Augumentation組合 - 包含順序,先旋轉再平移和先平移再旋轉是不相同的 - 包含機率,如果我們設定每次使用Augunemtation皆有特定機率,則可以使Augumentation的變化性提高到最大 - 假如在目標數據集上直接使用此方法太為昂貴,此論文找出了一個方法使模型學習如何轉移Augumentation - 使用強化學習作為Search Algorithm - 作者有特別說明,他們使用強化學習單純為了方便。他們認為使用進化學習或基因演算法都有可能達到更好的效果 #### 搜尋算法(RNN) ![](https://i.imgur.com/LvjSqTU.png) - 定義好一個Child network - 例如一個圖片分類模型 - RNN Controller產生一個策略S - 包含使用甚麼Operation、使用的機率、使用的強度 - 用S去訓練Child network,並得出Accuracy R - 使用Accuracy R作為loss更新RNN controller - 注意,因為R是單一一個Policy的Accuracy,而Policy是一個離散的操作,因此此處的R是不可微分的 - 因此使用policy gradient方法 - 因為強化學習中的時常基於策略梯度作為loss,因此許多時候它的loss function是離散不可微的,因此透過一次性產生大量策略,對每個策略進行評估以估計優劣來進行反饋 - 使用PPO作為強化學習演算法 - Learning rate為0.00035 - 在每一個Batch中,透過強化學習所得到各子策略的分數,透過softmax產生機率向量,再透過此機率向量選擇下一個batch所要使用的子策略 - RNN架構使用LSTM,Controller中包含兩個卷積單元,在每一次的mini-batch中總共會透過softmax產生2*5B(B通常是5)組機率向量,在由這些機率向量中找出這一次要進行的Sub-policy - 最後根據RNN Controller的分數選出前五個Sub-policy #### Search Space - 一個Policy包含五個sub-policy - 一個sub-policy包含兩個operation - 一個operation包含兩個參數:使用機率和使用強度 - 強度是一個固定而非可變的數值,為了避免學習過程中的噪音影響學習效果,否則在每次的學習過程中,模型都必須重新適應新的強度,導致學習效果不穩定 ![](https://i.imgur.com/4odGOZi.png) - 使用PIL中所有可接受圖片作為輸入的函式,以確保其具有普適性 - 總共有16種Operation,分別為TranslateX/Y, Rotate, AutoContrast, Invert, Equalize, Solarize, Posterize, Contrast, Color, Brightness, Sharpness, Cutout, Sample Pairing - 沒有Identity因為它和機率為零時的任何操作等價 - 強度分為十個區間,機率分為十一個區間(包含零) - 因此總共有$(16*10*11)^2$種Sub-policy - $(16*10*11)^{10}$種policy ### Experiment ![](https://i.imgur.com/K8Z5Bxn.png) ![](https://i.imgur.com/DwzDDac.png =360x)![](https://i.imgur.com/D782V4E.png =360x)