torch.nn.functional.log_softmax 函数解析

该函数将输出向量转化为概率分布,作用和softmax一致。

相比softmax,对较小的概率分布处理能力更好。

一、定义

softmax 计算公式:

\text{softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}}

log_softmax 计算公式:

\text{log\_softmax}(x_i) = \log\left(\frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}}\right) = x_i - \log\left(\sum_{j=1}^n e^{x_j}\right)

可见仅仅是将 softmax 最外层套上 log 函数。

二、使用场景

log_softmax 相比 softmax,对较小的概率分布处理能力更好。

例如向量 \mathbf{x}=\left ( -999,1,2,5,6 \right ),使用softmax处理后,得到的概率分布如下:

\left ( 0.0000, 0.0048, 0.0131, 0.2641, 0.7179 \right )

使用 log_softmax 之后得到的概率分布如下:

\left ( -1.0053e+03, -5.3314e+00, -4.3314e+00, -1.3314e+00, -3.3141e-01 \right )

可见使用 softmax ,第一个数直接变0,当经过一次迭代 \mathbf{x}=\left ( -990,1.5,2.1,5.6,6.8 \right )之后,使用 softmax 得到的概率分布第一个元素仍为0,因此求得梯度为0,这个数据就不能用于更新参数,而使用 log_softmax  可解决此问题。

因此,log_softmax与softmax的区别在于输出的形式不同,softmax输出的是概率分布,而log_softmax输出的是对数概率分布。

在实际应用中,log_softmax通常用于计算损失函数,而softmax则用于预测[1]。

参考资料:

[1] log_softmax与softmax的区别_编程设计_ITGUEST

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值