用神经网络做二元分类,输出层用Sigmoid还是Softmax?

  统计/机器学习 监督式学习 深度学习 人工神经网络    浏览次数: 1744
1

我用神经网络做二元分类,在最后的输出层的地方,output的函数应该用什么?

用Sigmoid还是Softmax?哪个好?

谢谢!


 

风云使者   2017-09-08 13:44



   3个回答 
3

本质上说它们是一个东西,所以没有所谓的谁好谁坏。

Softmax是广义的Sigmoid,因为Sigmoid只能做二元分类。Softmax是可以做多元分类。二元的Softmax其实就退化成了Sigmoid。


木子周   2017-09-09 04:18

1

对于二元分类Softmax和Sigmoid在数学上相似,但是在数值计算(numerical)上有点差别。

 对于Softmax,

$P(y=1|X)=\frac {e^{X^Tw_1}} {e^{X^Tw_0}+e^{X^Tw_1}}$,

$X$是全连接层输入,$w$是全连接层参数,$X^Tw_k$是logits,全连接层输出。当$X^Tw_1=$inf,输出$P$=inf/inf=Nan;当$X^Tw_1=$-inf,$X^Tw_0=$-inf,输出$P$=0/0,会报错float division by zero。

对于Sigmoid,

$P(y=1|X)=\frac {e^{X^Tw_1}} {e^{X^Tw_0}+e^{X^Tw_1}}$

$=\frac {e^{X^Tw_1}/e^{X^Tw_1}} {(e^{X^Tw_0}+e^{X^Tw_1})/e^{X^Tw_1}}$

$=\frac {1} {e^{X^T(w_0-w_1)}+1}$

$=\frac {1} {e^{X^T\Delta w}+1}$

当$X^T\Delta w$为inf/-inf时,输出$P$为0/1。

Softma需要学习两组$w_0,w_1$,而Sigmoid只需要学一组$\Delta w$。所以最好用一位输出的Sigmoid。



Zealing   2018-07-08 22:08

0

虽说它们似乎是等价的,不过感觉sigmoid更常用,更保险一点吧

Robin峰   2018-07-02 12:16



  相关主题

训练神经网络中经常提到的epoch是什么意思   2回答

神经网络中的gradient check是什么意思?   2回答

前馈神经网络如何选择隐藏层的数量   2回答

deep learning中的pooling是什么意思?   6回答

关于神经网络的性能   1回答

深度学习和人工神经网络是一回事吗?   1回答

神经网络中的Dropout和Bagging   1回答

dropout rate一般设置多大?   3回答

神经网络中的dense和sparse是什么意思?   2回答

mac电脑怎么用ssh远程控制Linux服务器查看可视化结果   1回答

pytorch 的交叉熵损失总是报错,同样的结构改成MSELoss就没有问题   1回答

keras.models.Sequential()是一种什么模型   1回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!