首页 > 解决方案 > 神经网络和big-o

问题描述

我必须完成以下作业。我失去了这个问题的所有分数,因为我什至不知道从哪里开始。坦率地说,我们没有学到这些。我没有收到有关此作业的反馈,但我真的很想学习如何解决这些问题。有人可以让我知道从哪里开始吗?我非常沮丧,因为我没有得到教授的帮助。我想做的就是学习一些东西。我已经用谷歌搜索了这件事,但找不到任何有帮助的东西。

假设我有一个包含 m 个数据点的训练集,具有 n 个特征。进一步假设我使用具有 h 个隐藏节点的神经网络来学习这些数据,并且在反向传播终止之前需要 e 个 epoch。用大 O 表示法回答以下每个问题。(例如 O(m^2n^5/h)。

一种。假设数据集中的每个特征对应一个输入节点,存储这个神经网络需要多少内存?湾。训练这样一个神经网络分类器需要多少时间?C。训练完成后需要多少时间来确定一个测试点的类别?

标签: neural-networkbig-obackpropagation

解决方案


让我提供一些基本指导,以便您开始。你应该能够完成作业。

假设我们有一个带有n输入的神经网络,一个隐藏层的h神经元和m输出。我们总共有这么多神经元:

nbNeurons = h + m.

现在,一个神经元占用的内存量是O(w),其中w是神经元接收的输入数量。原因是一个神经元每个输入都有一个权重,外加一些额外的信息,例如biaslearning rateoutputerror。由于所有这些都以常数为界,因此一个神经元所需的内存与权重(即输入)的数量成正比。

隐藏层有h神经元,n每个神经元都有输入,所以它需要h*O(n)内存单元。输出层有m神经元,h每个神经元都有输入,因此m*O(h). 因此

memory = h*O(n) + m*O(h) = O(h*n) + O(m*h) = O((n+m)*h)

为神经元提供k输入需要k乘法加加法k+1+1对 sigmoid(或类似)函数的评估。这显然与k和因此成正比O(k)

为我们的网络提供输入需要h为隐藏神经元提供n每个输入,因此h*O(n)还要为每个m输出神经元提供h输入m*O(h)。所以,

feed time = h*O(n) + m*O(h) = O((n+m)*h)

现在,继续使用相同的推理来计算在使用一个训练数据样本训练网络时将错误传播回去所需的操作数。您将向网络提供样本,然后调整每个神经元的权重和偏差。最后,将此数量乘以 epoch 数(因为您将多次重复同一组操作)。


推荐阅读