为什么使用softmax而不是标准规范化?

Tom*_*Tom 136 math neural-network softmax

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

在此输入图像描述

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

Pio*_*pla 136

与标准规范化相比,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 !
Run Code Online (Sandbox Code Playgroud)

然后将其与标准规范化进行比较

>>> 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 !?
Run Code Online (Sandbox Code Playgroud)

  • 这个答案最能说明使用取幂的*影响*,而不是关注理论基础.(这很棒).它应该包含在最佳答案的开头.在看到指数如何以及在何种程度上展开值之后,最佳答案有助于解释您为什么需要它. (11认同)
  • 不知道为什么这个答案是投票最多的。为什么[1,2]对应于模糊图像而[10,20]对应于较清晰的图像?这只是扩展问题,两种情况基本上相同。如果有的话,这似乎应该支持标准归一化,它正确地认为这两种情况是等效的。 (4认同)
  • @user118967,好问​​题,有很多原因可以解释为什么网络在更确定时应该输出更大的数字。稍后我会尝试找到一个简单的答案。暂时考虑一下卷积滤波器 + relu 如何通过大激活来体现特征检测,最大池化如何帮助保留最大激活,最重要的是 SGD + 交叉熵损失(softmax)教导网络在更确定时输出更大的激活(如Softmax 鼓励这一点)。 (4认同)
  • 当值已经保证在 [0, 1] 范围内时,采用 softmax 而不是简单地除以总和还有什么优势吗? (3认同)
  • @MartinThoma,这些值是任意的,只是为了帮助遵循数学,如果你的网络有一些归一化(例如批量归一化)和[0,1]中的输出值,那么通过使用softmax,你仍然可以知道你的输出何时变得兴奋。考虑 [0.001, 0.002] (0.49975, 0.50025) 与 [0.5, 1.0] (0.37, 0.62) (2认同)
  • 不过,清晰的图像不会得分为“[1,20]”吗? (2认同)

Kil*_*ner 50

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

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

非常简短的解释

softmax函数中的exp粗略地抵消了交叉熵损失中的对数,导致损失在z_i中大致为线性.当模型错误时,这会导致大致恒定的梯度,使其能够快速自我校正.因此,错误的饱和softmax不会导致消失的梯度.

简短说明

训练神经网络最流行的方法是最大似然估计.我们以最大化训练数据(大小为m)的可能性的方式估计参数θ.由于整个训练数据集的可能性是每个样本的可能性的乘积,因此更容易最大化数据集的对数似然性,从而使每个样本的对数似然的总和由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,并且log-likelihood大致为(z_i-z_j).这清楚地告诉模型如何增加对数似然:增加z_i并减少z_j.

我们看到整体对数似然将由样本主导,其中模型不正确.此外,即使模型确实不正确,导致饱和的softmax,损耗函数也不会饱和.它在z_j中近似为线性,这意味着我们有一个大致恒定的梯度.这允许模型快速自我纠正.请注意,例如,均值平方误差不是这种情况.

长解释

如果softmax似乎仍然是你的任意选择,你可以看看在逻辑回归中使用sigmoid的理由:

为什么sigmoid功能而不是其他什么?

softmax是类似于多类问题的sigmoid的推广.


Bre*_*ett 43

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

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

具体来说,有几个不同的观点(与上面相同的链接):

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

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

总之,尽管softmax方程似乎可以是任意的,但它不是.它实际上是一种相当原理化的分类标准化方法,以最小化预测和事实之间的交叉熵/负面可能性.

  • 至于概率观:查看对数概率的动机是什么?推理似乎有点像"我们在softmax中使用e ^ x,因为我们将x解释为log-probabilties".用我们可以说的相同推理,我们在softmax中使用e ^ e ^ e ^ x,因为我们将x解释为log-log-log-probability(当然夸大这里).我得到了softmax的数值优势,但使用它的理论动机是什么? (17认同)
  • 我得到了使用交叉熵损失的原因,但这与softmax有什么关系?你说"softmax函数可以看作是试图最小化预测和事实之间的交叉熵".假设,我会使用标准/线性归一化,但仍然使用交叉熵损失.然后我也会尽量减少交叉熵.那么softmax如何与交叉熵**相关联,除了**以获得数值效益? (10认同)
  • @KilianBatzner如果神经元的输出是对数概率,则许多神经元输出的总和是它们概率的乘积.这比概率总和更有用. (5认同)
  • 为了补充前面的评论,softmax函数的导数只是softmax(1-softmax) (2认同)

Vic*_*May 14

q_i的值表示对数似然.为了恢复概率值,您需要对它们进行取幂.

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

另一个原因是,当推导出假设从多元高斯分布中提取的随机变量的估计量时,对数似然自然地发生.例如,参见最大似然(ML)估计量以及它与最小二乘方连接的方式.

作为旁注,我认为这个问题更适合CS理论或计算科学堆栈交换.

  • q_i不隐式表示对数似然.只有当我们使用我们明确假设的softmax时. (12认同)

neg*_*gas 9

添加到 Piotr Czapla 答案中,输入值越大,对于相同比例并与其他输入相比,最大输入的概率越大:

在此输入图像描述


Gab*_*Chu 8

我们正在研究一个多类分类问题。也就是说,预测变量y可以采用k类别之一,其中k > 2。在概率论中,这通常用多项式分布建模。多项分布是指数族分布的一员。我们可以P(k=?|x)使用指数族分布的特性来重构概率,它与 softmax 公式一致。

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

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

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

在这里输入图片描述

  • 严格来说,“softmax”不是一个激活函数。激活函数是一种逐元素运算——给一个张量逐元素执行非线性运算以产生另一个张量。但“softmax”是一个向量运算,它会产生一个标准化向量,每个元素之间存在内部依赖关系。 (2认同)

Rom*_* Kh 7

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

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

作者探索了其他一些函数,其中包括泰勒展开exp和所谓的球面 softmax,发现有时它们的性能可能比平时更好softmax


OmG*_*OmG 5

假设我们更改 softmax 函数,因此输出激活由下式给出\n在此输入图像描述

\n\n

其中c是正常数。请注意,它c=1对应于标准的 softmax 函数。但是,如果我们使用不同的值,c我们会得到不同的函数,尽管如此,它在质量上与 softmax 非常相似。特别是,表明输出激活形成概率分布,就像通常的 softmax 一样。假设我们允许c变得很大,即c\xe2\x86\x92\xe2\x88\x9e。输出激活的极限值是多少a^L_j?解决这个问题后,您应该清楚为什么我们将该c=1函数视为最大函数的“软化”版本。这就是“softmax”一词的由来。您可以遵循此来源的详细信息(公式 83)。

\n


tor*_*eff 5

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

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

  • 通常,您会减去最小值,然后除以最大值/和。在您的情况下,将使[[0,1,3,4]`然后除。 (3认同)
  • @ubershmekel这会遇到这样的问题:得分最小的班级总是被分配概率为 0 的问题。 (3认同)