Логистическая функция ошибки

Эту функцию называют также «логлосс» (logloss / log_loss), перекрёстной / кросс-энтропией (Cross Entropy) и часто используют в задачах классификации. Разберёмся, почему её используют и какой смысл она имеет. Для чтения поста нужна неплохая ML-математическая подготовка, но даже новичкам я бы рекомендовал почитать (хотя я не очень заботился, чтобы «всё объяснялось на пальцах»).

logloss

Начнём издалека…

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

log_loss_01

Здесь мы предположили, что ошибка нормально распределена, x – признаковое описание объекта (возможно, в нём есть и фиктивный константный признак, чтобы в линейной функции был свободный член). Тогда мы знаем как распределены ответы нашей функции и можем записать функцию правдоподобия выборки (т.е. произведение плотностей, в которые подставлены значения из обучающей выборки) и воспользоваться методом максимального правдоподобия (в котором для определения значений параметров берётся максимум правдоподобия, а чаще – его логарифма):

log_loss_02

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

Давайте ещё посмотрим, как реализуется метод стохастического градиента (SGD) для минимизации MSE: надо взять производную функции ошибки для конкретного объекта и записать формулу коррекции весов в виде «шага в сторону антиградиента»:

log_loss_03

Получили, что веса линейной модели при её обучении методом SGD корректируются с помощью добавки вектора признаков. Коэффициент, с которым добавляют, зависит от «агрессивности алгоритма» (параметр альфа, который называют темпом обучения) и разности «ответ алгоритма – правильный ответ». Кстати, если разница нулевая (т.е. на данном объекте алгоритм выдаёт точный ответ), то коррекция весов не производится.

Log Loss

Теперь давайте, наконец, поговорим о «логлоссе». Рассматриваем задачу классификации с двумя классами: 0 и 1. Обучающую выборку можно рассматривать, как реализацию обобщённой схемы Бернулли: для каждого объекта генерируется случайная величина, которая с вероятностью p (своей для каждого объекта) принимает значение 1 и с вероятностью (1–p) – 0. Предположим, что мы как раз и строим нашу модель так, чтобы она генерировала правильные вероятности, но тогда можно записать функцию правдоподобия:

log_loss_04.png

После логарифмирования правдоподобия получили, что его максимизация эквивалентна минимизации последнего записанного выражения. Именно его и называют «логистической функции ошибки». Для задачи бинарной классификации, в которой алгоритм должен выдать вероятность принадлежности классу 1, она логична ровно настолько, насколько логична MSE в задаче линейной регрессии с нормальным шумом (поскольку обе функции ошибки выводятся из метода максимального правдоподобия).

Часто гораздо более понятна такая запись logloss-ошибки на одном объекте:

log_loss_05
Рис. 1. logloss-ошибка на одном объекте.

Отметим неприятное свойство логосса: если для объекта 1го класса мы предсказываем нулевую вероятность принадлежности к этому классу или, наоборот, для объекта 0го – единичную вероятность принадлежности к классу 1, то ошибка равна бесконечности! Таким образом, грубая ошибка на одном объекте сразу делает алгоритм бесполезным. На практике часто логлосс ограничивают каким-то большим числом (чтобы не связываться с бесконечностями).

Если задаться вопросом, какой константный алгоритм оптимален для выборки из q_1  представителей класса 1 и  q_0 представителей класса 0, q_1q_0 = q , то получим

log_loss_06

Последний ответ получается взятием производной и приравниванием её к нулю. Описанную задачу приходится решать, например, при построении решающих деревьев (какую метку приписывать листу, если в него попали представители разных классов). На рис. 2 изображён график log_loss-ошибки константного алгоритма для выборки из четырёх объектов класса 0 и 6 объектов класса 1.

log_loss_07.png
Рис. 2. Ошибка константного решения.

Представим теперь, что мы знаем, что объект принадлежит к классу 1 вероятностью p, посмотрим, какой ответ оптимален на этом объекте с точки зрения log_loss: матожидание нашей ошибки

log_loss_08.png

Для минимизации ошибки мы опять взяли производную и приравняли к нулю. Мы получили, что оптимально для каждого объекта выдавать его вероятность принадлежности к классу 1! Таким образом, для минимизации log_loss надо уметь вычислять (оценивать) вероятности принадлежности классам!

Если подставить полученное оптимальное решение в минимизируемый функционал, то получим энтропию:

log_loss_09.png

Это объясняет, почему при построении решающих деревьев в задачах классификации (а также случайных лесов и деревьях в бустингах) применяют энтропийный критерий расщепления (ветвления). Дело в том, что оценка принадлежности к классу 1 часто производится с помощью среднего арифметического меток в листе. В любом случае, для конкретного дерева эта вероятность будет одинакова для всех объектов в листе, т.е. константой. Таким образом, энтропия в листе примерно равна логлосс-ошибке константного решения. Используя энтропийный критерий мы неявно оптимизируем логлосс!

В каких пределах может варьироваться logloss? Ясно, что минимальное значение 0, максимальное – +∞, но эффективным максимальным можно считать ошибку при использовании константного алгоритма (вряд же мы в итоге решения задачи придумаем алгоритм хуже константы?!), т.е.

log_loss_10.png

Интересно, что если брать логарифм по основанию 2, то на сбалансированной выборке это отрезок [0, 1].

Связь с логистической регрессией

Слово «логистическая» в названии ошибки намекает на связь с логистической регрессией – это как раз метод для решения задачи бинарной классификации, который получает вероятность принадлежности к классу 1. Но пока мы исходили из общих предположений, что наш алгоритм генерирует эту вероятность (алгоритмом может быть, например, случайный лес или бустинг над деревьями). Покажем, что тесная связь с логистической регрессией всё-таки есть… посмотрим, как настраивается логистическая регрессия (т.е. сигмоида от линейной комбинации) на эту функцию ошибки методом SGD.

log_loss_11

 

Как видим, корректировка весов точно такая же, как и при настройке линейной регрессии! На самом деле, это говорит о родстве разных регрессий: линейной и логистической, а точнее, о родстве распределений: нормального и Бернулли. Желающие могут внимательно почитать лекцию Эндрю Ына.

Во многих книгах логистической функцией ошибки (т.е. именно «logistic loss») называется другое выражение, которое мы сейчас получим, подставив выражение для сигмоиды в logloss и сделав переобозначение: считаем, что метки классов теперь –1 и +1, тогда

log_loss_12.png

Полезно посмотреть на график функции, центральной в этом представлении:

log_loss_13.png
Рис. 3. Графики нескольких функций.

Как видно, это сглаженный (всюду дифференцируемый) аналог функции max(0, x), которую в глубоком обучении принято называть ReLu (Rectified Linear Unit). Если при настройке весов минимизировать logloss, то таким образом мы настраиваем классическую логистическую регрессию, если же использовать ReLu, чуть-чуть подправить аргумент и добавить регуляризацию, то получаем классическую настройку SVM:

log_loss_14.png

выражение под знаком суммы принято называть Hinge loss. Как видим, часто с виду совсем разные методы можно получать «немного подправив» оптимизируемые функции на похожие. Между прочим, при обучении RVM (Relevance vector machine) используется тоже очень похожий функционал:

log_loss_15

Связь с расхождением Кульбака-Лейблера

Расхождение (дивергенцию) Кульбака-Лейблера (KL, Kullback–Leibler divergence) часто используют (особенно в машинном обучении, байесовском подходе и теории информации) для вычисления непохожести двух распределений. Оно определяется по следующей формуле:

log_loss_16

где P и Q – распределения (первое обычно «истинное», а второе – то, про которое нам интересно, насколько оно похоже на истинное), p и q – плотности этих распределений. Часто KL-расхождение называют расстоянием, хотя оно не является симметричным и не удовлетворяет неравенству треугольника. Для дискретных распределений формулу записывают так:

log_loss_17.png

P_i, Q_i – вероятности дискретных событий. Давайте рассмотрим конкретный объект x с меткой y. Если алгоритм выдаёт вероятность принадлежности первому классу – a, то предполагаемое распределение на событиях «класс 0», «класс 1» – (1–a, a), а истинное – (1–y, y), поэтому расхождение Кульбака-Лейблера между ними

log_loss_18.png

что в точности совпадает с logloss.

Настройка на logloss

Один из методов «подгонки» ответов алгоритма под logloss – калибровка Платта (Platt calibration). Идея очень простая. Пусть алгоритм порождает некоторые оценки принадлежности к 1му классу – a. Метод изначально разрабатывался для калибровки ответов алгоритма опорных векторов (SVM), этот алгоритм в простейшей реализации разделяет объекты гиперплоскостью и просто выдаёт номер класса 0 или 1, в зависимости от того, с какой стороны гиперплоскости объект расположен. Но если мы построили гиперплоскость, то для любого объекта можем вычислить расстояние до неё (со знаком минус, если объект лежит в полуплоскости нулевого класса). Именно эти расстояния со знаком r мы будем превращать в вероятности по следующей формуле:

log_loss_19.png

неизвестные параметры α, β обычно определяются методом максимального правдоподобия на отложенной выборке (calibration set).

Проиллюстрируем применение метода на реальной задаче, которую автор решал недавно. На рис. показаны ответы (в виде вероятностей) двух алгоритмов: градиентного бустинга (lightgbm) и случайного леса (random forest).

log_loss_20.png
Рис. 4. Ответы двух алгоритмов на всех объектах выборки.

Видно, что качество леса намного ниже и он довольно осторожен: занижает вероятности у объектов класса 1 и завышает у объектов класса 0. Упорядочим все объекты по возрастанию вероятностей (RF), разобьем на k равных частей и для каждой части вычислим среднее всех ответов алгоритма и среднее всех правильных ответов. Результат показан на рис. 5 – точки изображены как раз в этих двух координатах.

log_loss_21
Рис. 5. Соотношения вероятностей: оценённой алгоритмом и усреднением.

Нетрудно видеть, что точки располагаются на линии, похожей на сигмоиду – можно оценить параметр сжатия-растяжения в ней, см. рис. 6. Оптимальная сигмоида показана розовым цветом на рис. 5. Если подвергать ответы такой сигмоидной деформации, то логлосс-ошибка случайного леса снижается с 0.37 до 0.33.

log_loss_22.png
Рис. 6. Ошибка в зависимости от коэффициента сжатия аргумента сигмоиды.

Обратите внимание, что здесь мы деформировали ответы случайного леса (это были оценки вероятности – и все они лежали на отрезке [0, 1]), но из рис. 5 видно, что для деформации нужна именно сигмоида. Практика показывает, что в 80% ситуаций для улучшения logloss-ошибки надо деформировать ответы именно с помощью сигмоиды (для меня это также часть объяснения, почему именно такие функции успешно используются в качестве функций активаций в нейронных сетях).

Ещё один вариант калибровки – монотонная регрессия (Isotonic regression).

Многоклассовый logloss

Для полноты картины отметим, что logloss обобщается и на случай нескольких классов естественным образом:

log_loss_23.png

здесь q – число элементов в выборке, l – число классов, a_ij – ответ (вероятность) алгоритма на i-м объекте на вопрос принадлежности его к j-му классу, y_ij=1 если i-й объект принадлежит j-му классу, в противном случае y_ij=0.

На посошок…

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

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

Если Вы всё-таки отдали несколько сотен тысяч рублей, то можете проверить «профессиональность инструктора» следующими вопросами:

  • Энтропия в листе примерно равна logloss-ошибке константного решения. Почему не использовать саму ошибку, а не приближённое значение? Или, как часто происходит в задачах оптимизации, её верхнюю оценку?
  • Минимизации какой ошибки соответствует критерий расщепления Джини?
  • Можно показать, что если в задаче бинарной классификации использовать в качестве функции ошибки среднеквадратичное отклонение, то также, как и для логлосса, оптимальным ответом на объекте будет вероятность его принадлежности к классу 1. Почему тогда не использовать такую функцию ошибки?

Ответы типа «так принято», «такой функции не существует», «это только для регрессии», естественно, заведомо неправильные. Если Вам не ответят с такой же степенью подробности, как в этом посте, то Вы точно переплатили;)

П.С. Что ещё почитать…

В этом блоге я публиковал уже несколько постов по метрикам качества…

И буквально на днях вышла классная статья Дмитрия Петухова про коэффициент Джини, читать обязательно:

Логистическая функция ошибки: 36 комментариев

  1. Интересно было бы добавить еще часть про вывод лог. регрессии из байесовского вывода для экспоненциального семейства распределений. Там и интуиция сигмоиды проясняется.

    • Ну, это уже больше про лог.регрессию, а не про логлосс. Про байесовский вывод я хотел написать отдельный пост… но, вообще, большой вопрос, насколько и куда надо углубляться при изучении машинного обучения (если не готовить учёных-исследователей в этой области). Например, Энрю Ын много говорит про обобщённые линейные модели, экспоненциальные семейства и т.п. И совсем мало про кластеризацию. На мой взгляд, это совсем непонятный перекос. Про первое можно вообще ничего не говорить (тем более, в курсе для «начинающих»), и странно, что кроме k-means и EM-алгоритма начинающему ничего не рассказывается про кластеризацию.

  2. Спасибо большое, за интересный пост!
    Связь с логистической регрессией: logloss(y,a)=-y*log(a) + (1-y)*log(1-a). Тут, кажется опечатка. Вроде, минус должно быть, не?

  3. Дивергенция Кульбака-Лейблера это кросс энтропия плюс энтропия, а написано равенство лог лоссу, стоит написать что при оптимизации энтропия — константа для ответов.

    • Ну, не плюс, ДКЛ = перекрёстная энтропия МИНУС энтропия, но последняя вычисляется для вырожденного распределения, поэтому равна нулю! У меня не просто написано, что ДКЛ = логлоссу, у меня это доказывается с указанием, какие распределения имеются в виду!

      А вот конец предложения я не понял…

      • Здравствуйте! Может быть, имелось в виду, что если кросс-энтропия — это целевая функция оптимизации, то при константной энтропии в качестве целевой функции можно взять расстояние Кульбака-Лейблера. У меня тот же вопрос возник: мне нужно оптимизировать матрицу несоответствия (confusion matrix) для мультиклассовой классификации. Причем распределение как по горизонтальным, так и по вертикальным классам может вариьироваться в зависимости от параметров модели. Это можно пояснить так: есть точки на плоскости, которые разделяются на диапазоны как по горизонтали, так и по вертикали, и диапазоны нужно подобрать оптимальным образом. Так вот, могу я взять в качестве функции потерь упомянутый Вами log-loss, или же потребуется составить конструкцию, больше похожую на расстояние Кульбака-Лейблера (вычтя из лог-лосса лишнее слагаемое), учитывая, что слагаемое с энтропией — не константа и зависит от параметров модели?

      • Здравствуйте!
        Что-то я тут мало что понял…

        -мне нужно оптимизировать матрицу несоответствия (confusion matrix) для мультиклассовой классификации.

        Её нельзя оптимизировать — только построить, оптимизируют ф-ии потерь.

        — распределение как по горизонтальным, так и по вертикальным классам

        Не знаю, что такое «вертикальные» и «горизонтальные» классы. Хотя могу догадаться, что так Вы строки и столбцы называете.

        Но общая идея…
        Да KL-дивергениция отличается от logloss, когда целевое распределение произвольное. Иногда её используют как ф-ю для оптимизации.

  4. спасибо за интересную статью.

    уточняющий вопрос к рис. 4:

    «Упорядочим все объекты по возрастанию» По возрастанию вероятностей? Для RF или GB?

    к рис. 5:

    «Если подвергать ответы такой сигмоидной деформации, то логлосс-ошибка случайного леса снижается с 0.37 до 0.33». Что конкретно имеется в виду под деформацией ответа? «Ручное» опускание его на кривую?

    • Пожалуйста.

      1) Вероятностей RF — именно их мы и будем деформировать… GB не трогаем.
      Да, у меня тут плохо написано. Сейчас исправлю.

      2) ну не совсем ручное. Есть же аналитическая формула
      sigmoid(8*a), где a — ответ алгоритма (см. рис. 6) — на рис. 5 как раз график этой функции.

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

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

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

    Тут вы говорите, что энтропийный критерий минимизирует логлосс, а до этого рассказывали про случайный лес и как его перекалибровка позволяет понизить логлосс с 0.37 до 0.33. Как так?

    Имеете ли вы в виду, что энтропийный критерий минимизирует логлосс «локально» в конкретном «сплите», что не имеет большого влияния на глобальный логлосс? Но это значит, что те же «Профессиональные инструкторы», которые говорят про энтропийный критерий «вполне естественно использовать», либо говорят, что «энтропия похожа на кросс-энтропию»» на самом деле правы, а вы нет.

    • 1) Про сигмоиду

      «сигмоида очень плохо работает как функция…» – Вы здесь под работой имеете в виду, что нейросети с сигмоидой долго обучать (и часто практически невозможно в приближённых вычислениях). Но с теоретической точки зрения нейросеть с сигмоидой эквивалентна нейросети с ReLu (с точки зрения функциональной выразимости). И я написал, что часто на практике сталкиваешься с тем, что ответы алгоритма следует деформировать именно сигмоидой.

      Сейчас, действительно, практически всегда используется ReLu, но я знаю лишь одно наглядное подтверждение, как из «реальных данных» следует, что надо использовать именно эту функцию активации (ну, разве что, ещё статья Ханлосера конца прошлого века про эту функцию). Для сигмоиды таких подтверждений чуть больше (на самом деле, даже понятно почему), но, собственно, это ничему не противоречит.

      2)»рассказывали про случайный лес и как его перекалибровка позволяет понизить логлосс с 0.37 до 0.33. Как так?»

      Элементарно. Критерий-то минимизирует, но это означает лишь, что мы выбираем оптимальный сплит для конкретного признака. Но сам же RF не обеспечивает нахождение глобального минимума. Например, для каждого сплита выбирается лишь подмножество признаков в качестве потенциальных кандидатов для сплита. И, кстати, сама задача построения оптимального решающего дерева NP-полна, поэтому-то и проводят процедуры типа RF. Между прочим, в бустинге был тот же критерий расщепления, но, как Вы видите, качество другое… так что не всё определяется критерием расщепления.

      3) «на самом деле правы, а вы нет»
      Во-первых, я не понимаю, как можно быть правым с ответом «это вполне естественно».
      Почему тела падают на землю? — Это вполне естественно. — Спасибо за правильный ответ.
      Также я не понимаю, как похожесть 2х формул может оправдывать использование второй там, где работает первая (тем более, когда есть целая теория про это).

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

  6. С правдоподобием для обучающей выборки при выводе формулы logloss не все так очевидно — здесь используется трюк для аналитической записи функции вероятности (дискретного) распределения Бернулли — очередной сомножитель должен быть ИЛИ a(x) (в случае y=1) ИЛИ (1-a(x)) (в случае y=0) — выразить это можно как раз в только в приведенной формуле.

    • Ну, по простому, в правдоподобии мы перемножаем вероятности наблюдаемых событий. Когда подбрасываем монету, то при выпадении орла (пусть тогда случайная величина y = 1) — это вероятность его выпадения p, а когда решка (тогда случайная величина y = 0) — (1-p).

      Для удобства это можно записать как yp + (1-y)(1-p) или p^y(1-p)^(1-y) — форм много… выбрана та, которая удобна при перемножении вероятностей событий.

  7. Александр Геннадьевич, здравствуйте! А почему энтропия в листе примерно равна logloss константного решения, а не в точности?

    • Здравствуйте, Алексей! Ну тут я просто осторожно написал. Мы же работаем с конечными выборками и оперируем только с оценками. Для данной конечной выборки она, конечно, в точности равна.

  8. Александр, здравствуйте. Хотел попросить вас прокомментировать фразу «Можно показать, что если в задаче бинарной классификации использовать в качестве функции ошибки среднеквадратичное отклонение, то также, как и для логлосса, оптимальным ответом на объекте будет вероятность его принадлежности к классу 1. Почему тогда не использовать такую функцию ошибки?» Правильно ли я понимаю, что заданный в ней вопрос состоит в том, что можно ли применять средний квадрат в качестве критерия расщепления для поиска подходящего сплита при условии, что оптимизируемый критерий — логлосс ? И еще, не могли бы вы прокомментировать фразу «Энтропия в листе примерно равна logloss-ошибке константного решения. Почему не использовать саму ошибку, а не приближённое значение? Или, как часто происходит в задачах оптимизации, её верхнюю оценку?» Здесь я так понял, что речь о том, что мы оптимизируем эмпирический критерий вместо теоретического, т.к. мы не знаем точных пропорций классов в области признакового пространства, задаваемой данным сплитом. Или речь здесь об оптимизации logloss по всем деревьям, а не только по тем, что получаются жадным расщеплением, и мы не делаем это потому, что это NP-трудная задача.

    • Здравствуйте!

      «Правильно ли я понимаю…»
      нет, не правильно. функция ошибки = MSE, а не logloss
      В скором времени будет пост про это.

      «не могли бы вы прокомментировать фразу…»
      Посмотрите в других комментариях — уже затрагивали этот вопрос.

  9. Александр здравствуйте. Спасибо за статью!
    Могли бы подсказать откуда берется 2я формула для логистической функции потерь, для классов {-1, 1}?

    Попытался ее вывести по аналогии с первой, но получается другая.
    Т.е. опять же надо оставить либо a_i, либо 1 — a_i в зависимости от правильного ответа y_i
    y_i = -1 => 1 — a_i
    y_i = 1 => a_i

    Ну и вижу примерно такую формулу:
    ((a_i)^(1+y_i)) * ((1 — a_i)^(1 — y_i))

    Если дальше брать правдоподобие и логарифимировать, то не получается приведенная функция

  10. Кажется понял свою ошибку.
    y_i = -1 => — a_i
    y_i = 1 => a_i
    Отсюда получаем
    y_i * a_i — это правдоподобие для одного объекта
    Для всех надо взять произведение.

Оставьте комментарий