【发布时间】:2018-10-04 01:46:09
【问题描述】:
我正在从头开始实现一个简单的神经网络,只是为了练习。对于二进制分类问题,我已经让它与 sigmoid、tanh 和 ReLU 激活一起正常工作。我现在正试图将它用于多类、互斥的问题。当然,softmax 是最好的选择。
不幸的是,我在理解如何在反向传播中实现 softmax、交叉熵损失及其衍生物时遇到了很多麻烦。即使在此处和 Cross Validated 上提出了几个问题,我也无法获得任何好的指导。
在我尝试进一步实现 softmax 之前,是否有可能以某种方式使用 sigmoid 来解决多类问题(我试图预测 n 个字符中的 1 个,它们被编码为 one-hot 向量)?如果是这样,哪个损失函数最好?我一直在对所有二元分类使用平方误差。
【问题讨论】:
-
我不完全清楚你在找什么。您不需要多类分类器作为神经网络本身的激活函数来生成多类分类。构建多类神经网络的方法不是调整单个神经元中的激活函数,而是让输出层每个类包含一个节点。
-
对不起,我想问我的问题的更好方法是:因为我的类是互斥的,softmax 显然是最好的,因为你会把概率最高的类作为预测,是吗仍然可以使用 sigmoid (输出不会是互斥概率)并且只取具有最高 sigmoid 值的输出?神经网络能学会以这种方式有效地工作吗?
-
您当然可以通过运行一堆一对多的分类器并从中挑选得分最高的类来创建一个多类分类器。我的猜测是这很难应用反向传播。 Softmax 是可微的,应该更容易在 NN 中使用。
-
@Metropolis 我知道这超出了问题的范围,但是如果您愿意,我很乐意在聊天中将我的代码发送给您,以讨论我使用 softmax 的尝试实现,看看您是否可以改进一下?
-
顺便说一句,它只是 Python 和 numpy。
标签: machine-learning classification softmax activation-function sigmoid