PointNet 中使用的 FC 和 MLP 有什么区别?

数据挖掘 火炬 pytorch-几何
2022-01-19 19:24:30

我试图了解用于处理点云的PointNet网络并努力理解 FC 和 MLP 之间的区别:

“FC 是在每个点上运行的全连接层。MLP 是每个点上的多层感知器。”

我了解如何使用全连接层进行分类,并且我之前认为,MLP 是同一件事,但似乎不同的学术论文彼此之间以及与一般在线课程的定义不同。在 PointNet 中,它们似乎被用来表示不同的东西?

我的理解是,直到网络中的最大池为止,所有层对于 N 个点中的每一个都是相互独立运行的,然后 nx1024 层的输出被最大池化。那为什么要描述一个共享的 MLP 呢?

具有输入 3 个坐标的 MLP 如何导致 MLP 的输出为 64?还是从 64 到 1024?

如果这个 MLP 实际上是从所有 N 个点获取输入,那么 1024 个点如何导致 64 个宽的 MLP 层?

全局和局部特征是什么意思?

PointNet 网络架构

1个回答

好吧,我在互联网上甚至在论文中都发现了很多令人困惑的材料。MLP 和 FC 层有点相似,但实际上并不相同。

1)简短的回答:

MLP - 具有 3 个全连接层和一个激活函数的迷你神经网络。

FC - 一个层,其神经元与每个输入神经元(来自前一层)都有连接。

2)深度回答。

FC: 首先,全连接层只是一层有多个“神经元”,它们连接到每个输入“神经元”。这就是它的名称“全连接”的由来:一切都与一切相连。

MLP: 接下来,MLP是一种多层感知,它是至少3个全连接层的组合:输入层、隐藏层、输出层。MLP 也有一个激活函数应用于隐藏层的每个神经元的输出。因此,流水线为:fc_in -> fc_hid -> 激活函数 -> fc_out。您可以将 MLP 视为一个微型神经网络(实际上 MLP 确实几乎是第一个 NN)。

此外,原始论文中提出的原始“感知器”实际上使用了一个特定的不可微激活函数 - Heaviside 函数(使用它的神经元可能只有“0”或“1”作为输出,中间没有任何内容)。然而现在没有人使用那个激活,因为我们需要通过它计算梯度。[目前,我们使用 ReLU 或类似的激活函数。]因此,目前您几乎找不到使用实际“MLP”的论文。

结论: 不幸的是,由于误解,许多人使用术语“MLP”作为“FC 层”的同义词,然而,这是不正确的。它们不可互换,我们不能使用术语 MLP 来描述 FC 层。在我看来,我根本不建议使用“MLP”一词,因为现在没有人真正使用“真正的”MLP 实现。

关于论文,我注意到作者通常在想要描述 FC 层及其后的任何激活函数的组合时使用“MLP”:

MLP: fc -> 激活函数

(输入-> MLP-> 输出)。

但是,由于上述原因,这种表示法并不完全正确。