用于多类分类的Sigmoid激活?

时间:2018-04-23 22:28:01

标签: machine-learning classification softmax activation-function sigmoid

我正在从头开始实施一个简单的神经网络,仅用于练习。我已经使用sigmoid,tanh和ReLU激活二进制分类问题。我现在正试图将它用于多类互斥问题。当然,softmax是最好的选择。

不幸的是,我在理解如何在backprop中实现softmax,交叉熵损失及其衍生物方面遇到了很多麻烦。即使在这里询问了几个问题并且在Cross Validated上,我也无法得到任何好的指导。

在我尝试进一步实现softmax之前,是否有可能以某种方式使用sigmoid来解决多类问题(我试图预测n个字符中的1个,它们被编码为单热矢量)?如果是这样,哪种损失函数最好?我一直在使用所有二进制分类的平方误差。

2 个答案:

答案 0 :(得分:1)

你的问题是关于神经网络的基本原理,因此我强烈建议你开始here(Michael Nielsen的书)。 它是面向python的书,带有图形,文本和表达式的解释 - 非常适合初学者。我相信你会发现这本书对你的理解很有用。寻找第2章和第3章来解决你的问题。

解决有关Sigmoids的问题,可以将其用于多类预测,但不推荐使用。请考虑以下事实。

Sigmoids是1/(1+exp(-z))形式的激活函数,其中z是前一个隐藏层(或输入)的标量乘法和权重矩阵的一行,另外还有偏差(提醒: z=w_i . x + b其中w_i是权重矩阵的i行。此激活是矩阵其他行的独立

分类任务与类别有关。没有任何先验知识,甚至在大多数情况下,类别都没有订单价值解释,因此我们可以看到预测apple而不是orange比预测banana更糟糕nuts。因此,类别的one-hot编码通常比使用单个激活函数预测类别编号更好。

总结一下,我们想要一个输出层,其中神经元的数量等于类别的数量,并且在给定前一个层值的情况下,sigmoids彼此独立。我们还想预测最可能的类别,这意味着我们将output layer的激活视为probability disribution但Sigmoids不保证总和为1,而softmax激活则为。

由于渐变问题消失,使用L2-loss功能也存在问题。不久,损失的导数是(sigmoid(z)-y) . sigmoid'(z)(误差乘以导数),这使得该数量变小,当S形闭合到饱和时甚至更多。您可以选择cross entropy代替log-loss

答案 1 :(得分:0)

你问的是一个非常广泛的问题。

  • 据我所知,当类变为2时,softmax函数将与sigmoid相同,所以是的,它们是相关的。交叉熵可能是最好的损失函数。
  • 对于backpropgation,要找到公式......并不容易 有很多方法。在CUDA的帮助下,如果您只是想在未来使用NN或CNN,我认为没有必要花太多时间。也许尝试一些像Tensorflow或Keras这样的框架(强烈推荐给初学者)会帮助你。
  • 还有很多其他因素,如梯度下降法,超参数设置......
像我说的那样,话题非常出国。为什么不在Coursera或斯坦福在线课程上尝试机器学习/深度学习课程?