Предварительные факты
В функциональном смысле сигмоид является частным случаем функции softmax, когда количество классов равно 2. И то, и другое. из них выполняют ту же операцию: преобразуют логиты (см. ниже) в вероятности.
В простой двоичной классификации между ними нет большой разницы, однако в случае полиномиальной классификации сигмоид позволяет иметь дело с неисключительными метками (также известными как мульти-метки), а softmax имеет дело с эксклюзивными классами ( см. ниже).
logit (также называемый оценкой) - это необработанное немасштабированное значение, связанное с классом перед вычислением вероятности. С точки зрения архитектуры нейронной сети это означает, что логит является выходом плотного (полностью связанного) слоя.
Именование Tensorflow немного странно: все нижеприведенные функции принимают логиты, а не вероятности, и сами применяют преобразование (что просто более эффективно).
Семейство сигмовидных функций
Как указывалось ранее, функция потерь sigmoid
предназначена для двоичной классификации. Но функции тензорного потока являются более общими и позволяют выполнять классификацию с несколькими метками, когда классы независимы. Другими словами, tf.nn.sigmoid_cross_entropy_with_logits
решает N
двоичные классификации сразу.
Метки должны быть закодированы в горячем режиме или могут содержать вероятности мягких классов.
tf.losses.sigmoid_cross_entropy
, кроме того, позволяет устанавливать веса пакета, то есть делать одни примеры более важными, чем другие. tf.nn.weighted_cross_entropy_with_logits
позволяет устанавливать веса классов (помните, что классификация бинарная), т.е. делать положительные ошибки больше, чем отрицательные. Это полезно, когда данные тренировки несбалансированы.
Семейство функций Softmax
Эти функции потерь следует использовать для полиномиальной взаимоисключающей классификации, т.е. выбрать один из N
классов. Также применимо, когда N = 2
.
Этикетки должны быть закодированы в горячем режиме или могут содержать вероятности мягкого класса: конкретный пример может принадлежать классу A с вероятностью 50% и классу B с вероятностью 50%. Обратите внимание, что, строго говоря, это не означает, что он принадлежит обоим классам, но можно интерпретировать вероятности таким образом.
Как и в семействе sigmoid
, tf.losses.softmax_cross_entropy
позволяет устанавливать веса пакета, то есть делать одни примеры более важными, чем другие. Насколько мне известно, в тензорном потоке 1.3 нет встроенного способа установки весов классов.
[UPD] В tensorflow 1.5 была представлена v2
версия и исходная softmax_cross_entropy_with_logits
потеря устарела. Единственная разница между ними заключается в том, что в более новой версии обратное распространение происходит как в логиты, так и в метки (здесь обсуждается, почему это может быть полезно).
Семейство разреженных функций
Как и обычные softmax
, указанные выше, эти функции потерь следует использовать для полиномиальной взаимоисключающей классификации, то есть для выбора одного из N
классов. Разница заключается в кодировке меток: классы указываются как целые числа (индекс класса), а не как горячие векторы. Очевидно, это не позволяет использовать мягкие классы, но может сэкономить некоторую память, когда существуют тысячи или миллионы классов. Однако обратите внимание, что аргумент logits
должен по-прежнему содержать логиты для каждого класса, поэтому он потребляет не менее [batch_size, classes]
памяти.
Как и выше, версия tf.losses
имеет аргумент weights
, который позволяет устанавливать веса в пакете.
Семейство выборочных функций softmax
Эти функции предоставляют еще одну альтернативу работе с огромным количеством классов. Вместо вычисления и сравнения точного распределения вероятностей они вычисляют оценку потерь на основе случайной выборки.
Аргументы weights
и biases
определяют отдельный полностью связанный уровень, который используется для вычисления логитов для выбранной выборки.
Как и выше, labels
не кодируются горячим способом, а имеют форму [batch_size, num_true]
.
Выборочные функции подходят только для обучения. Во время тестирования рекомендуется использовать стандартную потерю softmax
(либо разреженную, либо горячую), чтобы получить фактическое распределение.
Другой альтернативный вариант потерь - tf.nn.nce_loss
, который выполняет контрастную оценку шума (если вам интересно, см. очень подробное обсуждение). Я включил эту функцию в семейство softmax, потому что NCE гарантирует приближение к softmax в пределе.
person
Maxim
schedule
31.10.2017
tf.losses.log_loss
, на самом деле это только для бинарной кроссентропии. Также github.com/tensorflow/tensorflow/issues/2462 - person mrgloom   schedule 28.10.2018