一个训练有素的 ANN 如何拥有一组可以代表多个 类 的权重?

How can a well trained ANN have a single set of weights that can represent multiple classes?

在多项式分类中,我对所有非线性单元使用 soft-max 激活函数,ANN 有 'k' 个输出节点,'k' 个 类。输出层中存在的每个 'k' 个输出节点都连接到前一层中的所有权重,有点像下图所示。

所以,如果第一个输出节点想要拉权重,它会改变这一层之前的所有权重,其他输出节点也会拉,这通常与第一个输出节点的方向相矛盾在拉。它看起来更像是使用单组重量的 war 拔河。那么,我们是否需要为每个输出 类 单独设置一组权重(包括每一层的每个节点的权重),或者是否存在不同形式的架构?有错请指正

每个节点都有自己的一组权重。实现和公式通常使用矩阵乘法,这会让你忘记一个事实,即从概念上讲,每个节点都有自己的一组权重,但它们 do.

每个节点 returns 发送到下一层中每个节点的单个值。因此,层 h 上的节点接收 num(h - 1) 个输入,其中 num(h - 1) 是层 h - 1 中的节点数。让这些输入为 x1, x2, ..., xk。然后神经元returns:

x1*w1 + x2*w2 + ... + xk*wk

或者这个函数。所以每个神经元都维护着自己的一组权重。

让我们考虑一下您图像中的网络。假设我们有一些训练实例,最顶层的神经元应该输出 1 而其他的 0.

所以我们的目标是:

y = [1 0 0 0]

我们的实际输出是(为简单起见忽略 softmax):

y^ = [0.88 0.12 0.04 0.5]

所以它已经做得很好了,但我们仍然必须进行反向传播以使其变得更好。

现在,我们的输出增量是:

y^ - y = [-0.12 0.12 0.04 0.5]

您将使用增量 -0.12 更新最顶层神经元的权重,使用 0.12 更新第二个神经元的权重,依此类推。

请注意,每个输出神经元的权重都会使用这些值进行更新:这些权重将全部增加或减少以接近正确的值(01)。

现在,请注意每个输出神经元的输出取决于隐藏神经元的输出。所以你也必须更新那些。这些将使用 each 输出神经元的增量进行更新(有关更新公式,请参阅第 7 页 here)。这就像在求导数时应用链式法则。

你是对的,对于一个给定的隐藏神经元,有一个 "tug of war" 正在进行,每个输出神经元的错误都按照自己的方式进行。但这是正常的,因为隐藏层必须学会满足所有输出神经元。这是随机初始化权重和使用多个隐藏神经元的原因。

它是适应给出最终答案的输出层,它可以做到这一点,因为输出节点的权重是相互独立的。隐藏层必须受到所有输出节点的影响,并且必须学会容纳它们。