我用神经网络做二元分类,在最后的输出层的地方,output的函数应该用什么?
用Sigmoid还是Softmax?哪个好?
谢谢!
3个回答
本质上说它们是一个东西,所以没有所谓的谁好谁坏。
Softmax是广义的Sigmoid,因为Sigmoid只能做二元分类。Softmax是可以做多元分类。二元的Softmax其实就退化成了Sigmoid。
对于二元分类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。