Python 中大数的 S 形函数

Sigmoid function for large numbers in Python

我正在使用 Sigmoid 激活函数执行神经网络任务。我的网络输入是图像(MNIST 数据集),因为每个图像的维度是 28*28,当我必须将它们转换为矢量时,我将有 N*784 矩阵。这个大矩阵与权重矩阵相乘会产生很大的权重正数和负数,我必须将它们传递给 Sigmoid 函数。我使用 expit() 作为 sigmoid 函数,我的问题是:

30 之前的数字在 expit() 中接近 1。例如 expit(28) 结果 0.99999999expit(29) 结果 1.0 和上 29 也得到 1。但是我的新权重更高 30 并且因此他们中的一些人在第一个学习周期中得到 1 和一些 0 实际上根本没有任何学习。

我必须做什么? Sigmoid's上限是29?我不能改变它吗?我必须改变我的图像尺寸来克服这个问题吗?

正如评论部分所讨论的那样,真正的问题原来是使用 sigmoid 本身,它不适合这种情况。在任何有限精度计算中都会遇到所描述的问题,一个系统有 29 个系统,另一个系统有 38 个系统。

解决该问题的一种方法是使用 softmax 激活函数,它不太容易受到此类问题的影响。请注意,对于成本函数,您可能会遇到类似的挑战。

稍微偏离主题,但您可能想检查问题是如何解决的,例如tensorflow。它为初学者提供了一些不错的教程。