在神经网络的输出层,典型的是使用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 !?
其他回答
我们正在研究一个多类分类问题。也就是说,预测变量y可以取k个类别中的一个,其中k > 2。在概率论中,这通常用多项分布来模拟。多项分布是指数族分布的一个成员。我们可以利用指数族分布的性质重构概率P(k=?|x),它与softmax公式一致。
如果你相信这个问题可以用另一个分布来建模,而不是多项式分布,那么你就可以得到一个不同于softmax的结论。
有关进一步的信息和正式的推导,请参阅CS229课堂讲稿(9.3 Softmax回归)。
此外,通常对softmax执行的一个有用的技巧是:softmax(x) = softmax(x+c), softmax在输入中的偏移量不变。
我发现这里的解释非常好:CS231n:用于视觉识别的卷积神经网络。
从表面上看,softmax算法似乎是一个简单的非线性(我们用指数传播数据)归一化。然而,事情远不止如此。
具体来说,有几个不同的视图(与上面的链接相同):
信息论——从信息论的角度来看,softmax函数可以被看作是试图最小化预测和事实之间的交叉熵。 概率视图-从这个角度来看,我们实际上是在看对数概率,因此当我们执行幂运算时,我们最终得到原始概率。在这种情况下,softmax方程找到MLE(最大似然估计)
总之,即使softmax方程看起来是任意的,但它不是。这实际上是规范化分类的一种相当有原则的方式,以最小化预测和事实之间的交叉熵/负可能性。
选择softmax函数似乎有些武断,因为有许多其他可能的归一化函数。因此,目前还不清楚为什么log-softmax损耗会比其他损耗替代品表现更好。
来自“属于球形损失家族的Softmax替代方案的探索”https://arxiv.org/abs/1511.05042
作者探索了其他一些函数,其中包括泰勒exp展开和所谓的球形软最大值,并发现有时它们可能比通常的软最大值执行得更好。
虽然它确实有些随意,但softmax具有理想的属性,例如:
易微(df/dx = f*(1-f)) 当用作分类任务的输出层时,输入的分数可以解释为log-odds
我认为其中一个原因可能是处理负数并除以0,因为exp(x)总是正的并且大于0。
例如,对于a =[-2, -1, 1,2],和将是0,我们可以使用softmax来避免除0。