一个训练有素的 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
更新第二个神经元的权重,依此类推。
请注意,每个输出神经元的权重都会使用这些值进行更新:这些权重将全部增加或减少以接近正确的值(0
或 1
)。
现在,请注意每个输出神经元的输出取决于隐藏神经元的输出。所以你也必须更新那些。这些将使用 each 输出神经元的增量进行更新(有关更新公式,请参阅第 7 页 here)。这就像在求导数时应用链式法则。
你是对的,对于一个给定的隐藏神经元,有一个 "tug of war" 正在进行,每个输出神经元的错误都按照自己的方式进行。但这是正常的,因为隐藏层必须学会满足所有输出神经元。这是随机初始化权重和使用多个隐藏神经元的原因。
它是适应给出最终答案的输出层,它可以做到这一点,因为输出节点的权重是相互独立的。隐藏层必须受到所有输出节点的影响,并且必须学会容纳它们。
在多项式分类中,我对所有非线性单元使用 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
更新第二个神经元的权重,依此类推。
请注意,每个输出神经元的权重都会使用这些值进行更新:这些权重将全部增加或减少以接近正确的值(0
或 1
)。
现在,请注意每个输出神经元的输出取决于隐藏神经元的输出。所以你也必须更新那些。这些将使用 each 输出神经元的增量进行更新(有关更新公式,请参阅第 7 页 here)。这就像在求导数时应用链式法则。
你是对的,对于一个给定的隐藏神经元,有一个 "tug of war" 正在进行,每个输出神经元的错误都按照自己的方式进行。但这是正常的,因为隐藏层必须学会满足所有输出神经元。这是随机初始化权重和使用多个隐藏神经元的原因。
它是适应给出最终答案的输出层,它可以做到这一点,因为输出节点的权重是相互独立的。隐藏层必须受到所有输出节点的影响,并且必须学会容纳它们。