本文主要是介绍Softmax classifier,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Softmax classifier原文链接
SVM是两个常见的分类器之一。另一个比较常见的是Softmax分类器,它具有不同的损失函数。如果你听说过二分类的Logistic回归分类器,那么Softmax分类器就是将其推广到多个类。不同于SVM将 f(xi,W) 的输出结果 (为校准,可能难以解释)作为每个分类的评判标准,Softmax分类器给出了一个稍直观的输出(归一化的类概率),并且也有一个概率解释,我们将在后面介绍。在Softmax分类器中,映射函数f(xi; W)= Wxi保持不变,但是我们现在将这些得分解释为每个类的非归一化对数概率,并用具有以下形式的交叉熵损失代替hinge loss:
L i=−log(efyi∑jefj) 等价于 Li=−fyi+log∑jefj
并且Δ函数p的熵为零,这也相当于使两个分布之间的KL发散最小化(距离的度量)。
概率解释。 看着这个表达式,我们看到了:(yi∣xi;W)=efyi∑jefj
加权矩阵W之前的高斯,其中代替MLE,我们执行最大后验(MAP) )估计。
我们提到这些解释来帮助你的直观的了解,但这个推导的全部细节超出了本部分的范围。
实际问题:数值稳定。在实践中,由于指数,中间项efyi和Σjefj可能非常大。
分割大数可能在数值上不稳定,所以使用规范化技巧很重要。
请注意,如果我们将分数的顶部和底部乘以常数C并将其变换为指数累加,
我们得到以下(数学上等效的)表达式:
efyi∑jefj=CefyiC∑jefj=efyi+logC∑jefj+logC
C的常见选择是设置 logC=−maxjfj .这里需要指出,我们应该将向量f内的值移位,使得最高值为零。
代码如下:
f = np.array([123, 456, 789]) # example with 3 classes and each having large scores
p = np.exp(f) / np.sum(np.exp(f)) # Bad: Numeric problem, potential blowup# instead: first shift the values of f so that the highest number is 0:
f -= np.max(f) # f becomes [-666, -333, 0]
p = np.exp(f) / np.sum(np.exp(f)) # safe to do, gives the correct answer
Softmax分类器从softmax函数获取其名称,该函数用于将原始分数压缩为归一化的正值,总和为1,从而可以应用交叉熵损失。
特别要注意的是,从技术上来说,谈论“softmax损失”是没有意义的,因为softmax只是挤压功能,但它是一个比较常用的速记。
交叉熵代价函数(cross-entropy cost function)
下面的公式对应一个神经元,多输入单输出:
sorry,翻译完,自己也看不懂了!能力有限。就说说自己的理解吧!
softmax是一个分类器,计算的是某个类别的概率。是logistic regression的一种推广,logistic regression只能用于二分类,而softmax可以用于多分类。
在用caffe做深度学习的时候,用户的最终目的可能就是得到各个类别的概率的 似然值,这时候就需要一个softmax层,而不一定要进行softmax-loss操作,
或者用户通过其他方式已经得到了某个概率的似然值,然后要做 最大似然估计,此时只需要做softmax-loss,而不需要前面的softmax操作。
这篇关于Softmax classifier的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!