在给定反向输入的情况下,如何强制 NN 输出相同的输出?

数据挖掘 深度学习 机器学习模型 权重初始化
2022-03-06 01:54:12

我想选择一种可以处理输入对称性的架构。

作为输入,我有一个 0 和 1 的序列,比如 [1, 1, 1, 0, 1, 0],在输出层我有 N 个神经元输出一个分类分布,比如 [0.3, 0.4, 0.3]。

当我提供反向副本时,如何强制 NN 输出相同的分布,即 [1, 1, 1, 0, 1, 0]?

一个简单的方法只需学习两次:

feed straight [1, 1, 1, 0, 1, 0] -> [0.3, 0.4, 0.3]
feed reverse  [0, 1, 0, 1, 1, 1] -> [0.3, 0.4, 0.3] 

或者,还有更多“优雅”的方式?我应该使用什么类型的架构,或者我可能需要使用损失函数?

1个回答

通用和稳健的方法是使用每个样本的“镜像”将训练集加倍。从统计学习的角度来看,这也是一种合理的方法。

可能有一些对称方法可以破解NN 架构(例如通过对称网络),但这些方法通常非常脆弱并且不能很好地泛化,而上述方法很健壮,可以让网络根据需要进行自我调整。

一种类似但更便宜的方法是在将样本输入网络之前对其进行分类。例如,对于您的示例:

如果您有此输入[1, 1, 1, 0, 1, 0],则已排序的相关镜像输入(按字典顺序)是[0, 1, 0, 1, 1, 1](反向)。因此,您只训练 NN 排序的词典输入,然后在测试每个样本之前将其转换为排序的词典相关输入(通过反转它)(如果它尚未采用该形式)。

因此,您可以在训练之前和测试之前有效地对样本进行归一化(必要时通过反转它们)。这类似于将训练集加倍的方法,只是它更便宜(并且在实践中完全准确,而将训练集加倍只是理论上准确,在实践中可能存在差异)。