在神经网络的输出层,通常使用 softmax 函数来近似概率分布:
由于指数,这计算起来很昂贵。为什么不简单地执行 Z 变换以使所有输出均为正数,然后仅通过将所有输出除以所有输出之和进行归一化?
在神经网络的输出层,通常使用 softmax 函数来近似概率分布:
由于指数,这计算起来很昂贵。为什么不简单地执行 Z 变换以使所有输出均为正数,然后仅通过将所有输出除以所有输出之和进行归一化?
与标准归一化相比,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 !?
我有这个问题好几个月了。似乎我们只是巧妙地将 softmax 猜测为输出函数,然后将 softmax 的输入解释为对数概率。正如您所说,为什么不简单地通过除以它们的总和来标准化所有输出?我在Goodfellow、Bengio 和 Courville (2016)的深度学习一书中的第 6.2.2 节中找到了答案。
假设我们的最后一个隐藏层给了我们 z 作为激活。那么softmax定义为
softmax 函数中的 exp 大致抵消了交叉熵损失中的对数,导致损失在 z_i 中大致呈线性。当模型错误时,这会导致大致恒定的梯度,从而使其能够快速自我纠正。因此,错误的饱和 softmax 不会导致梯度消失。
训练神经网络最流行的方法是最大似然估计。我们以最大化训练数据(大小为 m)的可能性的方式估计参数 theta。因为整个训练数据集的似然是每个样本的似然的乘积,所以更容易最大化数据集的对数似然,从而最大化由 k 索引的每个样本的对数似然之和:
现在,我们只关注已经给出 z 的 softmax,所以我们可以替换
i 是第 k 个样本的正确类别。现在,我们看到,当我们取 softmax 的对数来计算样本的对数似然时,我们得到:
,对于 z 的较大差异,其大致近似为
首先,我们在这里看到线性分量 z_i。其次,我们可以在两种情况下检查 max(z) 的行为:
我们看到整体对数似然将由样本主导,其中模型不正确。此外,即使模型确实不正确,导致 softmax 饱和,损失函数也不会饱和。它在 z_j 中近似线性,这意味着我们有一个大致恒定的梯度。这允许模型快速自我修正。请注意,例如,均方误差并非如此。
如果 softmax 对您来说仍然是一个任意选择,您可以查看在逻辑回归中使用 sigmoid 的理由:
softmax 是 sigmoid 对多类问题的推广,类似地证明是合理的。
我发现这里的解释非常好:CS231n: Convolutional Neural Networks for Visual Recognition。
从表面上看,softmax 算法似乎是一个简单的非线性(我们正在用指数传播数据)归一化。然而,还有更多。
具体有几个不同的视图(与上面相同的链接):
信息论——从信息论的角度来看,softmax 函数可以被看作是试图最小化预测和事实之间的交叉熵。
概率视图 - 从这个角度来看,我们实际上是在查看对数概率,因此当我们执行幂运算时,我们最终会得到原始概率。在这种情况下,softmax 方程找到 MLE(最大似然估计)
总之,即使 softmax 方程看起来可能是任意的,但它不是。它实际上是一种标准化分类以最小化预测与事实之间的交叉熵/负似然性的相当原则的方法。
的值q_i
是无界分数,有时被解释为对数似然。在这种解释下,为了恢复原始概率值,您必须对它们取幂。
统计算法经常使用对数似然损失函数的一个原因是它们在数值上更稳定:概率的乘积可以表示为一个非常小的浮点数。使用对数似然损失函数,概率的乘积变为和。
另一个原因是,在推导假定从多元高斯分布中得出的随机变量的估计量时,自然会出现对数似然。例如,请参阅最大似然 (ML) 估计器及其与最小二乘法的连接方式。
我们正在研究一个多类分类问题。也就是说,预测变量y
可以采用k
类别之一,其中k > 2
。在概率论中,这通常由多项分布建模。多项分布是指数族分布的成员。我们可以P(k=?|x)
利用指数族分布的性质重构概率,它与softmax公式一致。
如果您认为问题可以通过多项式以外的其他分布建模,那么您可以得出与 softmax 不同的结论。
有关更多信息和正式推导,请参阅CS229 讲义(9.3 Softmax Regression)。
此外,通常对 softmax 执行的一个有用技巧是:softmax(x) = softmax(x+c),softmax 对于输入中的恒定偏移量是不变的。
我认为原因之一可能是处理负数和除以零,因为 exp(x) 将始终为正且大于零。
例如a = [-2, -1, 1, 2]
总和为 0,我们可以使用 softmax 来避免除以零。
softmax 函数的选择似乎有些随意,因为还有许多其他可能的归一化函数。因此不清楚为什么 log-softmax 损失会比其他损失替代方案表现更好。
来自“属于 Spherical Loss 系列的 Softmax 替代方案的探索” https://arxiv.org/abs/1511.05042
作者探索了其他一些函数,其中包括泰勒展开exp
和所谓的球形 softmax,并发现有时它们的性能可能比平时更好softmax
。
其中c
是一个正常数。注意c=1
对应于标准的softmax函数。但是如果我们使用不同的值,c
我们会得到不同的函数,但它在质量上与 softmax 非常相似。特别是,表明输出激活形成一个概率分布,就像通常的 softmax 一样。假设我们允许c
变大,即c→∞
。输出激活的极限值是a^L_j
多少?解决这个问题后,您应该清楚为什么我们认为c=1
函数是最大函数的“软化”版本。这就是术语“softmax”的由来。您可以遵循此来源的详细信息(方程式 83)。