В чем разница между всеми этими потерями кросс-энтропии в Keras и TensorFlow?

В чем разница между всеми этими потерями кросс-энтропии?

Керас говорит о

  • Двоичная кросс-энтропия
  • Категориальная кросс-энтропия
  • Разреженная категориальная кросс-энтропия

В то время как TensorFlow имеет

  • Кросс-энтропия Softmax с логитами
  • Редкая кросс-энтропия softmax с логитами
  • Сигмоидная кросс-энтропия с логитами

В чем различия и отношения между ними? Каковы их типичные приложения? Какая математическая подготовка? Есть ли другие типы кросс-энтропии, которые следует знать? Существуют ли кросс-энтропийные типы без логитов?


person ScientiaEtVeritas    schedule 21.06.2017    source источник
comment
См. 3 простых правила для большого пальца @ stackoverflow.com/questions/47034888/, и вы сможете быстро перемещаться по функции потерь в любой структуре.   -  person Allohvk    schedule 15.03.2021


Ответы (2)


Есть только одна перекрестная энтропия (энтропия Шеннона), определяемая как:

H(P||Q) = - SUM_i P(X=i) log Q(X=i)

При использовании машинного обучения P - это фактическое (достоверное) распределение, а Q - это прогнозируемое распределение. Все перечисленные вами функции - это просто вспомогательные функции, которые могут по-разному представлять P и Q.

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

  • существует либо 2 возможных исхода (бинарная классификация), либо более. Если есть только два результата, то Q(X=1) = 1 - Q(X=0), поэтому одно значение с плавающей запятой в (0,1) идентифицирует все распределение, поэтому нейронная сеть в двоичной классификации имеет один выход (как и логистическая регрессия). Если существует K> 2 возможных результатов, необходимо определить K выходов (по одному на каждый Q(X=...))

  • один либо производит правильные вероятности (это означает, что Q(X=i)>=0 и SUM_i Q(X=i) =1, либо один просто производит «оценку» и имеет некоторый фиксированный метод преобразования оценки в вероятность. Например, одно действительное число может быть «преобразовано в вероятность», взяв сигмоид, и набор действительных чисел можно преобразовать, взяв их softmax и так далее.

  • есть j такое, что P(X=j)=1 (есть один "истинный класс", цели "жесткие", например, "это изображение представляет кошку") или есть "мягкие цели" (например, "мы на 60% уверены, что это кошка, но на 40% это действительно собака »).

В зависимости от этих трех аспектов должны использоваться разные вспомогательные функции:

                                  outcomes     what is in Q    targets in P   
-------------------------------------------------------------------------------
binary CE                                2      probability         any
categorical CE                          >2      probability         soft
sparse categorical CE                   >2      probability         hard
sigmoid CE with logits                   2      score               any
softmax CE with logits                  >2      score               soft
sparse softmax CE with logits           >2      score               hard

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

Важно отметить, что если вы примените неправильную вспомогательную функцию, код обычно все равно будет выполняться, но результаты будут неверными. Например, если вы примените помощник softmax_ * для двоичной классификации с одним выходом, будет считаться, что ваша сеть всегда выдает «True» на выходе.

И последнее примечание: в этом ответе рассматривается классификация, она немного отличается, если вы рассматриваете случай с несколькими метками (когда одна точка может иметь несколько меток), поскольку тогда Ps не сумма равна 1, и следует использовать sigmoid_cross_entropy_with_logits, несмотря на наличие нескольких единиц вывода.

person lejlot    schedule 21.06.2017
comment
Прохладный! Было бы здорово, если бы мы знали, какие из них представляют функции потерь keras. - person Daniel Möller; 26.06.2017
comment
Я использовал соглашение об именах, совместимое с keras и TF, поэтому двоичная кросс-энтропия Keras - это двоичный CE из моей таблицы и так далее. - person lejlot; 26.06.2017

Логиты

Для этого логиты можно рассматривать как неактивированные выходы модели.

  • В то время как Keras потери всегда принимают активированный выход (вы должны применить сигмоид или softmax перед потерей)
  • Tensorflow принимает их с логитами или неактивными (не следует применять сигмоид или softmax до потери)

При проигрыше с логитами будет применяться внутренняя активация. Некоторые функции позволяют вам выбирать logits=True или logits=False, которые сообщают функции, применять или не применять активации.


Разреженный

  • Разреженные функции используют целевые данные (истинное значение) как целочисленные метки: 0, 1, 2, 3, 4 ...
  • Неразреженные функции используют целевые данные как горячие метки: [1,0,0], [0,1,0], [0,0,1]

Бинарная кроссэнтропия = сигмовидная кроссентропия

  • Problem type:
    • single class (false/true); or
    • неисключительный мультикласс (многие классы могут быть правильными)
  • Форма вывода модели: (batch, ..., >=1)
  • Активация: "sigmoid"

Категориальная кроссэнтропия = кроссэнтропия Softmax

  • Тип проблемы: эксклюзивные классы (правильным может быть только один класс)
  • Форма вывода модели: (batch, ..., >=2)
  • Активация: "softmax"
person Daniel Möller    schedule 30.01.2020
comment
Спасибо за отличный ответ. Однако почему keras называет его как CategoricalCrossEntropy, а тензорный поток называет его как Softmax Cross Entropy? Разве они не должны следовать одному и тому же соглашению об именах для одной и той же потери? - person thinkdeep; 03.01.2021
comment
Tensorflow применяет softmax за вас, а Керас - нет. - person Daniel Möller; 03.01.2021
comment
Согласно документации, Keras CategoryCrossEntropy также применяет softmax при настройке from_logits=True. Ссылка: keras.io/api/losses/probabilistic_losses/. - person thinkdeep; 03.01.2021