Я делаю ANN с использованием python и приступил к обратному распространению. Вскоре я столкнулся с проблемой вычисления дельта-значения смещения. Это стало проблемой, потому что я использую сигмовидную функцию, производная которой (sigmoid(x)*(1-sigmoid(x))
) возвращает 0, когда значение активации равно 1. Я что-то здесь упустил? Проблема с тем, что он всегда возвращает 0, заключается в том, что дельта также будет равна 0, поэтому я не смогу обратно распространять веса смещений.
Вычисление дельты смещения с использованием производной сигмовидной функции всегда дает 0
Ответы (1)
Производная сигмовидной функции должна возвращать около 0 только для очень больших значений, таких как x>5
или x<-5
.
Мой калькулятор показывает, что производная сигмовидной функции равна ~0.1966
для ввода 1.
Не видя кода, я не могу точно сказать, в чем проблема, но вот несколько возможных вещей, которые можно проверить:
- Сигмовидная функция может быть неправильно реализована
- Где-то есть целочисленное деление
- Числовое округление до нуля
person
Zackatoo
schedule
04.11.2020
Это имеет смысл, но на самом деле происходит то, что мой ввод не равен 1, потому что я работаю со смещениями, я устанавливаю сигмоид на возврат 1. Поэтому всякий раз, когда я вызываю функцию, она возвращает 1, если это смещение. И это заканчивается тем, что возвращается 0, вызывая его производную
- person TomyXz; 04.11.2020
Вы установили сигмовидную функцию, чтобы она возвращала 1? Тогда, конечно, производная вернет ноль, потому что 1 * (1 - 1) всегда будет возвращать ноль. Сигмовидная функция должна возвращать 1 только тогда, когда x приближается к положительной бесконечности. Почему вы всегда настраиваете сигмовидную функцию на возврат 1?
- person Zackatoo; 04.11.2020
Не всегда, только при работе с нейроном смещения, потому что это весь трюк, предполагается, что его значение активации равно 1.
- person TomyXz; 04.11.2020