Machine-Learning

機器學習中的損失函數——如何約束?

  • April 30, 2020

我的損失有兩個部分,比如 L1 和 L2。我想最小化兩者,同時我需要限制 L1 應該始終大於 L2(L1>L2)。以下是正確的嗎?

損失 = L2 - L1

這並不完全符合您的要求,但它是一個非常容易在 keras、tensorflow 和 pytorch 等神經網絡庫中實現的解決方案。

主要思想是在不等式時懲罰損失 $ L_1 > L_2 $ 被違反。每當違反這個不等式 $ L_2 \ge L_1 $ ;另一方面,我們根本不想懲罰損失,當 $ L_1 > L_2 $ . 這描述了一個 ReLU 函數 $ L_1, L_2 $ :

$$ \min L_1 + L_2 + \lambda\text{ReLU}(L_2 - L_1) $$

超參數 $ \lambda>0 $ 控制違反不等式的懲罰應該有多陡。

這種損失並不能保證滿足不等式,但它是對最小化的改進 $ L_1 + L_2 $ 獨自的。

這種損失只是現代神經網絡庫中現成的函數的組合,因此很容易實現。

在評論中,jkpate提出以下建議:

請注意,如果您合併一個最大化 $ \lambda $ ,那麼我們確實得到了發帖人所要求的內容,因為我們現在有一個原始約束優化問題的拉格朗日對偶的兩人公式。本質上,而不是設置 $ \lambda $ 被修復,我們允許對違規行為的處罰增加。參見Cotter 等人。“Two-Player Games for Efficient Non-Convex Constrained Optimization”(2019 年)的理論和https://github.com/google-research/tensorflow_constrained_optimization的 Tensorflow 實現。

如果我理解正確,這允許估計程序選擇一個好的值 $ \lambda $ ,而不是用戶提前固定一個特定的值並擔心該固定值是否是一個好的選擇。

引用自:https://stats.stackexchange.com/questions/463751

comments powered by Disqus