Имеет ли значение сигмовидная функция в нейронной сети?

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

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам