Я пишу базовую нейронную сеть на Java и пишу функции активации (в настоящее время я только что написал сигмовидную функцию). Я пытаюсь использовать double
s (в отличие от BigDecimal
) в надежде, что обучение действительно займет разумное количество времени. Однако я заметил, что функция не работает с большими входными данными. В настоящее время моя функция:
public static double sigmoid(double t){
return (1 / (1 + Math.pow(Math.E, -t)));
}
Эта функция возвращает довольно точные значения вплоть до t = -100
, но когда t >= 37
функция возвращает 1.0
. Хорошо ли это в типичной нейронной сети, когда ввод нормализуется? Будет ли нейрон когда-либо получать входные данные, сумма которых превышает ~37? Если размер суммы входных данных, подаваемых в функцию активации, варьируется от NN до NN, какие факторы влияют на нее? Кроме того, есть ли способ сделать эту функцию более точной? Есть ли более точная и/или более быстрая альтернатива?