Разница в использовании сигмовидной функции активации вместо линейной активации и использовании сигмовидной кишки в потере

Я новичок в функциях потерь, и у меня есть проблема с двоичной классификацией 800 (что означает 800 нейронов на выходе, на которые не влияют друг друга - вероятность каждого равна 0 или 1). Теперь посмотрим на документацию: https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits

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

Я смотрю на функцию потерь для активации soft-max, и применяется аналогичный подход. Мне интересно, почему функция активации не добавляется к выходам сети, а функция потерь получает линейные выходы (логиты), а в функции потерь применяется активация.


person Yahya Nik    schedule 17.06.2019    source источник
comment
Нет большой причины. Сигмоид используется в потере 1), чтобы сэкономить вам один шаг в другом месте 2) чтобы убедиться, что каждый вход в потерю нормализован, таким образом, между (0,1).   -  person greeness    schedule 18.06.2019
comment
@greeness Применение линейных логитов создало проблемы в функции потерь, которые обсуждаются в файле справки, упомянутом в вопросе, которые можно было предотвратить. Мне нужно взять сигмоид при развертывании модели, поэтому я считаю, что это меня ничего не спасет. 2) он не нормализован, входные данные функции потерь могут быть отрицательными, как указано в том же файле справки.   -  person Yahya Nik    schedule 18.06.2019
comment
если вам не нужно это удобство (на самом деле это неприятно для вас), просто используйте другую заранее заданную потерю (tf.losses.log_loss ) или сделайте ее для себя. :)   -  person greeness    schedule 18.06.2019
comment
Понятно, спасибо за комментарий.   -  person Yahya Nik    schedule 18.06.2019


Ответы (3)


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

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

если вам не нужно это удобство (на самом деле это неприятно для вас), просто используйте другую заранее заданную потерю (tf.losses.log_loss) или сделайте ее для себя. :)

person greeness    schedule 18.06.2019

Наивное применение sigmoid / softmax и кросс-энтропии численно нестабильно. Это связано с exp в сигмоиде и log в softmax. Вы можете столкнуться с проблемами переполнения / недостаточного заполнения, что может привести к тому, что будут взяты такие вещи, как log(0) (что приведет к -inf). Чтобы избежать этого, функции кросс-энтропии используют «более разумную» формулировку, основанную непосредственно на логитах, используя тот факт, что log(exp(x)) == x. Вы всегда должны использовать эти функции, чтобы избежать числовых проблем. Если вам нужны фактические вероятности в другом месте, вы все равно можете просто применить sigmoid / softmax в этих точках.

person xdurch0    schedule 18.06.2019
comment
У меня была проблема с журналом (0), и поэтому я изучил реализацию этих функций тензорным потоком. Tf.losses.log_loss, упомянутый @greeness, также имеет эпсилон для устранения проблем. Кажется, они реализовали и то, и другое. - person Yahya Nik; 18.06.2019

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

person DmytroSytro    schedule 18.06.2019