PyTorch 深度学习笔记(十一):二分类任务中 Sigmoid 激活函数的场景适配
·
PyTorch 深度学习笔记(十一):二分类任务中 Sigmoid 激活函数的场景适配
在二分类任务中,Sigmoid 激活函数是核心组件之一,其作用是将模型输出映射到概率空间 $( [0,1] )$。以下从原理、适配场景及实现细节展开说明:
1. Sigmoid 函数原理
定义:
$$ \sigma(x) = \frac{1}{1 + e^{-x}} $$
特性:
- 输出范围 $( (0,1) )$,可直接解释为概率
- 导数 $\sigma'(x) = \sigma(x) \cdot (1 - \sigma(x))$,便于梯度计算
- 单调性保证概率预测的一致性
2. 适配场景分析
适用场景:
- 输出层激活:将线性层输出 $( z \in \mathbb{R} )$ 转换为概率值 $( \hat{y} = P(y=1) )$
- 概率建模:例如用户点击预测 $( \hat{y}>0.5 \text{ 为点击} )$
- 损失函数配合:需与 二元交叉熵损失 (BCE Loss) 联用: $$ \mathcal{L} = -\frac{1}{N} \sum_{i=1}^N \left[ y_i \log(\hat{y}_i) + (1-y_i) \log(1-\hat{y}_i) \right] $$
不适用场景:
- 多分类任务(应使用 Softmax)
- 回归任务(输出需连续值)
- 深层网络中间层(易导致梯度消失)
3. PyTorch 实现要点
网络层设计:
import torch.nn as nn
class BinaryClassifier(nn.Module):
def __init__(self, input_dim):
super().__init__()
self.fc = nn.Linear(input_dim, 1) # 输出单节点
self.sigmoid = nn.Sigmoid() # 输出层激活
def forward(self, x):
x = self.fc(x)
return self.sigmoid(x) # 输出概率值
损失函数选择:
# 方案1:显式 Sigmoid + BCELoss
model = BinaryClassifier(input_dim=10)
criterion = nn.BCELoss() # 需手动添加 Sigmoid
# 方案2:隐式 Sigmoid(推荐)
criterion = nn.BCEWithLogitsLoss() # 自动合并 Sigmoid 与 BCE
4. 数值稳定性优化
问题:
$( \log(\sigma(x)) )$ 在 $( x \to -\infty )$ 时出现下溢。
解决方案:
- 使用
BCEWithLogitsLoss替代手动实现 - 该函数内置数值稳定版本: $$ \mathcal{L} = \max(x, 0) - x \cdot y + \log(1 + e^{-|x|}) $$
5. 决策边界分析
Sigmoid 隐含的决策边界为线性超平面: $$ w^T x + b = 0 $$
可通过调整阈值 $( \tau )$ 平衡精度与召回率:
- 默认阈值 $( \tau=0.5 )$
- 高召回场景:降低 $( \tau )$(如 $( \tau=0.3 )$)
总结
Sigmoid 在二分类任务中的核心价值是 概率映射,需注意:
- 严格限定于输出层
- 优先使用
BCEWithLogitsLoss保证稳定性 - 决策阈值需根据业务需求调整
注:多任务场景中若包含二分类分支,仍适用此方案。
更多推荐

所有评论(0)