这是一个非常重要的问题,通常被忽视。实际上,在训练神经网络时,通常会隐含假设数据是独立且同分布的,也就是说,您不希望数据来自与训练数据所来自的分布不同的分布,因此还有隐含假设数据来自同一分布族(例如只有高斯分布),并且所有训练示例都独立地来自同一分布(特定均值和方差)。当然,这是一个很大的限制!
您的问题的部分解决方案是使用贝叶斯神经网络(BNN)。BNN 的想法是将分布(通常是高斯分布)与神经网络的每个单元(或神经元)相关联,而不是单个数字。因此,对于网络的每个单元,有两个可学习的参数:高斯分布的均值和方差。因此,BNN 的参数数量通常是传统(或非贝叶斯)神经网络的两倍。但是,通过学习每个参数的分布,您还可以根据可用的训练数据了解每个单元的潜在真实值的不确定性。
这种 BNN 的前向传递是随机的,即您从每个前向传递的每个高斯分布中采样,因此网络的输出也是随机的(即给定相同的输入示例,每次输出可能不同)。
如果您的数据集很小,人们期望 BNN 具有宽高斯分布,即单位的真实值的不确定性很高。因此,人们期望 BNN 能够更稳健地处理意外输入。更准确地说,如果你用一个小数据集训练一个 BNN,希望高斯分布会很宽,因此 BNN 的输出将是高度可变的(即模型是高度不确定的)。收集的数据越多,BNN 的不确定性就越小。
这并不能完全解决您的问题,但它至少应该减轻它,即如果您向 BNN 提供一个看不见的示例,那么理想情况下它应该不确定该输入的实际标签。
为简单起见,我没有解释 BNN 的某些细节,但至少,这个答案为您提供了一个潜在的解决方案。当然,这并不排除存在“未知”类的可能性。这些方法并不相互排斥。可能还有其他解决方案,但我不知道。