softmax函数到底是什么?——归一化指数函数,及其python实现

softmax应该算是机器学习的入门数学知识了。softmax函数,它并不十分复杂,但又不是十分简单,总之这个函数就是很难去背诵下来,以致于每次你要写softmax的时候,都得搜一下才行。而每次搜索softmax,都对你的信心是一次小规模打击——这么简单的数学公式我还不会?我这是要凉啊。。。


好了,废话少说。我想,我们一直难以把并不很复杂的softmax函数背下来的原因,可能并非因为我们懒,而是因为我们一直都没有摸透softmax的本质。这可能也和我们接触softmax的时间点有关——我们接触它的时候是初学者,亦步亦趋地追随课程进度或者博客的知识尚且费劲儿,对于这类公式,我们就当它“本来就该是这样”了。至少对我而言,我一直都想不通,softmax的公式为何这么奇怪。

 

我们来看看softmax的另一个名字就一目了然了———softmax函数,又称归一化指数函数。

所以很显然,softmax的意思呢,即是将一个k维向量z,映射到另一个k维空间中,这种映射函数就是softmax。那么我们为啥要softmax来映射一遍?因为softmax可以将向量z的每个维度的取值均压缩至(0,1)之间。这就是softmax的本质,也是softmax函数的初衷


因此,softmax函数的表达式就显而易见了:分母是所有k维向量z所有维度的自然底数e指数之和,分子是待求维度的自然底数e的指数,如下所示:

$$softmax(z)_j = \dfrac{e^{z_j}}{\sum_{k=1}^{K}e^{z_k}}$$

其中,\(softmax(z)_j\)指的是k维向量z经过softmax函数映射后的第j维的取值。


而softmax在机器学习或深度学习中,更多的是以“多项逻辑回归”而存在的,用来计算样本向量\(X^{(i)}\)属于某个类别的概率分布。其中,属于第j个类别的概率为:

$$P(y^{(i)}|x^{(i)};\Theta) = \dfrac{e^{\Theta^{T}X^{(i)}_j}}{\sum_{k=1}^{K} e^{\Theta^{T}X^{(i)}_k}}$$

如公式所示,我们同样将向量\(\Theta^{T} X^{(i)}\)进行归一化映射。


python实现(其实是numpy实现)

import numpy as np
z = np.array([1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0])
softmax_z = np.exp(z)/sum(np.exp(z))

最后,在谈一谈softmax名字的由来:

Softmax 不同于普通的 max 函数:max 函数只输出最大的那个值,而 Softmax 则确保较小的值也有较小的概率,不会被直接舍弃掉,是一个比较“Soft”的“max”,这个“soft”是对比合页损失的“hard”而来的。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_illusion_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值