在神经网络的输出层,典型的是使用softmax函数来近似一个概率分布:

因为指数的缘故,计算起来很费钱。为什么不简单地执行Z变换,使所有输出都是正的,然后通过将所有输出除以所有输出的和来归一化?


当前回答

选择softmax函数似乎有些武断,因为有许多其他可能的归一化函数。因此,目前还不清楚为什么log-softmax损耗会比其他损耗替代品表现更好。

来自“属于球形损失家族的Softmax替代方案的探索”https://arxiv.org/abs/1511.05042

作者探索了其他一些函数,其中包括泰勒exp展开和所谓的球形软最大值,并发现有时它们可能比通常的软最大值执行得更好。

其他回答

q_i的值是无界的分数,有时被解释为对数概率。根据这种解释,为了恢复原始概率值,必须对它们求幂。

统计算法经常使用对数似然损失函数的一个原因是它们在数值上更稳定:概率的乘积可以表示为一个非常小的浮点数。使用对数似然损失函数,概率的乘积变成一个和。

另一个原因是,当假设从多元高斯分布中提取随机变量的估计量时,对数似然性自然发生。例如,请参阅最大似然(ML)估计器及其与最小二乘连接的方式。

选择softmax函数似乎有些武断,因为有许多其他可能的归一化函数。因此,目前还不清楚为什么log-softmax损耗会比其他损耗替代品表现更好。

来自“属于球形损失家族的Softmax替代方案的探索”https://arxiv.org/abs/1511.05042

作者探索了其他一些函数,其中包括泰勒exp展开和所谓的球形软最大值,并发现有时它们可能比通常的软最大值执行得更好。

与标准归一化相比,Softmax有一个很好的属性。

它对分布均匀的神经网络的低刺激(想象一个模糊的图像)和高刺激(例如。大数字,想想清晰的图像),概率接近0和1。

而标准归一化并不关心,只要比例相同。

看看当soft max有10倍大的输入时会发生什么,即你的神经网络得到一个清晰的图像,许多神经元被激活

>>> softmax([1,2])              # blurry image of a ferret
[0.26894142,      0.73105858])  #     it is a cat perhaps !?
>>> softmax([10,20])            # crisp image of a cat
[0.0000453978687, 0.999954602]) #     it is definitely a CAT !

然后与标准归一化进行比较

>>> std_norm([1,2])                      # blurry image of a ferret
[0.3333333333333333, 0.6666666666666666] #     it is a cat perhaps !?
>>> std_norm([10,20])                    # crisp image of a cat
[0.3333333333333333, 0.6666666666666666] #     it is a cat perhaps !?

加上Piotr Czapla答案,在相同比例和与其他输入相比,输入值越大,最大输入的概率越大:

我认为其中一个原因可能是处理负数并除以0,因为exp(x)总是正的并且大于0。

例如,对于a =[-2, -1, 1,2],和将是0,我们可以使用softmax来避免除0。