Skip to main content

正負分解技巧 (The Positive-Negative Decomposition Trick)

在進行數學最佳化時,像 x|x| 這樣的絕對值函數項目非常令人困擾,因為它們呈現 "V" 字形——在零的位置會突然改變方向,這代表它們在零點是不可微 (non-differentiable) 的。而大多數標準、快速的最佳化演算法都需要平滑、可微的曲線。

克服絕對值的難題

要在保留原問題的前提下移除 x|x|,我們將任何實數分解為兩個都是正數的組成部分:它的「正數部分」(x+x^+) 和它的「負數部分」(xx^-)。

  • 如果 x=5x = 5,那麼 x+=5x^+ = 5x=0x^- = 0
  • 如果 x=3x = -3,那麼 x+=0x^+ = 0x=3x^- = 3

請注意這兩種理想情況下的共通點:

  1. x=x+xx = x^+ - x^-
  2. x=x++x|x| = x^+ + x^-

這個轉換完美地將絕對值取代為單純的加法,但它的前提是 至少其中一個變數必須是零

如果我們耍詐,用 x+=10,x=5x^+ = 10, x^- = 5 來代表 x=5x=5,那麼 x++x=15x^+ + x^- = 15,這並不等於 x=5|x| = 5

最佳化器的貪婪本性

為什麼我們能保證最佳化器不會耍詐?

因為最佳化器試圖尋找的是 最小 成本!λ(θi++θi)\lambda (\theta^+_i + \theta^-_i) 這一項相當於一種罰款 (penalty)。如果最佳化器選擇 θi+=10,θi=5\theta^+_i = 10, \theta^-_i = 5,它將支付巨大的罰款 15λ15\lambda

如果它將兩者各減去 55,變成 θi+=5,θi=0\theta^+_i = 5, \theta^-_i = 0,預測結果會是一模一樣的(因為 50=1055-0 = 10-5),但罰款會嚴格下降到 5λ5\lambda。最佳化器是「懶惰」且貪婪的;能夠花 55 塊錢做到同樣的預測效果時,它絕對不會選擇花 1515 塊錢。

因此,最佳化器在數學上保證了兩部分中一定有一個會嚴格收斂到零,這就相當於用互斥的正斜率直線巧妙地取代了帶有尖角的絕對值圖形。