LogSoftmax和Softmax的核心区别及使用场景

在PyTorch中,LogSoftmaxSoftmax的核心区别及使用场景如下:

1. 数学定义

  • Softmax σ ( z i ) = e z i ∑ j = 1 K e z j \sigma(z_i) = \frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}} σ(zi)=j=1Kezjezi
    输出概率分布(所有输出和为1)
  • LogSoftmax log ⁡ ( σ ( z i ) ) \log(\sigma(z_i)) log(σ(zi))
    输出对数概率分布(更稳定的计算方式)

2. 典型应用场景

  • Softmax + CrossEntropyLoss(常用组合)
  • LogSoftmax + NLLLoss(需手动组合)

3. 数值稳定性
LogSoftmax在实现时采用以下优化公式:
log ⁡ ( σ ( z i ) ) = z i − log ⁡ ( ∑ j = 1 K e z j ) \log(\sigma(z_i)) = z_i - \log(\sum_{j=1}^K e^{z_j}) log(σ(zi))=zilog(j=1Kezj)
避免直接计算指数带来的数值溢出问题

4. 代码中的使用建议
如果在您的RNN模型中使用了:

self.softmax = nn.LogSoftmax(dim=-1)

对应的训练代码应搭配:

criterion = nn.NLLLoss()  # 而不是CrossEntropyLoss

5. 梯度计算差异
两者梯度形式不同,但LogSoftmax的反向传播计算更高效(避免了除法链式求导)

何时选择?
当需要:
✓ 直接获取对数概率时选LogSoftmax
✓ 需要可视化概率分布时选Softmax

你可能感兴趣的:(AI人工智能学习,python,机器学习,人工智能)