神经网络能够从零输入中学习吗?

机器算法验证 神经网络 缺失数据
2022-04-08 00:34:11

Francois Chollet 在他的“使用 Python 进行深度学习”一书中说:“使用神经网络,将缺失值输入为 0 是安全的,条件是 0 还不是一个有意义的值。网络将从暴露于数据中学习值 0 表示缺少数据,并将开始忽略该值。”

据我所知,输入值 0 在神经网络中没有任何影响,因为它在乘法后取消了相应的权重。所以,

Q1。为什么 Chollet 说网络会学会忽略价值?我觉得没必要学;网络将在不学习的情况下忽略值 0!

Q2。为什么他说“条件是 0 还不是一个有意义的值。正如我所说,值 0 不能具有任何意义,因为它在网络中没有任何影响。

2个回答

您不应将输入层中节点中的零值(可以很好地影响与其连接的节点)与权重为零的连接(不影响连接末端的节点)。他说的是前者,而您似乎将其误解为第二件事。

由于有足够多的层和节点,神经网络可以近似任意复杂的变换,它最终可以确定零的处理方式应该与任何其他值完全不同。从这个意义上说,如果没有观察到的值永远为零,那么该陈述是正确的。当然,您可以使用数据中永远不会出现的任何其他值。

当然,可能存在这样的问题:这是否是最有效的方法,如果您可以先进行一些非常好的估算,如果您的训练集非常小,这可能是一个好主意。例如,神经网络可能需要大量的训练数据来学习如何处理这样的缺失数据,如果训练数据中没有或几乎没有缺失数据可能会出现问题,但是神经网络在实践中会遇到这种情况。在这种情况下,事情可能会出现严重错误——例如,如果神经网络已经学会了属性大小(输入)和属性值(我们试图预测的)之间的某种线性关系,并且在训练数据中,属性大小始终至少为 200平方米,那么我不想知道如果您将未知属性大小编码为 0(可能接近于该属性的零值,可能是负值,也可能是某个非常低的正数,谁知道...),神经网络会预测什么。另一方面,如果您的训练数据非常庞大,并且在很多情况下都会出现任何可能的缺失,那么这很可能不再是问题。

事实上,OP 的直觉是正确的,一个正好为零的输入值会阻止网络从中学习一些东西。解决方案将在梯度逆向传播算法中找到。之前的权重和新的权重之间的差值是多个项的乘积,具体取决于您使用的学习算法。它的一个术语总是前一个神经元的值。因此,如果输入值为零,则所有连接的权重在此迭代中都不会改变。

让我们在这里更正式一点。Letw1是迭代t中的任意权重,我们希望得到w2,新权重,在反向传播后,在前向传播结束时计算的误差定义为:

f1

其中,十一前一层神经元的输出值、e1当前神经元的部分误差(取决于学习算法)和亩学习率。如果十一为零,则没有权重修改。

这是错误反向传播的经典公式,显然现在事情变得更加复杂,因为我们批量训练样本并且学习算法不断发展,但为了简单起见,我们可以得出结论,用零替换缺失值是完全安全的。