Entropy
如何計算對數損失的梯度和粗麻布?(問題基於來自 xgboost 的 github 存儲庫的 numpy 示例腳本)
我想了解如何在xgboost 示例腳本中計算 logloss 函數的梯度和粗麻布。
我已經簡化了獲取 numpy 數組的函數,並生成了這些數組
y_hat
,y_true
它們是腳本中使用的值的示例。這是簡化的示例:
import numpy as np def loglikelihoodloss(y_hat, y_true): prob = 1.0 / (1.0 + np.exp(-y_hat)) grad = prob - y_true hess = prob * (1.0 - prob) return grad, hess y_hat = np.array([1.80087972, -1.82414818, -1.82414818, 1.80087972, -2.08465433, -1.82414818, -1.82414818, 1.80087972, -1.82414818, -1.82414818]) y_true = np.array([1., 0., 0., 1., 0., 0., 0., 1., 0., 0.]) loglikelihoodloss(y_hat, y_true)
對數損失函數是在哪裡.
梯度(相對於 p)是但是在代碼中.
同樣,二階導數(關於 p)是 但是在代碼中.
方程如何相等?
導數是關於 $ x $ (或
y_hat
在代碼中)而不是 $ p $ .正如您已經得出的那樣(編輯:正如 Simon.H 提到的,因為實際損失應該是負對數似然,所以我改變了結果的符號) $$ \frac{\partial f}{\partial p}=\frac{p-y}{\left(1-p\right)p}, $$ 和sigmoid 的導數是 $$ \frac{\partial p}{\partial x}=p(1-p), $$ 所以 $$ \frac{\partial f}{\partial x}=\frac{\partial f}{\partial p}\frac{\partial p}{\partial x}=p-y, $$ 和二階導數 $$ \frac{\partial^2 f}{\partial x^2}=\frac{\partial}{\partial x}(\frac{\partial f}{\partial x})=\frac{\partial}{\partial x}(p-y)=\frac{\partial p}{\partial x}=p(1-p). $$