在神经网络的输出层中,通常使用softmax函数来近似概率分布:
由于指数的原因,计算起来很昂贵。为什么不简单地执行Z变换以使所有输出为正,然后仅通过将所有输出除以所有输出的总和来进行归一化?
在神经网络的输出层中,通常使用softmax函数来近似概率分布:
由于指数的原因,计算起来很昂贵。为什么不简单地执行Z变换以使所有输出为正,然后仅通过将所有输出除以所有输出的总和来进行归一化?
Answers:
与标准归一化相比,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的输入解释为对数概率。如您所说,为什么不简单地通过除以它们的总和来归一化所有输出呢?我在6.2.2节的Goodfellow,Bengio和Courville(2016)的深度学习书中找到了答案。
假设我们的最后一个隐藏层将z作为激活。然后将softmax定义为
softmax函数中的exp大致抵消了交叉熵损失中的对数,从而使损失在z_i中大致呈线性。当模型错误时,这会导致大致恒定的梯度,从而使其能够快速进行校正。因此,错误的饱和softmax不会导致梯度消失。
训练神经网络最流行的方法是最大似然估计。我们以最大化训练数据(大小为m)的可能性的方式估算参数theta。因为整个训练数据集的似然性是每个样本的似然性的乘积,所以更容易最大化数据集的对数似然性,从而使每个样本的对数似然之和由k索引:
现在,我们仅关注z已经给出的softmax,因此我们可以替换
我是第k个样本的正确类别。现在,我们看到当采用softmax的对数来计算样本的对数似然时,我们得到:
,对于z的较大差异,其大致近似为
首先,我们在这里看到线性分量z_i。其次,我们可以检查两种情况下max(z)的行为:
我们看到,总体对数似然率将由模型不正确的样本决定。同样,即使模型确实是不正确的,这会导致softmax饱和,但损失函数不会饱和。z_j近似线性,这意味着我们具有大致恒定的梯度。这样可以使模型快速进行校正。注意,例如,均方误差不是这种情况。
如果softmax在您看来仍然是一个任意选择,那么您可以看看在逻辑回归中使用Sigmoid的理由:
softmax是针对类似证明的多类问题的S形概化。
我发现这里的解释很好:CS231n:用于视觉识别的卷积神经网络。
从表面上看,softmax算法似乎是一种简单的非线性归一化(我们正在以指数形式扩展数据)。但是,还有更多。
具体来说,有几个不同的视图(与上述相同的链接):
信息论-从信息论的角度来看,softmax函数可以看作是试图最小化预测和真实之间的交叉熵。
概率视图-从这个角度来看,我们实际上是在查看对数概率,因此,当我们执行幂运算时,最终会得到原始概率。在这种情况下,softmax方程找到MLE(最大似然估计)
总而言之,即使softmax方程看起来可能是任意的,也不是。实际上,这是对分类进行归一化的一种原则性方法,可最大程度地减少预测与真实之间的交叉熵/负可能性。
我们正在研究一个多类分类问题。即,预测的可变y
可采取的一个k
类别,在那里k > 2
。在概率论中,这通常通过多项式分布来建模。多项式分布是指数族分布的成员。我们可以P(k=?|x)
使用指数族分布的属性来重建概率,该概率与softmax公式一致。
如果您认为问题可以用多项分布以外的其他分布建模,那么您可以得出与softmax不同的结论。
有关更多信息和正式推导,请参阅CS229讲义(9.3 Softmax回归)。
此外,通常对softmax有用的技巧是:softmax(x)= softmax(x + c),softmax对于输入中的恒定偏移量是不变的。
softmax
不是激活功能。激活函数是逐个元素的操作-给张量逐个元素执行非线性操作以生成另一个张量。但是softmax
是向量运算,它会产生一个标准化向量,每个元素之间都有内在的依赖关系。
我认为原因之一可能是处理负数并除以零,因为exp(x)始终为正且大于零。
例如,a = [-2, -1, 1, 2]
总和为0,我们可以使用softmax避免被零除。
[0, 1, 3, 4]
分裂。
softmax函数的选择似乎有些随意,因为还有许多其他可能的标准化函数。因此,目前尚不清楚为什么log-softmax损失会比其他损失替代方法表现更好。
摘自“ 关于球形损失族的Softmax替代方案的探索 ” https://arxiv.org/abs/1511.05042
作者探索了其他功能,其中包括Taylor的泰勒展开exp
和所谓的球形softmax,并发现有时它们的性能可能比平时更好softmax
。