You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二分类输出层Dense(2,softmax)与Dense(1,sigmoid)有何区别

二分类任务两种输出层实现的差异

在二分类相关的深度学习技术文章里,最常出现的两种输出层写法为:

# 写法1:2单元全连接+Softmax激活
Dense(2, activation = "softmax")
# 写法2:单单元全连接+Sigmoid激活
Dense(1, activation = "sigmoid")

下面从训练性能、落地使用两个维度说明二者的实际差异:

训练性能差异

从数学原理上看,二者的拟合能力是完全等价的:单单元Sigmoid的输出本质就是2单元Softmax固定其中一类的原始输出值为0时的特殊形式,只要损失函数搭配正确,正常训练收敛后,二者的精度、泛化能力没有可感知的显著差距。
实际训练中的细微差别主要来自两点:

  • 参数量不同:2单元Softmax层的参数量是「上一层输出维度2 + 2个偏置项」,单单元Sigmoid层的参数量是「上一层输出维度1 +1个偏置项」,后者参数量少一半。这个差距在常规小模型里几乎可以忽略,但在超大规模预训练模型、或者上一层输出维度极高的场景下,单单元Sigmoid的显存占用、计算速度会有微弱优势。
  • 数值稳定性差异:两种写法必须搭配对应的损失函数才能正常收敛:2单元Softmax要搭配分类交叉熵(CategoricalCrossentropy/SparseCategoricalCrossentropy),单单元Sigmoid要搭配二分类交叉熵(BinaryCrossentropy)。在损失配对正确的前提下二者稳定性基本一致,但在类别极度不平衡、需要给类别加权重的场景下,多数框架里单单元Sigmoid搭配加权二分类交叉熵的实现更简洁,出现数值溢出的概率稍低。

实际使用差异

模型训练完成落地时,二者的区别主要在输出逻辑上:

  • 输出格式不同:2单元Softmax会返回两个加和为1的概率值,分别对应样本属于负类、正类的概率,判定类别时需要取概率更大的索引作为预测结果;单单元Sigmoid只会返回一个0-1之间的浮点数,直接代表样本属于正类的概率,判定类别时直接和0.5阈值比对即可。
  • 后处理成本不同:如果是风控、医疗这类需要自定义阈值调整精确率、召回率的场景,Sigmoid输出的单值可以直接和自定义阈值比对;Softmax输出的结果需要先提取正类对应的概率值,再和阈值比对,多一步索引操作,逻辑上完全等价,只是代码写法稍繁琐一点。
  • 扩展灵活性不同:如果后续任务要从二分类扩展为多分类,2单元Softmax的写法只需要调整全连接层单元数、适配标签格式即可,改动成本更低;单单元Sigmoid的写法如果要扩展多分类,需要整体替换输出层结构。

内容的提问来源于stack exchange,提问作者Clément Perroud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:06:29