通過損失函數優化提高訓練速度、準確性和數據利用率

論文: 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 functionAccuracy
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章