你的问题是关于神经网络的基础知识,因此我强烈建议你从这里开始(迈克尔尼尔森的书)。这是一本面向 python 的书,带有图形、文本和公式化的解释——非常适合初学者。我相信你会发现这本书对你的理解很有帮助。寻找第 2 章和第 3 章来解决您的问题。
解决您关于 Sigmoid 的问题,可以将其用于多类预测,但不推荐。考虑以下事实。
Sigmoid 是形式的激活函数,1/(1+exp(-z))
其中z
是前一个隐藏层(或输入)和权重矩阵的行的标量乘法,此外还有一个偏差(提醒:权重矩阵的第 - 行是哪里z=w_i . x + b
) 。此激活与矩阵的其他行无关。w_i
i
分类任务是关于类别的。在没有任何先验知识的情况下,即使在大多数情况下,类别也没有顺序值解释;predicting apple
instead oforange
并不比 predicting banana
instead of差nuts
。因此,one-hot
对类别进行编码通常比使用单个激活函数预测类别编号表现更好。
回顾一下,我们想要一个神经元数量等于类别数量的输出层,并且在给定前一层值的情况下,sigmoid 彼此独立。我们还想预测最可能的类别,这意味着我们希望 的激活output layer
具有 的含义probability disribution
。但是 Sigmoid 不能保证总和为 1,而 softmax 激活可以。
L2-loss
由于梯度消失问题,使用函数也存在问题。简而言之,损失的导数是(sigmoid(z)-y) . sigmoid'(z)
(误差乘以导数),这使得这个数量很小,当 sigmoid 接近饱和时甚至更多。您可以选择cross entropy
改为,或log-loss
.
编辑:
更正了有关订购类别的措辞。澄清一下,分类是与我们今天用作确定有限值集的分类预测相关的许多任务的通用术语。时至今日,在深度模型中使用 softmax 来预测通用“狗/猫/马”分类器中的这些类别,单热编码和交叉熵是一种非常普遍的做法。如果上述内容正确,则使用它是合理的。但是,有(很多)情况不适用。例如,在尝试平衡数据时。对于某些任务,例如语义分割任务,类别可以在它们(或它们的嵌入)之间有顺序/距离,并具有意义。因此,请明智地为您的应用程序选择工具,了解它们在数学上的作用以及它们的含义。