Вычисление дельты смещения с использованием производной сигмовидной функции всегда дает 0

Я делаю ANN с использованием python и приступил к обратному распространению. Вскоре я столкнулся с проблемой вычисления дельта-значения смещения. Это стало проблемой, потому что я использую сигмовидную функцию, производная которой (sigmoid(x)*(1-sigmoid(x))) возвращает 0, когда значение активации равно 1. Я что-то здесь упустил? Проблема с тем, что он всегда возвращает 0, заключается в том, что дельта также будет равна 0, поэтому я не смогу обратно распространять веса смещений.


person TomyXz    schedule 04.11.2020    source источник


Ответы (1)


Производная сигмовидной функции должна возвращать около 0 только для очень больших значений, таких как x>5 или x<-5.

Мой калькулятор показывает, что производная сигмовидной функции равна ~0.1966 для ввода 1.

Не видя кода, я не могу точно сказать, в чем проблема, но вот несколько возможных вещей, которые можно проверить:

  • Сигмовидная функция может быть неправильно реализована
  • Где-то есть целочисленное деление
  • Числовое округление до нуля
person Zackatoo    schedule 04.11.2020
comment
Это имеет смысл, но на самом деле происходит то, что мой ввод не равен 1, потому что я работаю со смещениями, я устанавливаю сигмоид на возврат 1. Поэтому всякий раз, когда я вызываю функцию, она возвращает 1, если это смещение. И это заканчивается тем, что возвращается 0, вызывая его производную - person TomyXz; 04.11.2020
comment
Вы установили сигмовидную функцию, чтобы она возвращала 1? Тогда, конечно, производная вернет ноль, потому что 1 * (1 - 1) всегда будет возвращать ноль. Сигмовидная функция должна возвращать 1 только тогда, когда x приближается к положительной бесконечности. Почему вы всегда настраиваете сигмовидную функцию на возврат 1? - person Zackatoo; 04.11.2020
comment
Не всегда, только при работе с нейроном смещения, потому что это весь трюк, предполагается, что его значение активации равно 1. - person TomyXz; 04.11.2020