CNN 中的哪一层消耗更多的训练时间:卷积层还是全连接层?

人工智能 神经网络 深度学习 卷积神经网络 训练
2021-10-29 21:07:36

在卷积神经网络中,哪一层消耗更多的训练时间:卷积层还是全连接层?

我们可以通过 AlexNet 架构来理解这一点。我想看看训练过程的时间分解。我想要一个相对时间比较,以便我们可以采用任何恒定的 GPU 配置。

2个回答

注意:我进行这些计算是推测性的,因此可能会出现一些错误。请告知任何此类错误,以便我进行更正。

一般来说,在任何 CNN 中,训练的最大时间都在全连接层中错误的反向传播(取决于图像大小)。最大内存也被它们占用。这是一张来自斯坦福关于 VGG 网络参数的幻灯片:

在此处输入图像描述

在此处输入图像描述

很明显,您可以看到全连接层贡献了大约 90% 的参数。所以最大的内存被他们占用了。

就训练时间而言,它在一定程度上取决于所使用图像的大小(像素*像素)。在 FC 层中,您必须计算的导数数量等于参数的数量是很简单的。就卷积层而言,让我们看一个例子,让我们以第 2 层为例:它有 64 个过滤器(333)要更新的维度。错误从第 3 层传播。第 3 层中的每个通道将其错误传播到其对应的(333)筛选。因此224224像素将有助于224224(333)重量更新。而且由于有64这样的224224通道我们得到要执行的计算总数64224224(333)87106计算。

现在让我们采取最后一层5656256. 它将渐变传递到上一层。每个5656像素将更新(33256)筛选。由于有 256 个这样的5656所需的总计算量为2565656(33256)1850106计算。

所以卷积层中的计算数量实际上取决于滤波器的数量和图片的大小。一般来说,我使用以下公式来计算层中过滤器所需的更新次数,我也考虑过stride=1因为这将是最坏的情况:

channelsoutput(pixelOutputheightpixelOutputwidth)(filterheightfilterwidthchannelsinput)

多亏了快速的 GPU,我们可以轻松处理这些巨大的计算。但是在 FC 层中需要加载整个矩阵,这会导致内存问题,而卷积层通常不会出现这种情况,因此卷积层的训练仍然很容易。此外,所有这些都必须加载到 GPU 内存本身而不是 CPU 的 RAM 中。

另外这里是AlexNet的参数图:

在此处输入图像描述

以下是各种 CNN 架构的性能比较:

在此处输入图像描述

我建议您查看斯坦福大学的CS231n Lecture 9,以更好地了解 CNN 架构的各个角落。

由于 CNN 包含卷积操作,但 DNN 使用建设性散度进行训练。CNN 在大 O 表示法方面更为复杂。

以供参考:

  1. 有关CNN 时间复杂度的更多详细信息,请参阅Convolutional Neural Networks at Constrained Time Cost

  2. 请参阅神经网络的前向传递算法的时间复杂度是多少?以及使用反向传播训练神经网络的时间复杂度是多少?有关 MLP 前向和后向传递的时间复杂度的更多详细信息