Подобно бэггингу и бустингу, бустинг градиента — это методология, применяемая поверх другого алгоритма машинного обучения. Неформально повышение градиента включает два типа моделей:
- «слабая» модель машинного обучения, которая обычно представляет собой дерево решений.
- «сильная» модель машинного обучения, состоящая из нескольких слабых моделей.
При повышении градиента на каждом шаге новая слабая модель обучается предсказывать «ошибку» текущей сильной модели (которая называется псевдореакцией ). Мы опишем «ошибку» позже. Пока предположим, что «ошибка» — это разница между прогнозом и регрессивной меткой. Затем слабая модель (то есть «ошибка») добавляется к сильной модели с отрицательным знаком, чтобы уменьшить ошибку сильной модели.
Повышение градиента является итеративным. Каждая итерация вызывает следующую формулу:
\[ F_{i+1} = F_i - f_i \]
куда:
- $F_i$ — сильная модель на шаге $i$.
- $f_i$ — слабая модель на шаге $i$.
Эта операция повторяется до тех пор, пока не будет достигнут критерий остановки, например, максимальное количество итераций или если (сильная) модель начнет переобучать, измеренную в отдельном наборе данных проверки.
Давайте проиллюстрируем повышение градиента на простом наборе данных регрессии, где:
- Цель состоит в том, чтобы предсказать $y$ из $x$.
- Сильная модель инициализируется нулевой константой: $F_0(x) = 0$.
# Simplified example of regressive gradient boosting.
y = ... # the labels
x = ... # the features
strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.
for i in range(num_iters):
# Error of the strong model
error = strong_predictions - y
# The weak model is a decision tree (see CART chapter)
# without pruning and a maximum depth of 3.
weak_model = tfdf.keras.CartModel(
task=tfdf.keras.Task.REGRESSION,
validation_ratio=0.0,
max_depth=3)
weak_model.fit(x=x, y=error)
strong_model.append(weak_model)
weak_predictions = weak_model.predict(x)[:,0]
strong_predictions -= weak_predictions
Давайте применим этот код к следующему набору данных:
Рис. 25. Набор синтетических регрессионных данных с одним числовым признаком.
Вот три графика после первой итерации алгоритма повышения градиента:
Рисунок 26. Три графика после первой итерации.
Обратите внимание на следующее относительно графиков на рис. 26:
- Первый график показывает прогнозы сильной модели, которая в настоящее время всегда равна 0.
- Второй график показывает ошибку, которая является меткой слабой модели.
- Третий график показывает слабую модель.
Первая слабая модель изучает грубое представление метки и в основном фокусируется на левой части пространства признаков (часть с наибольшим разнообразием и, следовательно, с наибольшей ошибкой для постоянной неправильной модели).
Ниже приведены те же графики для другой итерации алгоритма:
Рисунок 27. Три графика после второй итерации.
Обратите внимание на следующее относительно графиков на рис. 27:
- Сильная модель теперь содержит предсказание слабой модели предыдущей итерации.
- Новая ошибка сильной модели немного меньше.
- Новый прогноз слабой модели теперь фокусируется на правой части пространства признаков.
Запускаем алгоритм еще на 8 итераций:
Рис. 28. Три графика после третьей и десятой итераций.
Обратите внимание, что на рисунке 28 предсказание сильной модели начинает напоминать график набора данных .
Эти рисунки иллюстрируют алгоритм повышения градиента, использующий деревья решений в качестве слабых учеников. Эта комбинация называется деревьями с градиентным усилением (решения) .
Предыдущие графики предлагают суть повышения градиента. Однако в этом примере отсутствуют следующие две реальные операции:
- Усадка
- Оптимизация листовых значений одним шагом метода Ньютона
Усадка
Слабая модель $f_i$ умножается на малое значение $\nu$ (например, $\nu = 0,1$) перед добавлением к сильной модели $F_i$. Эта небольшая величина называется усадкой . Другими словами, вместо каждой итерации используется следующая формула:
\[ F_{i+1} = F_i - f_i \]
Каждая итерация использует следующую формулу:
\[ F_{i+1} = F_i - \nu f_i \]
Сокращение при повышении градиента аналогично скорости обучения в нейронных сетях. Уменьшение определяет скорость обучения сильной модели, что помогает ограничить переоснащение. То есть значение усадки, близкое к 0,0, уменьшает переоснащение в большей степени, чем значение усадки, близкое к 1,0.
В нашем коде выше сжатие будет реализовано следующим образом:
shrinkage = 0.1 # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions