【发布时间】:2017-07-08 02:52:02
【问题描述】:
找了好久还是没搞清楚,有没有人能详细解释一下?
【问题讨论】:
标签: machine-learning neural-network computer-vision deep-learning conv-neural-network
找了好久还是没搞清楚,有没有人能详细解释一下?
【问题讨论】:
标签: machine-learning neural-network computer-vision deep-learning conv-neural-network
每个全连接 (FC) 层都有一个等效的卷积层(反之亦然)。因此没有必要添加 FC 层。它们总是可以被卷积层(+重塑)替换。见details。
那我们为什么要使用 FC 层呢?
因为 (1) 我们习惯了 (2) 它更简单。 (1)可能是(2)的原因。例如,如果您使用卷积层而不是 FC 层,则需要调整损失函数/标签的形状/添加整形添加末端。
【讨论】:
理论上你没有有附加一个完全连接的层,你可以有一个完整的卷积堆栈直到最后,只要(由于自定义大小/填充)你最终具有正确数量的输出神经元(通常是类数)。
那么为什么人们通常不这样做呢?如果仔细计算,就会发现每个输出神经元(因此 - 对某个类的预测)仅取决于输入维度(像素)的子集。这将是模型中的一些东西,它仅根据前几个“列”(或者,取决于架构、行或图像的某些补丁)决定图像是否是类 1 的元素,然后是否这是接下来几列(可能重叠)的第 2 类,...,最后是一些 K 类,取决于最后几列。通常数据不具有此特征,您无法根据前几列对猫的图像进行分类而忽略其余列。
但是,如果您引入 全连接 层,您可以为模型提供混合信号的能力,因为每个神经元都与下一个神经元连接层,现在每个输入维度(像素位置)和每个输出类之间都有信息流,因此决策真正基于整个图像。
因此,您可以直观地从信息流的角度来考虑这些操作。卷积是本地操作,池化是本地操作。全连接层是全局的(它们可以引入任何类型的依赖)。这也是卷积在图像分析等领域表现出色的原因——由于它们的局部性质,它们更容易训练,尽管在数学上它们只是完全连接层可以表示的一个子集。
注意 我在这里考虑的是 CNN 的典型使用,其中内核很小。一般来说,甚至可以将 MLP 视为一种 CNN,其中内核的大小与整个输入的大小相同,并具有特定的间距/填充。然而,这些只是极端情况,在实践中并没有真正遇到,也没有真正影响推理,因为那时它们最终成为 MLP。这里的重点很简单——引入全局关系,如果可以通过以特定方式使用 CNN 来做到这一点——那么就不需要 MLP。 MLP 只是引入这种依赖性的一种方式。
【讨论】:
我在Quora 上发现Anil-Sharma 的这个答案很有帮助。
我们可以将整个网络(用于分类)分成两部分:
特征提取: 在传统的分类算法中,比如支持向量机,我们习惯于从数据中提取特征来进行分类。卷积层用于特征提取的相同目的。 CNN 可以更好地表示数据,因此我们不需要进行特征工程。
分类: 特征提取后,我们需要将数据分类为各种类别,这可以使用全连接 (FC) 神经网络来完成。代替全连接层,我们还可以使用传统的分类器,如 SVM。但我们通常最终会添加 FC 层以使模型端到端可训练。
【讨论】:
CNN 为您提供输入图像的表示。要学习样本类,应该使用分类器(如逻辑回归、SVM 等)来学习学习到的特征与样本类之间的关系。全连接层也是一个线性分类器,例如逻辑回归,正是出于这个原因。
【讨论】:
卷积层和池化层从图像中提取特征。所以这一层对数据进行了一些“预处理”。全连接层根据提取的特征进行分类。
【讨论】: