Идея поощрения в машинном обучении основана на вопросе, заданном Майклом Кернсом и Лесли Валиант в 1988/89 гг.: Может ли набор слабых учеников создать одного сильного ученика?

В вышедшей год спустя основополагающей статье Сила слабой обучаемости Роберт Шапир дал утвердительный ответ на этот вопрос, описав метод преобразования слабого алгоритма обучения в алгоритм, обеспечивающий сколь угодно высокую точность.

Слабый ученик — это тот, кто может выдвинуть гипотезу, которая работает лишь немногим лучше, чем случайное угадывание, в то время как сильный ученик может с высокой вероятностью вывести гипотезу, которая верна во всех случаях, кроме произвольно малой доли. За прошедшие годы мы видели множество очень успешных алгоритмов повышения, которые превращают слабых учащихся в сильных, включая AdaBoost, градиентное повышение, XGBoost и LightGBM.

Недавно вместе с моим коллегой Джейсоном Х. Муром мы спросили, что произойдет, если мы будем использовать сильные модели в контексте бустинга, в частности, градиентного бустинга. Идея повышения градиента проста: создать последовательность прогностических моделей, где каждая последующая модель пытается минимизировать ошибку по сравнению с остаточными ошибками (называемыми псевдоостатками) предыдущей модели. По сути, каждая модель работает с набором данных, который представляет собой предыдущий набор данных (цель) минус предыдущий прогноз. На YouTube-канале StatQuest есть отличное 15-минутное видео, в котором простым языком объясняются основные принципы работы градиентного бустинга.

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

Вычислительное дерево выглядит так:

Я эволюционировалэто деревос помощью генетического программирования, и оно на самом деле вычисляет (рекурсивно) эквивалентное математическое выражение: x⁴ + x³ + x² + x + 1.

В статье мы выполнили повышение градиента, но с вычислительным деревом в качестве базовой модели, которая будет повышаться на каждом этапе. Мы провели эксперименты на 98 наборах регрессионных данных, показав, что с помощью небольшого количества этапов повышения — от 2 до 5 — исходную (сильную) модель можно улучшить. Обратите внимание на небольшое количество этапов — повышение градиента со слабыми учениками обычно использует 10 или 100 этапов.

Во второй статье AddGBoost: алгоритм повышения градиента, основанный на сильных учениках мы представили алгоритм AddGBoost, который, опять же, использует сильных учеников вместо слабых в контексте повышения градиента. В качестве базовых строительных блоков для бустинга мы использовали следующие 7 моделей: KernelRidge, LassoLars, SGDRegressor, LinearSVR, DecisionTreeRegressor, HistGradientBoostingRegressor, LGBMRegressor. Все они являются частью scikit-learn, кроме LightGBM.

Если мы посмотрим на наш псевдокод, то увидим, что идея довольно проста:

Функция fit сопоставляет последовательные модели с псевдоостатками, а функция predict формирует прогноз, суммируя прогнозы последовательных (обученных) моделей. Все идет нормально.

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

Например, если я поручу Optuna найти гиперпараметры для модели SGDRegressor, я могу получить такой вывод:

В принципе, Optuna нашла хорошие значения альфы и штрафа. Наша хитрость заключалась в том, чтобы добавить вышеупомянутые 7 регрессоров в смесь Optuna — как часть пространства поиска гиперпараметров. То есть Optuna должна была найти лучший список регрессоров вместе с гиперпараметрами каждого из них. Когда перед Optuna ставится задача оптимизировать гиперпараметры для AddGBoost, скажем, в 2 этапа, вывод может выглядеть так:

То есть Optuna нашла сами 2 модели («regressor_0» и «regressor_1») и их гиперпараметры (альфа, штраф и т. д.). Вот как мы получаем наш «список моделей» в псевдокоде AddGBoost выше: это часть процесса оптимизации гиперпараметров Optuna.

Мы протестировали AddGBoost на 90 наборах регрессионных данных и показали, что он оказался самым эффективным для 33% (с 2 этапами) до 42% (с 5 этапами) наборов данных. Неплохо, учитывая, что мы сравниваем с некоторыми лучшими алгоритмами машинного обучения.

Таким образом, кажется, что объединение идеи повышения с сильными учениками является интересным…

О, и код для обеих вышеупомянутых статей находится на моем github.