高效计算任意神经网络输出?

Efficiently compute arbitrary neural network output?

我正在学习神经网络,它们是我遇到的一些最巧妙的东西。

我的问题是:如何计算具有任意拓扑结构的神经网络的输出?是否有一些算法或经验法则可以使用?

例如,我知道前馈网络具有简单的矩阵表示,但是具有循环或输出连接到输入的网络呢?这些有矩阵形式吗?或者是生成输出以执行某种图形遍历的唯一方法?

示例:

  1. 让我们看看你的神经网络结构的图片, 附在你的问题上。
    人工神经网络连接并不像看起来那样是普通的有向图。 这里隐含了额外的限制,比如按层分布的不同类型的节点。
    有输入节点、隐藏节点和输出节点。 简单来说,输入节点(神经元值)被认为是只读的,无法修改。这就是为什么节点 9 和 4 之间的连接没有意义,作为输入 4 本身,因为它的信号不会进一步传播。
    节点 8 和 11 之间的连接也是如此。 你可能会看here,神经网络的基础知识以简单的方式解释。

  2. 谈到带有循环的网络,我们假设循环网络。 假设,我们有 recursive neural network 如下图所示。 我们将如何计算输出?
    我们可以尝试应用与前馈网络相同的计算规则。 formula
    formula,此处 f - 激活函数。
    但是,等一下,我们不需要知道吗 formulaformula 价值观? 从技术上讲,这不是递归。
    您可以将其理解为“formula 节点的下一个值取决于 formula 节点的当前值”。
    所描绘的网络动态可以通过“展开”来可视化(如下所示)。 因此,循环网络可以被视为一个深度网络,每个时间步只有一个层,并且跨时间步共享权重。在这里,我们将第 0 步隐藏层视为第 1 步的输入。
    回到我们的案例,第一步计算的公式应该类似于 formula
    同样,第二步可以计算为 formula.

为了简化,formulaformula 的值可以用零初始化(尽管实际上初始状态被训练为模型参数)。展开用于 training(从技术上讲,我们只是用一系列前馈隐藏层替换循环网络)。

总而言之,循环网络仍然有矩阵表示和操作,尽管它看起来并不明显和直接。