【问题标题】:Neural networks and big-o神经网络和big-o
【发布时间】:2019-05-19 11:40:49
【问题描述】:

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

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

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

【问题讨论】:

  • 我不确定这是否适合 CSE,但这是一个很好的一般性问题。机器学习这帮人有自己的描述事物的方式,往往无法脱离范式表达,很难打入该领域。在我发现“theta”是“that”的缩写之前,我不知道我看了多少次相同的介绍性讲座,这就是讲师当时的感受

标签: neural-network big-o backpropagation


【解决方案1】:

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

假设我们有一个带有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 数(因为您将多次重复同一组操作)。

【讨论】:

  • 我想我正在赶上,但我想验证。因此,如果馈送时间是 hO(n) + mO(h),那么反向传播时间是否会是 hO(m) + nO(h)?后退应该与前进相同,因为我们接触的节点数量相同,对吧?这意味着训练网络所需的总时间为 2(O((n+m)*h))*e 或 2e(O((n+m)*h))。我做对了吗?谢谢你的解释。它至少让我更接近了。
  • 另外,对于 c 部分,当它询问训练完成后需要多少时间来确定测试点的类别时,这与前馈时间相同,对吗?当您最终发送测试数据时,数据只会向前,不再向后,并且只会向前一次。如果我理解正确,请告诉我。
  • 在这两个 cmets 中,您的理解都是正确的。另请注意,2eO((n+m)h) = O((n+m)*h*e) 作为 O 符号“同化”任何数字常量。
  • 谢谢!这帮助很大。
猜你喜欢
  • 2016-09-02
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 2017-08-27
  • 2011-02-16
  • 2011-07-31
  • 1970-01-01
相关资源
最近更新 更多