Answers:
注意:我推测性地进行了这些计算,因此一些错误可能已悄悄蔓延。请告知任何此类错误,以便我进行纠正。
通常,在任何CNN中,训练的最大时间都取决于完全连接层中的错误的反向传播(取决于图像大小)。同样,最大内存也被它们占用。这是斯坦福大学关于VGG Net参数的幻灯片:
显然,您可以看到完全连接的层约占参数的90%。因此,它们占用了最大的内存。
就训练时间而言,它多少取决于所使用图像的大小(像素*像素)。在FC层中,很简单,您必须计算的导数等于参数的数量。就卷积层而言,让我们看一个示例,让我们以第二层为例:它具有64个维度的滤镜要更新。错误从第三层传播。第三层中的每个通道将其错误传播到其相应的过滤器。因此,像素将有助于大约权重更新。而且由于有这样的通道,我们将要执行的计算总数为计算。
现在让我们来看看最后一层。它将渐变传递到上一层。每个像素将更新滤镜。并且由于有256个这样的因此所需的总计算量将为。
因此,卷积层中的计算数量实际上取决于滤波器的数量和图片的大小。总的来说,我使用以下公式来计算一层中的过滤器所需的更新次数,而且我也考虑过因为这将是最坏的情况:
借助快速的GPU,我们可以轻松处理这些庞大的计算。但是在FC层中,需要加载整个矩阵,这会导致存储问题,而卷积层通常不会出现这种问题,因此训练卷积层仍然很容易。同样,所有这些都必须加载到GPU内存本身中,而不是CPU的RAM中。
这也是AlexNet的参数表:
以下是各种CNN架构的性能比较:
由于CNN包含卷积运算,但DNN使用建设性散度进行训练。CNN的Big O表示法更为复杂。
以供参考:
1)CNN时间复杂度
https://arxiv.org/pdf/1412.1710.pdf
2)全连接层/深度神经网络(DNN)/多层感知器(MLP) https://www.researchgate.net/post/What_is_the_time_complexity_of_Multilayer_Perceptron_MLP_and_other_neural_networks