我们如何构建一个对输入排列不变的神经网络?

人工智能 神经网络 机器学习 参考请求 网络设计
2021-10-24 19:56:45

给定一个神经网络f作为输入n数据点:x1,,xn. 我们说f排列不变的,如果

f(x1...xn)=f(σ(x1...xn))

对于任何排列σ.

我们如何建立这样的神经网络?输出可以是任何东西(例如数字或向量),只要它不依赖于输入的顺序即可。有没有关于这些类型的神经网络的研究工作?

4个回答

以下是您可能正在寻找的一些内容:

传统上,由于网络的结构方式,每个输入都有一组权重,这些权重连接到更多输入。如果输入切换,输出也会切换。

方法一

但是,您可以构建一个接近此行为的网络。在您的训练集中,使用批量学习,并且对于每个训练样本,为网络提供所有可能的排列,以便它学会排列不变。这永远不会完全不变,它可能很接近。

方法二

另一种方法是为所有输入复制权重。例如,假设您有 3 个输入(i0,i1,i2),下一个/第一个隐藏层有 2 个节点 (h10,h11) 和激活函数ϕ. 假设一个全连接层,你有 2 个权重w0w1. 隐藏层的节点h10h11分别由

  • h10=ϕ(i0w0+i1w0+i2w0)

  • h11=ϕ(i0w1+i1w1+i2w1)

从而为您提供一个隐藏层,其值与输入的排列不变。从现在开始,您可以根据自己的需要学习和构建网络的其余部分。这是一种源自卷积层的方法。

方法 3

最后,您可以使用降维来实现此目的。我已经在Exploring Communication Protocols and Centralized Critics in Multi-Agent Deep Learning 中发表了这篇关于集成计算机辅助工程的文章。这种方法使用卷积架构来有效地实现置换不变性。

我在这里使用 Keras 实现了置换层:https ://github.com/off99555/superkeras/blob/master/permutational_layer.py

您可以调用该PermutationalModule函数来使用它。

在本文之后实施:Permutation-equivariant neural networks applied to dynamics prediction

这个想法是比较所有对N2对来自N输入,使用具有共享权重的模型,然后使用池化功能NN输入。

您可以再次使用池的输出,但在论文中,他们没有提到另一个池。

因此,在深度激光雷达处理社区中进行了大量研究的实际应用。在那个世界中,您必须对完全无序的点云进行大量计算。该领域的一项开创性工作是 Point Net ( https://arxiv.org/pdf/1612.00593.pdf ),它通过跨通道执行所有对称操作来解决这个问题。1D 卷积、最大池等。这种风格的任何不投影到 2D 表示的网络都必须遵守此规则。