neural-network - 神经网络和big-o
问题描述
我必须完成以下作业。我失去了这个问题的所有分数,因为我什至不知道从哪里开始。坦率地说,我们没有学到这些。我没有收到有关此作业的反馈,但我真的很想学习如何解决这些问题。有人可以让我知道从哪里开始吗?我非常沮丧,因为我没有得到教授的帮助。我想做的就是学习一些东西。我已经用谷歌搜索了这件事,但找不到任何有帮助的东西。
假设我有一个包含 m 个数据点的训练集,具有 n 个特征。进一步假设我使用具有 h 个隐藏节点的神经网络来学习这些数据,并且在反向传播终止之前需要 e 个 epoch。用大 O 表示法回答以下每个问题。(例如 O(m^2n^5/h)。
一种。假设数据集中的每个特征对应一个输入节点,存储这个神经网络需要多少内存?湾。训练这样一个神经网络分类器需要多少时间?C。训练完成后需要多少时间来确定一个测试点的类别?
解决方案
让我提供一些基本指导,以便您开始。你应该能够完成作业。
假设我们有一个带有n
输入的神经网络,一个隐藏层的h
神经元和m
输出。我们总共有这么多神经元:
nbNeurons = h + m.
现在,一个神经元占用的内存量是O(w)
,其中w
是神经元接收的输入数量。原因是一个神经元每个输入都有一个权重,外加一些额外的信息,例如bias
、learning rate
、output
、error
。由于所有这些都以常数为界,因此一个神经元所需的内存与权重(即输入)的数量成正比。
隐藏层有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 数(因为您将多次重复同一组操作)。
推荐阅读
- javascript - 让两个反应组件通过“google-maps-react”相互交谈
- twitter-bootstrap - 已回答.... Bootstrap 4 Card 和 Firefox 打开链接的问题
- c# - 锁定用户对位于共享驱动器上的 XML 文件的访问,而不是程序
- javascript - this.setState() 调用在 reactjs 中有什么作用?
- amazon-athena - 在 Athena 中使用 MySQL Aurora 作为源
- python - ModuleNotFoundError:在 PyCharm (Mac) 上没有名为 zenpy 的模块
- google-cloud-platform - GCP - 传出连接
- python - 康威的生活游戏邻居计数
- python - Convert a xlsx file with multiple sheets to multiple xlsx files
- django - Django - update_index 更新测试和生产站点