在阅读一些ppt
演示文稿中关于神经进化的内容时,我遇到了这样一句话:
网络输出按标准方式计算
我成功地按照一些指南实现了一个简单的前馈机制(使用权重的向量表示 – 1, 2, 3),并且我大致了解如何计算循环网络的输出。
但我找不到如何计算任意拓扑结构的神经网络。是否有任何‘标准方式’(算法)呢?
我设想了一种方法(假设是前馈拓扑),尽管非常耗时,就是遍历所有神经元直到计算出输出为止。
我设想的另一种方法可能是将任意拓扑结构组织成层(也假设是前馈拓扑 – 这个?),然后进行计算。
问题
计算任意拓扑结构网络输出的‘标准方式’是什么?/ 如何计算任意拓扑结构网络的输出?
假设
- 前馈拓扑(循环拓扑作为额外选项,可能会复杂得多)。
- 存在偏置节点。
附注:我使用Python
进行工作,遵循NEAT论文。
回答:
神经网络不能拥有真正的任意拓扑结构,存在一定的限制:
- 拓扑结构必须是(可简化为)有向无环图 (DAG)。你可能会问RNN是否与此要求相悖:实际上并非如此,因为每个RNN都可以展开成一个DAG。在其他情况下,网络中可以模拟循环,但执行方式总是可以将网络表示为一个DAG,并且反向传播是有限的。
- 图必须有专用的输入和输出节点,确保没有输入依赖于输出。输入节点通常提供训练数据。
- 还有其他限制,例如,激活函数必须是可微的。
现在你可以注意到这些网络非常类似于前馈网络:前向传递从输入到输出运行,反向传递则相反。这是因为DAG可以进行拓扑排序。实际上,拓扑排序就是以前馈方式表示图的形式。
至于循环模拟,迭代次数总是有限的,因为内存是有限的。网络实际上是一个DAG,带有输入、输出和中间的一些重复模式,这些也可以被视为前馈。
总结:用于简单神经网络的相同机制也适用于所有网络(如果你喜欢,可以称之为‘标准’),但网络的表示有时看起来会有所不同。