为什么使用softmax作为多分类的概率函数

本文探讨了神经网络中softmax函数的重要性。softmax将网络输出转换为概率分布,确保非负且总和为1,适合多分类任务。它源于广义线性模型,暗示数据遵循Multinoulli分布,并简化了交叉熵损失函数的梯度计算。相较于其他转化方法,softmax提供了计算上的便利性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我们知道神经网络输出层的结果一般无法直接作为概率值,因为它既包含负值,加和也不为1,这是不满足概率的定义的。因此首先我们需要对其做一个转化使得:

  1. 向量值全为非负值
  2. 向量值加和等于1
  3. 转化是递增函数

而上面几个条件就排除了 x i ∑ i x i \frac{x_i}{\sum_{i} x_i} ixixi x i 2 ∑ i x i 2 \frac{x_i^2}{\sum_{i} x_i^2} ixi2xi2 ∣ x i ∣ ∑ i ∣ x i ∣ \frac{|x_i|}{\sum_{i} |x_i|} ixixi 等naive的方法,因为它们可能会出现除零,非线性递增等问题。


其实看完上面的例子,不难想到,要同时满足非负性和递增性,最简单的就是指数函数 e x p exp exp 和对数函数 l o g log log了,例如下面的函数就可以满足所有条件:
log ( 1 + exp ( x i ) ) ∑ j log ( 1 + exp ( x j ) ) \frac{\text{log}(1+\text{exp}(x_i))}{\sum_j \text{log}(1+\text{exp}(x_j))} jlog(1+exp(xj))log(1+exp(xi))

事实上你也可以使用这个函数作为多分类的概率函数。但是推动我们使用softmax的主要原因有两点:

  1. 根据 广义线性模型推导多项Logistic模型 中的论述,softmax函数是当数据服从Multinoulli分布时广义线性模型的目标函数形式。因此使用softmax函数暗含了数据服从Multinoulli分布。
  2. 由于多分类的损失函数是交叉熵:
    L = − ∑ i y i log ( s i ) L = -\sum_i y_i \text{log}(s_i) L=iyilog(si)
    而当 s i s_i si 为softmax函数 e z i ∑ k e z k \frac{e^{z_i}}{\sum_k e^{z_k}} kezkezi 时,会带来计算的简便性:
    ∂ L ∂ z j = − ∑ i y i s i ⋅ ∂ s i ∂ z j = − ∑ i y i s i ⋅ e z i ⋅ ∂ z i ∂ z j ⋅ ∑ k e z k − e z j ⋅ e z i ( ∑ k e z k ) 2 = − ∑ i y i s i ⋅ e z i ∑ k e z k ⋅ 1 { i = j } ⋅ ∑ k e z k − e z j ∑ k e z k = − ∑ i y i s i ⋅ s i ⋅ ( 1 { i = j } − s j ) = − ∑ i y i ( 1 { i = j } − s j ) = s j ∑ i y i − ∑ i y i ⋅ 1 { i = j } = s j − y j \begin{aligned} \frac{\partial L}{\partial z_j} &= - \sum_i \frac{y_i}{s_i}\cdot \frac{\partial s_i}{\partial z_j}\\ &= - \sum_i \frac{y_i}{s_i}\cdot \frac{e^{z_i}\cdot \frac{\partial z_i}{\partial z_j}\cdot \sum_{k}e^{z_k} - e^{z_j}\cdot e^{z_i}}{(\sum_{k}e^{z_k})^2}\\ &= - \sum_i \frac{y_i}{s_i}\cdot \frac{e^{z_i}}{\sum_k e^{z_k}} \cdot \frac{ 1\{i=j\}\cdot \sum_{k}e^{z_k} - e^{z_j}}{\sum_{k}e^{z_k}}\\ &= - \sum_i \frac{y_i}{s_i}\cdot s_i \cdot (1\{i=j\} - s_j)\\ &= - \sum_i y_i (1\{i=j\} - s_j)\\ & = s_j \sum_i y_i - \sum_i y_i\cdot 1\{i=j\}\\ &= s_j -y_j \end{aligned} zjL=isiyizjsi=isiyi(kezk)2ezizjzikezkezjezi=isiyikezkezikezk1{i=j}kezkezj=isiyisi(1{i=j}sj)=iyi(1{i=j}sj)=sjiyiiyi1{i=j}=sjyj

显然上面的例子 log ( 1 + exp ( x i ) ) ∑ j log ( 1 + exp ( x j ) ) \frac{\text{log}(1+\text{exp}(x_i))}{\sum_j \text{log}(1+\text{exp}(x_j))} jlog(1+exp(xj))log(1+exp(xi)) 就没有这样的计算简便性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值