2017-02-21 17 views
2

Я пытаюсь построить нейронную сеть на питоне, используя Keras с пользовательской потерей, и я блуждал, имеет ли сигмоида функция активации в последнем слое и имеет сигмоид в начале пользовательской потери тот же или не. Так вот что я имею в виду, что:Имеет ли место сигмоидная функция в нейронной сети?

enter image description here

У меня есть ощущение, что во второй модели потеря рассчитывается, но не обратно распространяются через сигмовидный то время в первой модели он есть. Это правильно?

+0

Не могли бы вы предоставить нам код, который вы используете - на самом деле это действительно интересно. –

ответ

3

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

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

Объясняя себя с простого случая: у вас есть метки в двоичной форме сказать тензором [0, 0, 1, 0] Если сигмовидной находится внутри вашей пользовательской функции потерь, вы можете иметь результаты, которые выглядят как этот [-100, 0, 20, 100], сигмовидной в вашей потере преобразит это во что-то похожее примерно как tihs: [0, 0.5, 1, 1] Ошибка, которая будет возвращена обратно, будет [0, -0.5, 0, -1]. Обратное распространение будет не учитывать сигмоид, и вы примените эту ошибку непосредственно к выходу. Вы можете видеть, что величина ошибки не отражает всю величину ошибки выхода: последнее значение равно 100 и должно быть на отрицательной территории, но модель будет возвращать небольшую ошибку -1 на этом уровне.

Подводя итог, сигмоид должен находиться в сети, так что обратное распространение учитывает его при обратном прохождении ошибки.

+0

Удивительно! Спасибо за ваш ответ. Я очень ценю это. – DalekSupreme