我正在用 Java 编写一个基本的神经网络,并且正在编写激活函数(目前我刚刚编写了 sigmoid 函数)。我正在尝试使用double
s (与 sBigDecimal
相对),希望培训实际上需要合理的时间。但是,我注意到该函数不适用于较大的输入。目前我的功能是:
public static double sigmoid(double t){
return (1 / (1 + Math.pow(Math.E, -t)));
}
这个函数返回非常精确的值,一直到 when t = -100
,但是当t >= 37
函数返回时1.0
。在一个典型的神经网络中,当输入被归一化时这很好吗?神经元会得到总和超过 37 的输入吗?如果输入到激活函数中的输入总和的大小从 NN 到 NN 不同,有哪些因素会影响它?另外,有什么方法可以使这个函数更精确吗?是否有更精确和/或更快的替代方案?