Какую функцию потери я должен использовать для двоичного обнаружения в обнаружении лица / не лица в CNN?

11

Я хочу использовать глубокое обучение для обучения двоичному обнаружению лица / лица, какую потерю я должен использовать, я думаю, что это SigmoidCrossEntropyLoss или Hinge-loss .

Это правильно, но мне также интересно, должен ли я использовать softmax, но только с двумя классами?

user824624
источник

Ответы:

9

Потеря шарнира и перекрестная энтропия обычно имеют сходные результаты. Вот еще один пост, в котором сравниваются различные функции потерь. Каково влияние выбора различных функций потерь в классификации, чтобы приблизить потери 0-1 .

Это правильно, но мне также интересно, должен ли я использовать softmax, но только с двумя классами?

Softmax - это не потеря, а функция нормализации, она часто используется вместе с кросс-энтропийной потерей, которая по существу эквивалентна SigmoidCrossEntropyLoss. См. Также Кросс-энтропия или логарифмическая вероятность в выходном слое.

dontloo
источник
7

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

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

Вот пара ссылок для вас. Надеюсь, они помогут.
https://en.wikipedia.org/wiki/Cross_entropy#Cross-entropy_error_function_and_logistic_regression
http://neuralnetworksanddeeplearning.com/chap3.html
https://www.quora.com/How-do-you-decide-which-loss- функция в использовании-для-машинного обучения

Армен Агаджанян
источник
Не могли бы вы пролить свет на логистическую регрессию на последнем уровне DNN? Я прочитал посты, но не вижу смысла sigmoid(как активация последнего слоя). Спасибо
bit_scientist
2

Вы можете определенно использовать softmax только с 2 классами «Face» и «Not Face» и интерпретировать вывод softmax как показатель достоверности, что является хорошей функцией, чтобы получить некоторую интуицию о вашей глубокой сети.

Попробуйте как 2-х классную softmax, так и бинарную потерю шарнира. Недавно была опубликована статья Deep Learning с использованием линейных опорных векторных машин, использующая SVM вместо классификатора softmax поверх глубоких сетей, и там есть некоторые многообещающие результаты.

Инди AI
источник
2

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

elgehelge
источник
Вы должны обновить свою первую ссылку.
nbro
0

Теоретически, softmax с 2 классами может быть переписан как сигмоид, следовательно, не должно быть разницы в результатах между ними. Практически, как упоминалось в @dontloo, количество параметров в выходном слое будет двойным (не уверен, может ли это привести к каким-либо проблемам с перенастройкой), и, конечно, у вас будет 2 балла для двух классов (Face и Non_Face).

aknnka
источник