每一层应该有一个偏置还是每个节点有一个偏置?

Should there be one bias per layer or one bias for each node?

我想实现一个通用神经网络,其中 1 个输入层由输入节点组成,1 个输出层由输出节点组成,N 个隐藏层由隐藏节点组成。节点组织成层,规则是同一层的节点不能连接。

我基本上理解偏差的概念,但我有一个问题。

每一层应该有一个偏差值(由该层中的所有节点共享)还是每个节点(输入层中的节点除外)都有自己的偏差值?

我觉得这两种方法都可以做到,我想了解每种方法的利弊,也想知道最常用的实现方式。

直观视图

要正确回答这个问题,我们应该首先准确地确定我们在问题中说 "Bias value" 时的意思。神经网络通常被直观地视为(并向初学者解释)节点(神经元)网络和节点之间的加权、定向连接。在这个视图中,偏差经常被绘制为附加的“'input'”节点,它们的激活级别始终恰好为 1.01.0这个值,可能有些人一听到"Bias Value"就会想到。这样的偏置节点将与其他节点建立连接,并具有可训练的权重。其他人可能认为这些权重为 "Bias Values"。由于问题被标记为 bias-neuron 标签,我将在假设我们使用第一个定义的情况下回答问题,例如偏置值 = 1.0 对于某些偏置节点/神经元。

从这个角度来看......我们在网络中放置多少偏差 nodes/values 在数学上绝对无关紧要,只要我们确保将它们连接到正确的节点即可。你可以直观地认为整个网络只有一个值为 1.0 的偏置节点,它不属于任何特定层,并且与输入节点以外的所有节点都有连接。虽然这可能很难绘制,但如果您想绘制神经网络图,则在除输出层之外的每一层中放置一个单独的偏置节点(每个节点的值为 1.0)可能会更方便, 并将这些偏置节点中的每一个连接到紧跟其后的层中的所有节点。在数学上,这两种解释是等价的,因为在这两种情况下,每个非输入节点都有一个来自始终具有 1.0.

激活级别的节点的传入加权连接

编程视图

在对神经网络进行编程时,通常根本没有任何显式节点“'objects'”(至少在高效实现中是这样)。通常只有权重矩阵。从这个角度来看,已经没有任何选择了。我们(几乎)总是希望每个非输入节点都有一个''bias-weight''(权重乘以恒定激活水平1.0),我们必须确保所有这些权重出现在我们的权重矩阵中的正确位置。