Как работает Lightgbm (или другие реализации расширенных деревьев с приближением потерь 2-го порядка) для потерь L1? - PullRequest
0 голосов
/ 09 февраля 2020

Я пытался понять, как Lightgbm безрукий L1 проигрывает (MAE, MAPE, HUBER)

Согласно этой статье , выигрыш во время разделения должен зависеть только от первого и вторые производные функции потерь. Это связано с тем, что Lightgbm использует приближение второго порядка к функции потерь, и, следовательно, мы можем аппроксимировать потери следующим образом

Approximation of the loss for a split

Для потерь L1 тем не менее, абсолютное значение градиента потерь является постоянным и его гессианом 0. Я также читал, что для решения этой проблемы для функций потерь с гессианом = 0 мы должны использовать 1 в качестве гессиана :

"Для этих целевых функций с first_order_gradient константа, LightGBM имеет специальную обработку для них: (...) он будет использовать постоянный градиент для обучения древовидной структуре, но использовать остаток для расчет выходных данных листа с функцией процентиля, например, 50% для MAE. Это решение от sklearn, и доказано, что оно работает во многих тестах. "

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

С другой стороны, когда вы читаете о том, как GOSS повышает оригинальную бумагу lightgbm

enter image description here

для GOSS Повышая стратегию, авторы рассматривают квадрат суммы градиентов. Я вижу ту же проблему, что и выше: если градиент MAE является признаком ошибки, то как при взятии квадрата градиента отражается усиление? Означает ли это, что GOSS также не будет работать с функциями потерь с постоянным градиентом?

Заранее спасибо,

1 Ответ

0 голосов
/ 10 февраля 2020

Я спросил об этом в репозитории Lightgbm и получил ответ :

До этой версии мы использовали приближение второго порядка, но его производительность на самом деле не хорошо. И мы переключаемся обратно к 1) используем градиент первого порядка, чтобы найти точку разделения; 2) затем используйте медиану невязок для конечных выходов, как показано в приведенном выше коде.

Так что, похоже, Lightgbm будет обрабатывать уже реализованные потери L1 с использованием градиентного спуска. Для пользовательских функций потерь, он все равно будет пытаться выполнить 2-й порядок.

...