верно, я не заметил обновления :) Благодаря вам вы сделали исчерпывающий вывод.

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

В тензорном потоке есть как минимумдюжина различных функций кросс-энтропийной потери:

tf.losses.softmax_cross_entropytf.losses.sparse_softmax_cross_entropytf.losses.sigmoid_cross_entropytf.contrib.losses.softmax_cross_entropytf.contrib.losses.sigmoid_cross_entropytf.nn.softmax_cross_entropy_with_logitstf.nn.sigmoid_cross_entropy_with_logits...

Какие из них работают только для бинарной классификации, а какие подходят для многоклассовых задач? Когда вы должны использоватьsigmoid вместоsoftmax? Какsparse функции отличаются от других и почему это толькоsoftmax?

Связанное (более ориентированное на математику) обсуждение:кросс-энтропийные джунгли.

 mrgloom28 окт. 2018 г., 13:23
Также у нас естьtf.losses.log_lossна самом деле это только для бинарной кроссентропии. Такжеgithub.com/tensorflow/tensorflow/issues/2462

Ответы на вопрос(1)

Решение Вопроса
Предварительные факты

сигмоид является частичным случаем функции softmax, когда число классов равно 2. Оба они выполняют одну и ту же операцию: преобразуют логиты (см. ниже) в вероятности.

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

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

Наименование Tensorflow немного странно:все функции ниже принимают логиты, а не вероятностии сами примените преобразование (которое просто более эффективно).

Сигмовидная функция семьиtf.nn.sigmoid_cross_entropy_with_logitstf.nn.weighted_cross_entropy_with_logitstf.losses.sigmoid_cross_entropytf.contrib.losses.sigmoid_cross_entropy (Устаревшее)

Как говорилось ранее,sigmoid Функция потерь для двоичной классификации. Но функции тензорного потока имеют более общий характер и позволяют проводить мультиметочную классификацию, когда классы независимы. Другими словами,tf.nn.sigmoid_cross_entropy_with_logits решаетN бинарные классификации сразу.

Метки должны иметь горячее кодирование или могут содержать вероятности мягкого класса.

tf.losses.sigmoid_cross_entropy кроме того, позволяет установитьвеса в партиисделать некоторые примеры более важными, чем другие.tf.nn.weighted_cross_entropy_with_logits позволяет установитькласс весов (помните, что классификация является бинарной), то есть делайте положительные ошибки больше, чем отрицательные. Это полезно, когда данные тренировки не сбалансированы.

Softmax семейство функцийtf.nn.softmax_cross_entropy_with_logits (УСТАРЕЛО В 1.5)tf.nn.softmax_cross_entropy_with_logits_v2tf.losses.softmax_cross_entropytf.contrib.losses.softmax_cross_entropy (Устаревшее)

Эти функции потерь должны использоваться для полиномиальной взаимоисключающей классификации, то есть выбрать одну изN классы. Также применимо, когдаN = 2.

Метки должны иметь горячее кодирование или могут содержать мягкие вероятности класса: конкретный пример может принадлежать классу A с вероятностью 50% и классу B с вероятностью 50%. Обратите внимание, что строго говоря, это не означает, что он принадлежит обоим классам, но можно интерпретировать вероятности таким образом.

Прямо как вsigmoid семья,tf.losses.softmax_cross_entropy позволяет установитьвеса в партиисделать некоторые примеры более важными, чем другие. Насколько я знаю, в тензорном потоке 1.3 нет встроенного способа установитькласс весов.

[UPD] В тензорном потоке 1,5,v2 версиябыл представлен и оригиналsoftmax_cross_entropy_with_logits потеря стала устаревшей. Единственная разница между ними заключается в том, что в более новой версии обратное распространение происходит как в логитах, так и в метках (вот обсуждение почему это может быть полезно).

Семейство разреженных функцийtf.nn.sparse_softmax_cross_entropy_with_logitstf.losses.sparse_softmax_cross_entropytf.contrib.losses.sparse_softmax_cross_entropy (Устаревшее)

Как обычныйsoftmax выше, эти функции потерь должны использоваться для многочленной взаимоисключающей классификации, то есть выбрать одну изN классы. Разница заключается в кодировке меток: классы указываются как целые числа (индекс класса), а не как горячие векторы. Очевидно, что это не разрешает мягкие классы, но может сэкономить память, когда существуют тысячи или миллионы классов. Тем не менее, обратите внимание, чтоlogits аргумент должен по-прежнему содержать логиты для каждого класса, поэтому он потребляет как минимум[batch_size, classes] Память.

Как и выше,tf.losses версия имеетweights аргумент, который позволяет установить весовые коэффициенты в партии.

Выборочные софтмакс функции семействаtf.nn.sampled_softmax_losstf.contrib.nn.rank_sampled_softmax_losstf.nn.nce_loss

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

Аргументыweights а такжеbiases укажите отдельный полностью связанный слой, который используется для вычисления логитов для выбранного образца.

Как и выше,labels закодированы не в горячем виде, а имеют форму[batch_size, num_true].

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

Еще одна альтернативная потеряtf.nn.nce_loss, который выполняетшумоконтрастная оценка (если вам интересно, посмотрите этоочень подробное обсуждение). Я включил эту функцию в семейство softmax, потому что NCE гарантирует приближение к softmax в пределе.

 SumNeuron05 дек. 2018 г., 14:30
Могу ли я попросить разъяснений относительно перекрестной энтропии сигмовидной кишки (sigCE)? Если это решает дляN Задачи бинарной классификации сразу, естьN = prod(output.shape)например,shape = [batch, examples, channels]; N = (batch * examples * channels)? Еслиtf.losses ожидать "logits" (вывод по сети), я должен также вернуть вероятности для простоты использования? не могли бы вы взглянуть наstackoverflow.com/questions/53612973/...

Ваш ответ на вопрос