为什么要使用softmax而不是标准归一化?


159

在神经网络的输出层中,通常使用softmax函数来近似概率分布:

在此处输入图片说明

由于指数的原因,计算起来很昂贵。为什么不简单地执行Z变换以使所有输出为正,然后仅通过将所有输出除以所有输出的总和来进行归一化?


8
由于该指数,该函数的计算成本并不高,但是因为您需要计算每个qj。与所需的计算总量相比,求幂运算便宜。
Seppo Enarvi

您在说哪种Z变换?该术语的信号处理含义不适用于此处,并且如果输入值低于平均值,则将其值替换为其z分数会产生负输出。
David Cian

另请参阅:Stats.SE
Martin Thoma

Answers:


166

与标准归一化相比,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 !?

16
这个答案最好的说明了影响使用指数,而不是着眼于理论基础的。(很棒)。它应该包含在最佳答案的开头。在查看幂运算如何以及在多大程度上扩展了值之后,最上面的答案有助于解释您为什么想要这样做。
伊恩·丹佛斯

@IanDanforth我同意你的看法。应该是一个开始。
Hitesh

11
不知道为什么这个答案是投票最多的。为什么[1,2]对应于模糊图像,而[10,20]对应于较清晰的图像?这只是扩展问题,两种情况基本相同。如果有的话,这似乎应该支持标准归一化,它正确地认为这两种情况是等效的。
user118967

当已经保证值在[0,1]中时,采用softmax而不是简单地除以和还有什么优势吗?
马丁·托马

58

我这个问题已经有几个月了。似乎我们只是巧妙地将softmax猜测为输出函数,然后将softmax的输入解释为对数概率。如您所说,为什么不简单地通过除以它们的总和来归一化所有输出呢?我在6.2.2节的Goodfellow,Bengio和Courville(2016)的深度学习书中找到了答案。

假设我们的最后一个隐藏层将z作为激活。然后将softmax定义为

简短说明

softmax函数中的exp大致抵消了交叉熵损失中的对数,从而使损失在z_i中大致呈线性。当模型错误时,这会导致大致恒定的梯度,从而使其能够快速进行校正。因此,错误的饱和softmax不会导致梯度消失。

简短说明

训练神经网络最流行的方法是最大似然估计。我们以最大化训练数据(大小为m)的可能性的方式估算参数theta。因为整个训练数据集的似然性是每个样本的似然性的乘积,所以更容易最大化数据集的对数似然性,从而使每个样本的对数似然之和由k索引:

现在,我们仅关注z已经给出的softmax,因此我们可以替换

我是第k个样本的正确类别。现在,我们看到当采用softmax的对数来计算样本的对数似然时,我们得到:

,对于z的较大差异,其大致近似为

首先,我们在这里看到线性分量z_i。其次,我们可以检查两种情况下max(z)的行为:

  1. 如果模型正确,则max(z)将为z_i。因此,对数似然渐近渐近为零(即似然为1),并且z_i与z中的其他项之间的差异越来越大。
  2. 如果模型不正确,则max(z)将是其他z_j> z_i。因此,z_i的添加不能完全抵消-z_j,对数似然近似为(z_i-z_j)。这清楚地告诉模型如何增加对数似然性:增加z_i和减小z_j。

我们看到,总体对数似然率将由模型不正确的样本决定。同样,即使模型确实是不正确的,这会导致softmax饱和,但损失函数不会饱和。z_j近似线性,这意味着我们具有大致恒定的梯度。这样可以使模型快速进行校正。注意,例如,均方误差不是这种情况。

详细说明

如果softmax在您看来仍然是一个任意选择,那么您可以看看在逻辑回归中使用Sigmoid的理由:

为什么要使用S型函数而不是其他函数?

softmax是针对类似证明的多类问题的S形概化。


嗨,您能否解释一下这一说法,您如何近似?“,对于z的大差异,大致近似于”
伦敦佬

45

我发现这里的解释很好:CS231n:用于视觉识别的卷积神经网络。

从表面上看,softmax算法似乎是一种简单的非线性归一化(我们正在以指数形式扩展数据)。但是,还有更多。

具体来说,有几个不同的视图(与上述相同的链接):

  1. 信息论-从信息论的角度来看,softmax函数可以看作是试图最小化预测和真实之间的交叉熵。

  2. 概率视图-从这个角度来看,我们实际上是在查看对数概率,因此,当我们执行幂运算时,最终会得到原始概率。在这种情况下,softmax方程找到MLE(最大似然估计)

总而言之,即使softmax方程看起来可能是任意的,也不是。实际上,这是对分类进行归一化的一种原则性方法,可最大程度地减少预测与真实之间的交叉熵/负可能性。


2
为了补充前面的评论,softmax函数的导数只是softmax(1-softmax)
Rouzbeh

11
我有使用交叉熵损失的原因,但这与softmax有什么关系?您说过“ softmax函数可以看作是试图最小化预测和真实之间的交叉熵”。假设我将使用标准/线性归一化,但仍将使用交叉熵损失。然后,我还将尝试最小化交叉熵。那么,除了数值收益之外,softmax如何与交叉熵联系起来?
基利安·巴兹纳

18
至于概率观点:查看对数概率的动机是什么?推理似乎有点像“我们在softmax中使用e ^ x,因为我们将x解释为对数概率”。出于同样的理由,我们可以在softmax中使用e ^ e ^ e ^ x,因为我们将x解释为log-log-log-概率(当然,这里夸大了)。我得到了softmax的数值好处,但是使用它的理论动机是什么?
基利安·巴兹纳

5
@KilianBatzner如果神经元的输出是对数概率,那么许多神经元的输出之和就是其概率的乘积。这比概率总和更有用。
alltom

1
@KilianBatzner如果您的要素来自不同的高斯聚类(每个类在一个聚类上),则可以派生一个完美的分类器(逻辑回归)。还有一些其他条件,但实际上,您可以假设要分离高斯聚类,从而证明/推导softmax和logit。
maxy

16

q_i的值表示对数似然。为了恢复概率值,您需要对它们求幂。

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

另一个原因是,在推导假定是从多元高斯分布中得出的随机变量的估计量时,自然会发生对数似然。例如,请参见最大似然(ML)估计器及其与最小二乘法的连接方式。

作为附带说明,我认为这个问题更适合CS理论或计算科学堆栈交易所。


12
q_i并不隐式表示对数似然。只有当我们使用softmax时,我们才明确假定它们会这样做。
2015年

6

我们正在研究一个多类分类问题。即,预测的可变y可采取的一个k类别,在那里k > 2。在概率论中,这通常通过多项式分布来建模。多项式分布是指数族分布的成员。我们可以P(k=?|x)使用指数族分布的属性来重建概率,该概率与softmax公式一致。

如果您认为问题可以用多项分布以外的其他分布建模,那么您可以得出与softmax不同的结论。

有关更多信息和正式推导,请参阅CS229讲义(9.3 Softmax回归)

此外,通常对softmax有用的技巧是:softmax(x)= softmax(x + c),softmax对于输入中的恒定偏移量是不变的。

输入图片描述herse


它为“ x”和“ x + c”返回相同的值时,它如何用作激活函数?
Suresh Pokharel

1
严格来说,softmax不是激活功能。激活函数是逐个元素的操作-给张量逐个元素执行非线性操作以生成另一个张量。但是softmax是向量运算,它会产生一个标准化向量,每个元素之间都有内在的依赖关系。
GabrielChu

5

我认为原因之一可能是处理负数并除以零,因为exp(x)始终为正且大于零。

例如,a = [-2, -1, 1, 2]总和为0,我们可以使用softmax避免被零除。


3
通常,您会减去最小值,然后除以最大值/和。在你的情况下,那将导致[0, 1, 3, 4]分裂。
ubershmekel '19

1
@ubershmekel这将运行到与最小分数在班上总是会被指定为0的概率问题
亚历山德罗电源

4

假设我们更改softmax函数,那么输出激活由下式给出 在此处输入图片说明

在哪里c是一个正常数。请注意,它c=1对应于标准softmax功能。但是,如果我们使用不同的值,则会c得到不同的函数,但从质上说,它与softmax类似。尤其要证明,输出激活会形成概率分布,就像通常的softmax一样。假设我们允许c变大,即c→∞。输出激活的极限值是a^L_j多少?解决此问题后,您应该清楚为什么我们将c=1功能视为最大功能的“软化”版本。这是术语“ softmax”的由来。您可以从此来源中获取详细信息(方程式83)。


对我来说,最大功能的“软化”版本是证明使用softmax的最佳简单方法。
塔舒赫卡

3

对于Piotr Czapla答案,输入值越大,与其他输入相比,相同比例的最大输入的可能性越大:

在此处输入图片说明


2

softmax函数的选择似乎有些随意,因为还有许多其他可能的标准化函数。因此,目前尚不清楚为什么log-softmax损失会比其他损失替代方法表现更好。

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

作者探索了其他功能,其中包括Taylor的泰勒展开exp和所谓的球形softmax,并发现有时它们的性能可能比平时更好softmax

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.