Понимать наиболее распространенные функции потерь и когда использовать каждую из них.

Функции потерь играют важную роль в машинном обучении, поскольку они определяют процесс обучения модели и определяют ее цель.

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

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

Что такое функция потерь?

Напомним, что в задачах машинного обучения с учителем нам дается обучающий набор из n помеченных образцов: D = {(x₁, у₁), (x₂, y₂), … , (xₙ, уₙ)}, где x представляет функции образца i и yᵢ представляет метку этого образца. Наша цель — построить модель, предсказания которой максимально приближены к истинным меткам.

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

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

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

Желаемые свойства функции потерь

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

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

Функции потерь и максимальное правдоподобие

Многие функции потерь, используемые в машинном обучении, могут быть получены из принципа максимального правдоподобия (см. мою предыдущую статью для объяснения максимального правдоподобия).

При оценке максимального правдоподобия (MLE) мы пытаемся найти модель с параметрами θ, которая максимизирует вероятность наблюдаемых данных с учетом модели: P(D|θ). Чтобы упростить функцию правдоподобия, мы обычно логарифмируем ее, а затем пытаемся максимизировать логарифмическую вероятность: log P(D|θ) .

Следовательно, мы можем определить функцию потерь для данной выборки (x, y) как отрицательную логарифмическую вероятность наблюдения ее истинной метки с учетом предсказания нашей модели:

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

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

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

Проблемы регрессии

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

Квадратная потеря

Квадратная потеря определяется как квадрат разницы между целевой меткой и ее прогнозируемым значением:

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

Плюсы:

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

Минусы:

  • Чувствителен к выбросам из-за возведения ошибок в квадрат. Небольшое количество отсчетов, удаленных от других отсчетов, может привести к большим изменениям в модели (как будет продемонстрировано позже).

Абсолютная потеря

Абсолютная потеря определяется как абсолютная разница между истинной меткой и прогнозом модели:

Плюсы:

  • Не слишком подвержен выбросам
  • Легко вычислить

Минусы:

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

Хубер Лосс

Убыток Хубера представляет собой комбинацию квадрата убытка и абсолютного убытка. Для значений потерь, которые меньше предопределенного параметра с именем δ, используется квадрат ошибки, а для значений больше δ — абсолютная ошибка.

Математическое определение потери Хубера:

δ обычно имеет значение 1.

Потеря Хубера обычно используется в глубоком обучении, где она помогает избежать проблемы взрывающегося градиента из-за ее нечувствительности к большим ошибкам.

Плюсы:

  • Непрерывный и дифференцируемый всюду
  • Менее чувствителен к выбросам, чем квадрат потери

Минусы:

  • Медленнее вычислять
  • Требуется настройка гиперпараметра δ
  • Не имеет интерпретации максимального правдоподобия

На следующем графике показаны три функции регрессионных потерь:

Пример Scikit-Learn

Класс SGDRegressor подбирает модель линейной регрессии к заданному набору данных, используя стохастический градиентный спуск (SGD). Его параметр loss можно использовать для выбора функции потерь для оптимизации. Возможные варианты этого параметра:

  • squared_error(квадрат потери). Это опция по умолчанию.
  • Хубер(Потеря Хубера)
  • epsilon_intensive (функция потерь, используемая в регрессии опорных векторов)

Давайте сравним квадратичные функции потерь и функции потерь Хьюбера на примере набора данных, который содержит выброс.

Сначала мы определяем наш набор данных:

x = np.array([0.5, 1.8, 2.4, 3.5, 4.2, 4.8, 5.8, 6.1, 7.2, 8.7, 10])
y = np.array([0.1, 0.2, 0.3, 0.4, 0.7, 1, 0.9, 1.2, 1.4, 1.8, 10])

Давайте построим точки данных:

def plot_data(x, y):
    plt.scatter(x, y)
    plt.xlabel('$x$')
    plt.ylabel('$y$')
    plt.grid()
plot_data(x, y)

Ясно, что точка (10, 10) является выбросом.

Затем мы подгоняем к этому набору данных две модели SGDRegressor: одну с функцией квадратичных потерь, а другую с потерями Хубера.

from sklearn.linear_model import SGDRegressor

X = x.reshape(-1, 1) # Convert x to a matrix with one column

reg = SGDRegressor(loss='squared_error')
reg.fit(X, y)

reg2 = SGDRegressor(loss='huber')
reg2.fit(X, y)

Давайте построим две линии регрессии, найденные этими моделями:

def plot_regression_line(x, y, w0, w1, color, label):
    p_x = np.array([x.min(), x.max()])
    p_y = w0 + w1 * p_x
    plt.plot(p_x, p_y, color, label=label)
plot_data(x, y)
plot_regression_line(x, y, reg.intercept_, reg.coef_[0], 'r', label='Squared loss')
plot_regression_line(x, y, reg2.intercept_, reg2.coef_[0], 'm', label='Huber loss')
plt.legend()

Совершенно очевидно, что на модель, обученную с квадратичными потерями, гораздо больше повлиял выброс, чем на модель, обученную с потерями Хьюбера.

Проблемы бинарной классификации

В задачах бинарной классификации основные метки истинности являются бинарными (1/0 или 1/-1). Прогнозируемое значение модели может быть либо бинарным (жесткая метка), либо оценкой вероятности того, что данная выборка принадлежит к положительному классу (мягкая метка).

Примеры моделей классификации, которые предоставляют только жесткие метки, включают машины опорных векторов (SVM) и K-ближайших соседей (KNN), а такие модели, как логистическая регрессия и нейронные сети (с сигмовидным выходом), также обеспечивают оценку вероятности.

0–1 поражение

Простейшей функцией потерь является функция потерь с нулевым значением единицы (также называемая ошибкой неправильной классификации):

I – это индикаторная функция, которая возвращает 1, если входные данные верны, и 0 в противном случае.

Для каждой выборки, которую классификатор делает неправильно (неправильно классифицирует), возникает потеря 1, тогда как правильно классифицированные выборки приводят к 0 потерям.

Функция потерь 0–1 часто используется для оценки классификаторов, но бесполезна для руководства оптимизацией, поскольку она не дифференцируема и не непрерывна.

Потеря журнала

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

Обозначим заданную моделью оценку вероятности принадлежности выборки к положительному классу через p:

Тогда потери журнала определяются как:

Как мы пришли к этой функции потерь? Мы снова воспользуемся принципом максимального правдоподобия. Более конкретно, мы покажем, что логарифмическая потеря представляет собой отрицательную логарифмическую вероятность в предположении, что метки имеют распределение Бернулли (распределение вероятностей бинарной случайной величины, которое принимает 1 с вероятностью p и 0 с вероятностью 1 - p). Математически это можно записать следующим образом:

Доказательство:

Учитывая модель данных (меток) в виде распределения Бернулли с параметром p, вероятность того, что образец принадлежит к положительному классу, равна просто p, т. е.

Точно так же вероятность того, что образец принадлежит к отрицательному классу, равна:

Мы можем записать эти два уравнения более компактно следующим образом:

Объяснение: когда y = 1, pʸ = p и (1 - p)¹⁻ʸ= 1, поэтому P(y|p) = p. Точно так же, когда y = 0, pʸ = 1 и (1 - p)¹⁻ʸ = 1 - p, поэтому P(y|p) = 1 - p.

Следовательно, логарифмическая вероятность данных равна:

Потеря журнала - это как раз минус этой функции!

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

Потеря шарнира

Потеря шарнира используется для обучения машин опорных векторов (SVM), где цель состоит в том, чтобы максимизировать запас области, которая разделяет два класса, при минимизации нарушений поля.

Потеря шарнира определяется следующим образом:

Обратите внимание, что ŷ здесь — исходный результат функции принятия решения классификатора, т. е. ŷ = wx (SVM не дает оценок вероятности).

Когда y и ŷ имеют одинаковый знак (т. е. модель предсказывает правильный класс) и |ŷ| ≥ 1, потеря шарнира равна 0. Это означает, что правильно классифицированные образцы, находящиеся за пределами поля, не вносят вклада в потери (решение будет таким же, если эти образцы удалены). Однако для выборок, которые находятся внутри полей (|ŷ| ‹ 1), даже если прогноз модели верен, все равно будут небольшие потери. Когда y и ŷ имеют противоположные знаки, потери шарнира растут линейно с ŷ.

Более подробно методы опорных векторов будут рассмотрены в следующей статье.

На следующем графике показаны три функции потерь при классификации:

И логарифмические потери, и потери на петлях можно рассматривать как непрерывные приближения к потерям 0–1.

Проблемы многоклассовой классификации

В задачах классификации с несколькими классами целевой меткой является 1 из k классов. Метка обычно закодирована с использованием прямого кодирования, т. е. в виде двоичного k-мерного вектора y = (y₁, …, yₖ), где yᵢ = 1 для истинного класса i и 0 в других местах.

Вероятностный классификатор выводит для каждой выборки k-мерный вектор с вероятностными оценками каждого класса: p = (p₁, …, pₖ). Сумма этих вероятностей равна 1, т. е. p₁ + … + pₖ = 1.

Кросс-энтропийные потери

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

Например, предположим, что у нас есть проблема с тремя классами, истинный класс нашей выборки — это класс 2 (т. е. y = [0, 1, 0]), а предсказание нашей модели — p = [0,3, 0,6, 0,1]. Тогда кросс-энтропийные потери, вызванные этим образцом, равны:

Чтобы увидеть, как потери кросс-энтропии обобщают потери журнала, обратите внимание, что в двоичном случае p₁ = 1 - p₀ и y₁ = 1 - y₀, поэтому получаем:

что в точности соответствует потере журнала для p = p₀ и y = y₀.

Подобно логарифмической потере, мы можем показать, что кросс-энтропийная потеря является отрицательным значением логарифмического правдоподобия модели в предположении, что метки выбираются из категориального распределения (обобщение распределения Бернулли на k возможные результаты).

Доказательство:

Учитывая модель данных (меток) в виде категориального распределения с вероятностями p = (p₁, …, pₖ), вероятность то, что данный образец принадлежит классу i, равно pᵢ:

Следовательно, вероятность того, что истинной меткой выборки является y, равна:

Объяснение: если правильным классом данной выборки является i, то yᵢ = 1, и для всех j ≠ i yⱼ = 0. Следовательно, P(y|p) = pᵢ, то есть вероятность того, что образец принадлежит к классу i. .

Следовательно, логарифмическая вероятность нашей модели:

Потеря кросс-энтропии — это как раз отрицательная величина этой функции!

Ключевые выводы

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

Заключительные примечания

Все изображения, если не указано иное, принадлежат автору.

Примеры кода этой статьи можно найти на моем github: https://github.com/roiyeho/medium/tree/main/loss_functions

Спасибо за прочтение!