Math 为什么使用softmax而不是标准规范化?
在神经网络的输出层中,通常使用softmax函数来近似概率分布:Math 为什么使用softmax而不是标准规范化?,math,neural-network,softmax,Math,Neural Network,Softmax,在神经网络的输出层中,通常使用softmax函数来近似概率分布: 这是昂贵的计算,因为指数。为什么不简单地执行Z变换,使所有输出都为正,然后通过将所有输出除以所有输出的总和来进行归一化?q_i的值是无界分数,有时被解释为对数似然性。在这种解释下,为了恢复原始概率值,必须将其指数化 统计算法经常使用对数似然损失函数的一个原因是它们在数值上更稳定:概率的乘积可以表示为非常小的浮点数。使用对数似然损失函数,概率的乘积变成一个和 另一个原因是,当从多元高斯分布中推导随机变量的估计量时,自然会出现对数似
这是昂贵的计算,因为指数。为什么不简单地执行Z变换,使所有输出都为正,然后通过将所有输出除以所有输出的总和来进行归一化?q_i的值是无界分数,有时被解释为对数似然性。在这种解释下,为了恢复原始概率值,必须将其指数化 统计算法经常使用对数似然损失函数的一个原因是它们在数值上更稳定:概率的乘积可以表示为非常小的浮点数。使用对数似然损失函数,概率的乘积变成一个和
另一个原因是,当从多元高斯分布中推导随机变量的估计量时,自然会出现对数似然性。例如,请参见最大似然(ML)估计量及其与最小二乘法的连接方式。我发现这里的解释非常好: 从表面上看,softmax算法似乎是一种简单的非线性(我们以指数方式传播数据)归一化。然而,还有更多 具体来说,有两种不同的视图():
总之,尽管softmax方程看起来可能是任意的,但事实并非如此。这实际上是一种规范化分类的原则性方法,以最小化预测和真实之间的交叉熵/负可能性。假设我们更改softmax函数,使输出激活由
其中
c
为正常数。请注意,c=1
对应于标准的softmax功能。但是如果我们使用不同的c
值,我们会得到不同的函数,这在性质上与softmax非常相似。特别是,显示输出激活形成概率分布,就像通常的softmax一样。假设我们允许c
变大,即c→∞代码>。输出激活的极限值是多少?解决这个问题后,您应该清楚为什么我们认为c=1
函数是最大函数的“软化”版本。这就是术语“softmax”的由来。您可以遵循(等式83)中的详细信息。我们正在研究一个多类分类问题。也就是说,预测变量y
可以采用k
类别之一,其中k>2
。在概率论中,这通常由多项式分布来建模。多项式分布是指数族分布的一个成员。利用指数族分布的性质,我们可以重构概率P(k=?| x)
,它与softmax公式一致
如果你相信这个问题可以用另一个分布(而不是多项式)来建模,那么你可以得出一个不同于softmax的结论
有关更多信息和正式推导,请参阅
此外,通常对softmax执行的有用技巧是:softmax(x)=softmax(x+c),softmax对输入中的恒定偏移量不变
与标准归一化相比,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函数的选择似乎是任意的,因为还有许多其他可能的规范化函数。因此,不清楚为什么log softmax损耗比其他损耗替代方案性能更好
来自“属于球形损耗系列的Softmax备选方案探索”
作者探索了一些其他函数,其中包括exp
的泰勒展开和所谓的球形softmax,并发现有时它们的性能可能比通常的softmax
好。我已经有几个月的问题了。似乎我们只是巧妙地猜测了softmax是一个输出函数,然后将输入解释为对数概率。正如你所说的,为什么不简单地通过除以它们的总和来规范化所有的输出呢?我在Goodfello、Bengio和Courville(2016)的第6.2.2节中找到了答案
假设我们的最后一个隐藏层给了我们z作为一个激活。然后,softmax被定义为
非常简短的解释
softmax函数中的exp大致抵消了交叉熵损失中的log,导致损失在z_i中大致呈线性。当模型出错时,这会导致一个大致恒定的梯度,使其能够快速自我纠正。因此,错误的饱和softmax不会导致渐变消失
简短解释
训练神经网络最常用的方法是最大似然估计。我们估计参数θ的方法是