2016-11-22 122 views
2
  1. 在張量流中,您可以使用非光滑函數作爲損失函數,如分段(或if-else)?如果你不能,爲什麼你可以使用ReLU?非光滑和非微分定製損失函數tensorflow

  2. 在這個環節 SLIM ,它說

「例如,我們可能希望儘量減少日誌的損失,但我們感興趣的指標可能是F1的分數,或交集在聯盟得分(這不可區分,因此不能用作損失)「。

這是否意味着「不可微分」,比如設置問題?因爲對於ReLU,在0點,它是不可區分的。

  1. 如果您使用這種自定義的損失函數,是否需要自己實現梯度?或tensorflow可以自動爲你做到嗎?我檢查了一些定製的損失函數,他們沒有爲失效函數實現梯度。
+0

也正在尋找#3的答案。感謝大問題 –

回答

6

問題不在於損失是分段還是非平穩。問題是我們需要一個損失函數,當輸出和預期輸出之間出現錯誤時,可以向網絡參數(dloss/dparameter)發送非零梯度。這適用於幾乎在模型內部使用的任何功能(例如損失功能,激活功能,注意功能)。

例如,感知器使用一個unit step H(x)作爲激活函數(H(x)= 1,如果x> 0 else 0)。因爲H(x)的導數總是爲零(在x = 0時未定義),所以沒有來自損失的梯度將通過它返回到權重(鏈規則),因此網絡中的該函數之前沒有權重可以更新使用梯度下降。基於此,梯度下降不能用於感知器,但可用於使用激活函數的常規神經元(因爲所有x的梯度不爲零)。

對於Relu,對於x> 0,導數爲1,否則爲0。雖然導數在x = 0時是未定義的,但當x> 0時,我們仍然可以通過它反向傳播損失梯度。這就是它可以被使用的原因。

這就是爲什麼我們需要一個具有非零梯度的損失函數。像精度和F1這樣的函數在任何地方都沒有梯度(或者在x的某些值處未定義),所以它們不能使用,而像交叉熵L2L1這樣的函數具有非零梯度,因此可以使用它們。 (請注意,L1「絕對差值」在x = 0時是分段式的並不平滑,但仍然可以使用)

如果您必須使用不符合上述標準的功能,請嘗試reinforcement learning methods政策梯度)。

+0

但是,直觀地說,只要它嚴格地在零和一之間,相交超越聯合應該可以用非零梯度來區分。 – gmr

+1

IoU的工作方式是將交點中的像素數除以聯合中的像素數。在這種情況下,由於像素數量是離散的,因此它不應該是可微分的。如果我們使用邊界框的實值座標,我相信IoU將是可微的。此外,[本文](http://www.cs.umanitoba.ca/~ywang/papers/isvc16.pdf)提出了一種通過修改像素以使像素處於可能性的可能性來使基於像素的IoU可微分的方法某個類別。 –

0

就OP問題#3而言,你實際上不必自己實現梯度計算。 Tensorflow將爲您做到這一點,這是我喜歡的事情之一!