論文: Improved Training Speed, Accuracy, and Data Utilization Through Loss Function Optimization
簡介
該論文的主要貢獻是提出了Genetic Loss-function Optimization (GLO) 框架來搜索新的損失函數。該框架可以分成層兩個如下圖示的兩個階段:
- 搜索loss函數的形式:比如
- 優化loss函數的係數:即優化上面例子中的這三個係數,其中分別表示真實和預測值。
搜索損失函數
GLO使用population-based的進化搜索策略,損失函數被編碼成樹結構。樹節點上的操作從如下的搜索空間總進行搜索:
- Unary operators:
- Binary operators:
- Leaf nodes: , 其中分別表示真實和預測值。
這三類操作的權重比例是: Unary : Binary : leaf= 3 : 2 : 1
搜索過程中出現如下情況的樹,其fitness會被賦值爲0
- 一顆樹中不同時包含至少有一個x和y
- 模型訓練過程中出現NaN
Crossover
樹結構的crossover的方式是對於給定的兩個parent trees, 分別隨機選擇一個節點作爲crossover point。那麼以crossover point作爲根節點可以得到兩個subtrees。那麼crossover其實就是按照一定概率交換這兩個subtrees, 論文中給出的概率是80%。
如下圖示,上面兩個是parent trees,紅色直線截取位置的節點即爲crossover point,在crossover之後即可得到下面的樹結構。
Mutation
Mutation操作如下:
優化損失函數係數
搜索到損失函數表達式後,每個節點的係數都默認爲1,如下圖示。很顯然需要優化係數數等於節點數,但是其實通過表達式簡化可以減少需要優化的係數數,比如 ,原本需要優化3個係數,現在只需要優化一個了。具體的優化算法採用的是 協方差矩陣自適應進化算法(CMA-ES) [1],論文裏對這個算法沒有細節的介紹,建議看看這個博文,寫的淺顯易懂。
實驗評估
論文中採用了MNIST和CIFAR-10作爲測試數據集,並且將搜索到的損失函數命名爲 Baikal,意思是貝加爾湖,文中的解釋是因爲它的形狀像貝加爾湖hhh,函數表達式如下:
使用CMA-ES算法搜索到的係數如下:
其中
在MNIST數據集上的平均實驗結果(10個模型)如下:
- Testing accuracy
Loss function | Accuracy |
---|---|
Crossentropy | 0.9899 |
Baikal | 0.9933 |
BaikalCMA | 0.9947 |
- Training speed
- Training data requirements
- 遷移至CIFAR-10的結果
分析:爲什麼Baikal損失函數更優?
爲了方便分析爲什麼Baikal損失函數效果更好,這裏以二分類爲例進行介紹
下圖展示了時Baikal損失函數2D可視化,可以看到當預測值趨近於真實值(即1)的時候,交叉熵損失單調遞減;而對於Baikal函數,當預測值非常接近於真實值的時候,loss值反而會上升,這可能有點反直覺,但是這樣的好處時可以避免模型對自己的預測太過於自信,因此也可以理解成一種正則化。
參考文獻
- [1] N. Hansen and A. Ostermeier, “Adapting arbitrary normal mutation distributions in evolution strategies: The covariance matrix adaptation,” in Proceedings of IEEE international conference on evolutionary computation.IEEE, 1996, pp. 312–317.
微信公衆號:AutoML機器學習
MARSGGBO♥原創
如有意合作或學術討論歡迎私戳聯繫~
郵箱:[email protected]
2020-11-18 09:03:50