В случае, если численная стабильность является проблемой, существует другая возможность: при условии, что у вас есть хорошая реализация доступной сигмоиды (например, в scipy ), вы можете реализовать ее как:
from scipy.special import expit as sigmoid
def sigmoid_grad(x):
fx = sigmoid(x)
return fx * (1 - fx)
Обратите внимание, что это математически эквивалентно другому выражению.
В моем случае это решение работало, в то время как прямая реализация вызывала переполнение с плавающей запятой при вычислении exp(-x)
.