Если у вас много узлов, где значение x находится вне поля -10 .. + 10, вы можете просто пропустить вычисление этих значений вообще, например, так.
if( x < -10 )
y = 0;
else if( x > 10 )
y = 1;
else
y = 1 / (1 + Math.exp(-x));
return y;
Конечно, это приводит к накладным расходам на условные проверки для КАЖДОГО вычисления, так что это имеет смысл, только если у вас много насыщенных узлов.
Еще одна вещь, о которой стоит упомянуть: если вы используете обратное распространение и вам приходится иметь дело с наклоном функции, лучше вычислять ее по частям, а не «как написано».
Я не могу вспомнить наклон в данный момент, но вот что я говорю, используя в качестве примера биполярную сигмовидную кишку. Вместо того, чтобы вычислять таким образом
y = (1 - exp(-x)) / (1 + exp(-x));
, который дважды вызывает exp (), вы можете кэшировать дорогостоящие вычисления во временных переменных, например
temp = exp(-x);
y = (1 - temp) / (1 + temp);
Есть много мест, где можно использовать подобные вещи в сетях BP.