在神经网络的输出层中,通常使用softmax函数来近似概率分布:
由于指数,计算成本很高。为什么不简单地执行Z变换以使所有输出都是正的,然后通过将所有输出除以所有输出的总和来归一化?
答案 0 :(得分:115)
与标准规范化相比,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 !?
答案 1 :(得分:40)
我发现这里的解释非常好:CS231n: Convolutional Neural Networks for Visual Recognition.
在表面上,softmax算法似乎是一个简单的非线性(我们正在以指数方式扩展数据)规范化。但是,还有更多。
具体来说,有几个不同的观点(same link as above):
信息理论 - 从信息理论的角度来看,softmax函数可以被视为试图最小化预测与事实之间的交叉熵。
概率视图 - 从这个角度来看,我们实际上是在查看对数概率,因此当我们执行求幂时,我们最终会得到原始概率。在这种情况下,softmax方程找到MLE(最大似然估计)
总之,尽管softmax方程似乎可以是任意的,但它不是。它实际上是一种相当原则性的分类标准化方法,以最大限度地减少预测与事实之间的交叉熵/负面可能性。
答案 2 :(得分:39)
我好几个月都有这个问题。看起来我们只是巧妙地猜测softmax作为输出函数,然后将softmax的输入解释为对数概率。如你所说,为什么不通过除以它们的总和来简单地将所有输出归一化?我在Goodfellow,Bengio和Courville(2016)的Deep Learning book中找到了第6.2.2节的答案。
假设我们的最后一个隐藏层将z作为激活。然后softmax定义为
softmax函数中的exp大致抵消了交叉熵损失中的对数,导致损失在z_i中大致呈线性。当模型错误时,这会导致大致恒定的梯度,使其能够快速自我校正。因此,错误的饱和softmax不会导致消失的梯度。
训练神经网络最流行的方法是最大似然估计。我们以最大化训练数据(大小为m)的可能性的方式估计参数θ。由于整个训练数据集的可能性是每个样本的可能性的乘积,因此更容易最大化数据集的对数似然,从而更容易地对每个样本的对数似然性的总和进行索引由k:
现在,我们只关注已经给出z的softmax,所以我们可以替换
我是第k个样本的正确类。现在,我们看到当我们采用softmax的对数时,为了计算样本的对数似然,我们得到:
,对于z的大差异大致接近
首先,我们在这里看到线性分量z_i。其次,我们可以检查两种情况下max(z)的行为:
我们发现整体对数似然将由样本主导,其中模型不正确。此外,即使模型确实不正确,导致饱和的softmax,损耗函数也不会饱和。它在z_j中近似为线性,这意味着我们有一个大致恒定的梯度。这允许模型快速自我纠正。请注意,例如,均值平方误差不是这种情况。
如果softmax对你来说仍然是一个随意的选择,你可以看看在逻辑回归中使用sigmoid的理由:
Why sigmoid function instead of anything else?
softmax是类似于多类问题的sigmoid的推广。
答案 3 :(得分:14)
q_i的值表示对数似然。为了恢复概率值,您需要取幂它们。
统计算法经常使用对数似然丢失函数的一个原因是它们在数值上更稳定:概率的乘积可以表示为非常小的浮点数。使用对数似然丢失函数,概率的乘积变为总和。
另一个原因是,当推导出假设从多元高斯分布中提取的随机变量的估计量时,对数似然自然发生。例如,参见最大似然(ML)估计量及其与最小二乘方的连接方式。
作为旁注,我认为这个问题更适合CS理论或计算科学堆栈交换。
答案 4 :(得分:4)
我认为其中一个原因可能是处理负数并除以零,因为exp(x)将始终为正且大于零。
例如a = [-2, -1, 1, 2]
总和为0,我们可以使用softmax来避免除零。
答案 5 :(得分:3)
其中c
是正常数。请注意,c=1
对应于标准softmax函数。但是如果我们使用不同的c
值,我们会得到一个不同的函数,但它在质量上与softmax非常相似。特别是,显示输出激活形成概率分布,就像通常的softmax一样。假设我们允许c
变大,即c→∞
。输出激活a^L_j
的限制值是多少?在解决了这个问题之后,我们应该清楚为什么我们将c=1
函数视为"软化的"版本的最大功能。这是术语" softmax"的起源。您可以按照this source(公式83)中的详细信息进行操作。
答案 6 :(得分:2)
我们正在研究一个多分类问题。预测变量y
可以采用k
个类别中的一个,其中k > 2
。在概率论中,这是一个多项分布,多项分布属于一个称为指数族的大家族。根据指数族分布的性质,我们重建P(k=?|x)
的概率,它与softmax公式一致。
有关详细信息和正式证明,请参阅CS229 lecture notes (Softmax Regression)。
一个有用的技巧通常用于softmax: softmax(x)= softmax(x + c),也就是说,softmax对输入中的常量偏移是不变的。
答案 7 :(得分:2)
softmax函数的选择似乎某种程度上是任意的,因为还有许多其他可能的规范化函数。因此不清楚为什么log-softmax损失比其他损失替代方案表现更好。
来自“对属于球形损失家庭的Softmax替代品的探索”https://arxiv.org/abs/1511.05042
作者探讨了其中一些其他函数,其中包括exp
的泰勒展开,也就是所谓的球形softmax,并发现有时它们的表现可能比平常softmax
更好。
答案 8 :(得分:1)
答案 9 :(得分:0)