为啥softmax不在隐藏层中使用[重复]

Posted

技术标签:

【中文标题】为啥softmax不在隐藏层中使用[重复]【英文标题】:Why is softmax not used in hidden layers [duplicate]为什么softmax不在隐藏层中使用[重复] 【发布时间】:2017-10-28 15:58:28 【问题描述】:

我已阅读here 给出的答案。我的确切问题与已接受的答案有关:

    变量独立性:大量的正则化和努力使您的变量保持独立、不相关且非常稀疏。如果您使用 softmax 层作为隐藏层 - 那么您将保持所有节点(隐藏变量)线性相关,这可能会导致许多问题和泛化性差。

在隐藏层中放弃变量独立性会出现什么复杂情况?请提供至少一个例子。我知道隐藏变量独立性在编码反向传播方面有很大帮助,但是反向传播也可以为 softmax 编码(请验证我在这个声明中是否正确。我似乎已经根据我的说法得到了正确的方程。因此声明) .

    训练问题:试着想象一下,为了让你的网络更好地工作,你必须让隐藏层的一部分激活值稍微低一点。然后 - 您会自动使其余部分在更高级别上进行平均激活,这实际上可能会增加错误并损害您的训练阶段。

我不明白你是如何实现这种灵活性的,即使在 sigmoid 隐藏神经元中你可以微调特定给定神经元的激活,这正是梯度下降的工作。那么我们为什么还要担心这个问题。如果您可以实现反向传播,其余部分将由梯度下降处理。微调权重以使激活正确不是您想做的事情,即使您可以做,但您不能做。 (如果我的理解有误,请纠正我)

    数学问题:通过对模型的激活创建约束,您会在没有任何逻辑解释的情况下降低模型的表达能力。在我看来,努力使所有激活都相同是不值得的。

请解释这里所说的内容

    批量标准化:我明白了,这里没有问题

【问题讨论】:

【参考方案1】:

1/2. 我认为您不知道作者要说什么。想象一个有 3 个节点的层。其中 2 个节点对输出错误的错误责任为 0;所以有一个节点需要调整。因此,如果您想改进节点 0 的输出,那么您会立即影响该层中的节点 1 和节点 2 - 可能会使输出更加错误。

微调权重以使激活正确不是您想做的事情,即使您可以做,但您不能做。 (如果我的理解有误,请纠正我)

这就是反向传播的定义。这正是您想要的。神经网络依靠激活(非线性)来映射函数。

3. 你基本上对每个神经元说“嘿,你的输出不能高于 x,因为这一层中的一些其他神经元已经具有值 y”。因为 softmax 层中的所有神经元的总激活量应该为1,这意味着神经元不能高于特定值。对于小层 - 小问题,但对于大层 - 大问题。想象一个有 100 个神经元的层。现在想象他们的总输出应该是1。这些神经元的平均值将为0.01 -> 这意味着您正在使网络连接依赖(因为平均而言,激活将保持非常低) - 因为其他激活函数输出(或接受输入)范围(0:1 / -1:1)。

【讨论】:

没错。你是对的

以上是关于为啥softmax不在隐藏层中使用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们要在 softmax 中使用温度? [关闭]

在 Keras 层中使用 softmax 激活时如何指定轴?

在pytorch中使用交叉熵损失时我应该使用softmax作为输出吗?

在回归(非分类)问题中是不是可以使用 softmax 作为隐藏层激活函数?

为啥需要softmax函数?为啥不简单归一化?

为啥我们在 softmax 中使用 (exp) 而不是 (log)?