Почему у этой нейронной сети XOR 2 выхода?

Обычно простая нейронная сеть для решения XOR должна иметь 2 входа, 2 нейрона в скрытом слое, 1 нейрон в выходном слое.

Однако в следующем примере реализации есть 2 выходных нейрона, и я этого не понимаю:

https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/feedforward/xor/XorExample.java

Почему автор поместил туда 2 выходных нейрона?

Изменить: Автор примера отметил, что он использует 4 нейрона в скрытом слое, 2 нейрона в выходном слое. Но я до сих пор не понимаю, почему, почему форма {4,2} вместо {2,1}?


person datdinhquoc    schedule 11.05.2017    source источник
comment
Он объяснил это в комментариях вверху. (другой вопрос, насколько хорошо это объяснение с точки зрения формальной математики)   -  person sascha    schedule 12.05.2017
comment
Для всех будущих вопросов, JFYI, на канале Gitter есть активное сообщество разработчиков: gitter.im/deeplearning4j/deeplearning4j   -  person racknuf    schedule 13.05.2017
comment
да, эта чат-комната интересная, какой-то парень помог мне, как сопоставить функцию активации с функцией потери   -  person datdinhquoc    schedule 13.05.2017


Ответы (3)


Это называется горячим кодированием. Идея состоит в том, что у вас есть один нейрон на класс. Каждый нейрон дает вероятность этого класса.

Я не знаю, почему он использует 4 скрытых нейрона. 2 должно хватить (если не ошибаюсь).

person Martin Thoma    schedule 12.05.2017
comment
я считаю, что горячая кодировка хороша только тогда, когда у нас не так много классов для классификации - person datdinhquoc; 12.05.2017
comment
да, я не знаю, почему он тоже использует 4 скрытых нейрона, я изменил на 2, и он все еще работает отлично! - person datdinhquoc; 12.05.2017
comment
потому что в выходном слое было бы слишком много горячих нейронов, я не знаю, но что, если нам нужно классифицировать такое количество - person datdinhquoc; 12.05.2017
comment
@johnlowvale Я больше ничего не видел. Наибольшее количество классов, о которых я знаю, - 1000 для ImageNet. Одноразовое кодирование здесь не проблема. - person Martin Thoma; 12.05.2017
comment
Это тоже вызвало у меня некоторое замешательство. Первые два числа расположены в таблице 4 на 2. Третье число (выключенное само по себе) - это значение, которое нужно разместить в этой координате. - person Adam Gerard; 30.03.2019

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

person Shaido    schedule 12.05.2017
comment
Я спросил одного парня в чате deeplearning4j, он сказал, что это из-за функции активации softmax на выходном уровне - person datdinhquoc; 12.05.2017

Было бы полезно думать об этом так:

Training Set        Label Set

    0 | 1               0 | 1
0 | 0 | 0          0 |  0 | 1
1 | 1 | 0          1 |  1 | 0
2 | 0 | 1          2 |  1 | 0
3 | 1 | 1          3 |  0 | 1

Итак, [[0,0], 0], [[0,1], 0] и т. Д. Для обучающего набора.

Если вы используете набор меток из двух столбцов, 0 и 1 соответствуют true или false.

Таким образом, [0,0] правильно отображается в false, [1,0] правильно отображается в true и т. Д.

Здесь можно найти довольно хорошую статью, которая немного изменяет оригинал: https://medium.com/autonomous-agents/how-to-teach-logic-to-your-neuralnetworks-116215c71a49

person Adam Gerard    schedule 30.03.2019