我看到这个问题已经存在 3 年了,所以我的回答可能对你来说不是最相关的,但对于任何偶然发现这个问题并寻找答案的人来说:
这在很大程度上取决于使用的损失函数、优化器和激活函数的类型。我将主要从分类的角度讲,因为我在这方面有更多经验,不要误导。
如何解决这个问题可能会有所不同,因为 1% 的稀疏性可能意味着这些矩阵由 99 个 0 元素和单个 1 元素填充(1.)。这可以以比 990 个零元素和 10 个值为 1 (2.) 的元素的情况高得多的精度来解决。
如果是前者,对我来说一个合理的解决方法似乎是在 输出 上使用 softmax 激活函数,以确保输出值的总和介于 0 和 1 之间,伴随着 分类交叉熵 损失和一些现代优化器(我更喜欢 Adam)。
在后一种情况下,我们不能使用 softmax,因为输出上有更多的 1 值元素,因此输出层元素的总和不能为 1。出于同样的原因,我们不能使用分类交叉熵。在这种情况下,输出层上的sigmoid激活函数、二元交叉熵损失和Adam优化器应该能够轻松克服了预测全零向量的巨大便利性。
此处在非常高的稀疏度下的相关考虑可能是尝试以一种方式制定您自己的损失,即正确预测零值将在损失中被视为由非零值的准确性加权。这样,神经网络将不关心零值的准确性,直到非零值的准确性很高。考虑一个非常原始的损失 A,定义为,
A=A1+A1A0,
其中 A1 是非零值的准确度,A0 是零值的准确度。有了这种损失,预测正确值为 [0,1,0,0,0,0,0] 的 [0,0,0,0,0,0,0] 将使我们的准确度为 0 ,这使得以前的局部最小值相当陡峭。