Как вычисляются градиент и гессиан логарифмических потерь в примере сценария пользовательской целевой функции в репозитории xgboost на github?

Я хотел бы понять, как вычисляются градиент и гессиан функции logloss в пример скрипта xgboost.

Я упростил функцию, чтобы принимать массивы 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) равна введите здесь описание изображения однако в коде это введите здесь описание изображения.

Как равны уравнения?


person Greg    schedule 23.08.2016    source источник


Ответы (1)


Функция потерь журнала задается как:

введите описание изображения здесь

куда

введите описание изображения здесь

Взяв частную производную, мы получим градиент как

введите описание изображения здесь

Таким образом, мы получаем отрицательный градиент как p-y.

Аналогичные вычисления можно выполнить для получения гессиана.

person A Gore    schedule 24.08.2016