Повышение градиента (дополнительный модуль)

В задачах регрессии имеет смысл определить ошибку со знаком как разницу между прогнозом и меткой. Однако в других типах задач эта стратегия часто приводит к плохим результатам. Лучшая стратегия, используемая при повышении градиента, заключается в следующем:

  • Определите функцию потерь, аналогичную функциям потерь, используемым в нейронных сетях. Например, энтропия (также известная как потеря журнала) для задачи классификации.
  • Обучите слабую модель прогнозировать градиент потерь в соответствии с выходными данными сильной модели .

Формально, учитывая функцию потерь $L(y,p)$, где $y$ — метка, а $p$ — предсказание, псевдоответ $z_i$, используемый для обучения слабой модели на этапе $i$, имеет следующий вид:

$$ z_i = \frac {\partial L(y, F_i)} {\partial F_i} $$

где:

  • $F_i$ — предсказание сильной модели.

Предыдущий пример представлял собой задачу регрессии: цель состоит в том, чтобы предсказать числовое значение. В случае регрессии квадрат ошибки представляет собой обычную функцию потерь:

$$ L(y,p) = (y - p)^2 $$

В данном случае градиент равен:

$$ z = \frac {\partial L(y, F_i)} {\partial F_i} = \frac {\partial(y-p)^2} {\partial p} = 2(y - p) = 2 \ \text{signed error} $$

Другими словами, градиент — это ошибка со знаком из нашего примера с коэффициентом 2. Обратите внимание, что постоянные коэффициенты не имеют значения из-за сжатия. Обратите внимание, что эта эквивалентность верна только для задач регрессии с потерей квадратичной ошибки. Для других задач обучения с учителем (например, классификации, ранжирования, регрессии с потерей процентиля) не существует эквивалента между градиентом и ошибкой со знаком.

Оптимизация листов и структур с помощью шага метода Ньютона

Метод Ньютона — это метод оптимизации, подобный градиентному спуску. Однако, в отличие от градиентного спуска, который использует для оптимизации только градиент функции, метод Ньютона использует для оптимизации как градиент (первую производную), так и вторую производную функции.

Шаг градиентного спуска выглядит следующим образом:

$$ x_{i+1} = x_i - \frac {df}{dx}(x_i) = x_i - f'(x_i) $$

и метод Ньютона следующим образом:

$$ x_{i+1} = x_i - \frac {\frac {df}{dx} (x_i)} {\frac {d^2f}{d^2x} (x_i)} = x_i - \frac{f'(x_i)}{f''(x_i)}$$

При желании метод Ньютона можно интегрировать в обучение деревьев с градиентным усилением двумя способами:

  1. После обучения дерева шаг Ньютона применяется к каждому листу и переопределяет его значение. Древовидная структура нетронута; изменяются только значения листьев.
  2. В процессе роста дерева условия выбираются по баллу, включающему компонент формулы Ньютона. Нарушается структура дерева.
Код YDF
В ЯДФ:
  • YDF всегда применяет шаг Ньютона к листу (вариант 1).
  • Вы можете включить опцию 2 с помощью use_hessian_gain=True .