为什么我们在 CNN 的末端使用全连接层?
Why do we use fully-connected layer at the end of CNN?
找了很多原因都没有弄清楚,请问谁能详细解释一下?
CNN 为您提供输入图像的表示。要学习样本类,应该使用分类器(如逻辑回归、SVM等)来学习学习到的特征与样本类之间的关系。 Fully-connected 层也是一个线性分类器,例如逻辑回归,因此被使用。
卷积层和池化层从图像中提取特征。所以这一层做了一些 "preprocessing" 的数据。全连接层根据提取的特征进行分类。
理论上你没有附加一个全连接层,你可以有一个完整的卷积堆栈直到最后,只要(由于自定义sizes/paddings) 你最终得到正确数量的输出神经元(通常是 classes 的数量)。
那么为什么人们通常不这样做呢?如果通过数学运算,就会发现每个输出神经元(因此 - 对某些 class 的预测)仅取决于 输入维度(像素)的子集 ).这将是模型中的一些东西,它只决定图像是否是 class 1 的元素,这取决于前几个 "columns" (或者,取决于体系结构、行或一些补丁图像),然后这是否是 class 2 在接下来的几列(可能重叠),...,最后一些 class K 取决于最后几列。通常数据不具有此特征,您不能 class 根据前几列忽略其余列来确定猫的图像。
但是,如果您引入 全连接 层,您的模型就可以 混合 信号,因为每个神经元都有一个连接到下一层中的每一个,现在每个输入维度(像素位置)和每个输出之间都有信息流 class,因此决策真正基于整个图像。
所以直观上你可以从信息流的角度来思考这些操作。卷积是局部操作,池化是局部操作。全连接层是全局的(它们可以引入任何类型的依赖)。这也是为什么卷积在图像分析等领域表现如此出色的原因 - 由于它们的局部性质,它们更容易训练,即使在数学上它们只是完全连接层可以表示的子集。
注意
我在这里考虑 CNN 的典型使用,其中内核很小。通常,人们甚至可以将 MLP 视为 CNN,其中内核的大小为整个输入的大小,具体为 spacing/padding。然而,这些只是极端情况,在实践中并没有真正遇到过,也没有真正影响推理,因此它们最终成为 MLP。这里的重点很简单——引入全局关系,如果可以通过以特定方式使用 CNN 来实现——那么就不需要 MLP。 MLP 只是引入这种依赖性的一种方式。
每个全连接 (FC) 层都有一个等效的卷积层(反之亦然)。因此没有必要添加 FC 层。它们总是可以被卷积层取代(+重塑)。参见 details。
那为什么要用FC层呢?
因为(1)我们习惯了(2)它更简单。 (1) 可能是 (2) 的原因。例如,如果您使用卷积层而不是 FC 层,您将需要调整损失函数/标签的形状/添加重塑添加末端。
我发现 Anil-Sharma on Quora 的回答很有帮助。
我们可以将整个网络(用于分类)分为两部分:
特征提取:
在传统的分类算法中,如支持向量机,我们过去常常从数据中提取特征来进行分类。卷积层与特征提取的目的相同。 CNN 捕获更好的数据表示,因此我们不需要进行特征工程。
分类:
特征提取后,我们需要将数据分类为各种 类,这可以使用全连接 (FC) 神经网络来完成。除了全连接层,我们还可以使用 SVM 等传统分类器。但是我们通常最终会添加 FC 层以使模型 end-to-end 可训练。
找了很多原因都没有弄清楚,请问谁能详细解释一下?
CNN 为您提供输入图像的表示。要学习样本类,应该使用分类器(如逻辑回归、SVM等)来学习学习到的特征与样本类之间的关系。 Fully-connected 层也是一个线性分类器,例如逻辑回归,因此被使用。
卷积层和池化层从图像中提取特征。所以这一层做了一些 "preprocessing" 的数据。全连接层根据提取的特征进行分类。
理论上你没有附加一个全连接层,你可以有一个完整的卷积堆栈直到最后,只要(由于自定义sizes/paddings) 你最终得到正确数量的输出神经元(通常是 classes 的数量)。
那么为什么人们通常不这样做呢?如果通过数学运算,就会发现每个输出神经元(因此 - 对某些 class 的预测)仅取决于 输入维度(像素)的子集 ).这将是模型中的一些东西,它只决定图像是否是 class 1 的元素,这取决于前几个 "columns" (或者,取决于体系结构、行或一些补丁图像),然后这是否是 class 2 在接下来的几列(可能重叠),...,最后一些 class K 取决于最后几列。通常数据不具有此特征,您不能 class 根据前几列忽略其余列来确定猫的图像。
但是,如果您引入 全连接 层,您的模型就可以 混合 信号,因为每个神经元都有一个连接到下一层中的每一个,现在每个输入维度(像素位置)和每个输出之间都有信息流 class,因此决策真正基于整个图像。
所以直观上你可以从信息流的角度来思考这些操作。卷积是局部操作,池化是局部操作。全连接层是全局的(它们可以引入任何类型的依赖)。这也是为什么卷积在图像分析等领域表现如此出色的原因 - 由于它们的局部性质,它们更容易训练,即使在数学上它们只是完全连接层可以表示的子集。
注意 我在这里考虑 CNN 的典型使用,其中内核很小。通常,人们甚至可以将 MLP 视为 CNN,其中内核的大小为整个输入的大小,具体为 spacing/padding。然而,这些只是极端情况,在实践中并没有真正遇到过,也没有真正影响推理,因此它们最终成为 MLP。这里的重点很简单——引入全局关系,如果可以通过以特定方式使用 CNN 来实现——那么就不需要 MLP。 MLP 只是引入这种依赖性的一种方式。
每个全连接 (FC) 层都有一个等效的卷积层(反之亦然)。因此没有必要添加 FC 层。它们总是可以被卷积层取代(+重塑)。参见 details。
那为什么要用FC层呢?
因为(1)我们习惯了(2)它更简单。 (1) 可能是 (2) 的原因。例如,如果您使用卷积层而不是 FC 层,您将需要调整损失函数/标签的形状/添加重塑添加末端。
我发现 Anil-Sharma on Quora 的回答很有帮助。
我们可以将整个网络(用于分类)分为两部分:
特征提取: 在传统的分类算法中,如支持向量机,我们过去常常从数据中提取特征来进行分类。卷积层与特征提取的目的相同。 CNN 捕获更好的数据表示,因此我们不需要进行特征工程。
分类: 特征提取后,我们需要将数据分类为各种 类,这可以使用全连接 (FC) 神经网络来完成。除了全连接层,我们还可以使用 SVM 等传统分类器。但是我们通常最终会添加 FC 层以使模型 end-to-end 可训练。