AutoAugment:
Learning Augmentation Strategies from Data論文筆記
===
###### tags: `Note`
:::info
:::spoiler click to open TOC
[TOC]
:::

## 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)

- 定義好一個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包含兩個參數:使用機率和使用強度
- 強度是一個固定而非可變的數值,為了避免學習過程中的噪音影響學習效果,否則在每次的學習過程中,模型都必須重新適應新的強度,導致學習效果不穩定

- 使用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

