输出层的 softmax 和 sigmoid 函数
Posted
技术标签:
【中文标题】输出层的 softmax 和 sigmoid 函数【英文标题】:softmax and sigmoid function for the output layer 【发布时间】:2017-05-15 12:32:53 【问题描述】:在与对象检测和语义分割相关的深度学习实现中,我已经看到使用 sigmoid 或 softmax 的输出层。我不是很清楚什么时候用哪个?在我看来,他们俩都可以支持这些任务。这种选择有什么指导方针吗?
【问题讨论】:
【参考方案1】:softmax()
在您想要一个总和为 1 的概率分布时提供帮助。sigmoid
在您希望输出范围为 0 到 1 但不必总和为 1 时使用。
在您的情况下,您希望在两个备选方案之间进行分类和选择。我建议使用softmax()
,因为你会得到一个可以应用交叉熵损失函数的概率分布。
【讨论】:
嗨,我认为我的问题很笼统。当我阅读一些论文或深度学习实现时,我发现作者要么使用 sigmoid,要么使用 softmax。我没有看到与这种选择背后的逻辑相关的解释。例如,如果我们正在研究一个语义分割问题,每个像素都应该被预测为第 1 类或第 2 类。(假设这个语义分割是一个二分类标签)。那我觉得softmax和sigmoid都可以用。但是哪一个更好,或者应该给哪一个更多的偏好。 有点晚了,但我想我应该回答这个评论。在语义分割中,一个像素是否可以恰好属于两个类中的一个或同时属于两个类,这一点很重要。如果它可以同时属于两个类,则要使用 sigmoid,因为它不关心类之间的依赖关系。如果像素可以恰好属于您要使用 softmax 的两个类别之一,因为它会说明哪个类别更适合该像素。【参考方案2】:sigmoid 和 softmax 函数有不同的用途。关于在神经网络设计中何时使用 sigmoid 和 softmax 的详细解释,可以看这篇文章:"Classification: Sigmoid vs. Softmax."
简短总结:
如果您有一个多标签分类问题,其中有多个“正确答案”(输出不是互斥的),那么您可以对每个原始输出单独使用 sigmoid 函数。 sigmoid 将允许您对所有类、其中一些类或没有类都具有很高的概率。
如果您有一个多类分类问题,其中只有一个“正确答案”(输出是互斥的),那么请使用 softmax 函数。 softmax 将强制您的输出类的概率之和等于 1,因此为了增加特定类的概率,您的模型必须相应地降低至少一个其他类的概率。
【讨论】:
【参考方案3】:对象检测是在图像中的滑动窗口上使用的对象分类。在分类中,重要的是在某个类空间中找到正确的输出。例如。您检测到 10 个不同的对象,并且您想知道其中哪个对象最有可能。那么softmax是好的,因为它整个层总和为1的proberty。
另一方面,语义分割以某种方式分割图像。我已经完成了语义医学分割,输出是一个二值图像。这意味着您可以将 sigmoid 作为输出来预测该像素是否属于该特定类别,因为每个输出类别的 sigmoid 值都介于 0 和 1 之间。
【讨论】:
【参考方案4】:通常,当存在“n”个类时,使用 Softmax(Softmax 分类器)。 Sigmoid 或 softmax 都可以用于二元(n=2)分类。
乙状结肠: S(x) = 1/ ( 1+ ( e^(-x) ))
Softmax:
σ(x)j = e / **Σ**k=1 to K e^zk for(j=1.....K)
Softmax 是 Multi Class Sigmoid 的一种,但如果你看到 Softmax 的功能,所有 softmax 单元的总和应该是 1。在 sigmoid 中它不是真的必要。
深入挖掘,还可以使用 sigmoid 进行多类分类。当您使用 softmax 时,基本上您会得到每个类别的概率(连接分布和多项似然),其总和必然为 1。如果您使用 sigmoid 进行多类分类,它就像边际分布和伯努利似然,p(y0/x),p(y1/x) 等
【讨论】:
这个答案不是从这个quora帖子中复制过来的吗?quora.com/…以上是关于输出层的 softmax 和 sigmoid 函数的主要内容,如果未能解决你的问题,请参考以下文章
神经网络为啥要用sigmoid函数?为啥要映射到0-1之间?求解释
神经网络为啥要用sigmoid函数?为啥要映射到0-1之间?求解释