Softmax classifier

2024-09-04 06:32
文章标签 softmax classifier

本文主要是介绍Softmax classifier,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Softmax classifier原文链接

SVM是两个常见的分类器之一。另一个比较常见的是Softmax分类器,它具有不同的损失函数。如果你听说过二分类的Logistic回归分类器,那么Softmax分类器就是将其推广到多个类。不同于SVM将  f(xi,W)  的输出结果 (为校准,可能难以解释)作为每个分类的评判标准,Softmax分类器给出了一个稍直观的输出(归一化的类概率),并且也有一个概率解释,我们将在后面介绍。在Softmax分类器中,映射函数f(xi; W)= Wxi保持不变,但是我们现在将这些得分解释为每个类的非归一化对数概率,并用具有以下形式的交叉熵损失代替hinge loss:



L                             i=log(efyijefj)             等价于          Li=fyi+logjefj

我们使用符号fj来表示向量f的第j个元素的分类得分。如前所述,数据集的全部损失是所有训练样例中的Li的平均值加正则化项R(W)。
 函数  fj(z)=ezjkezk     就是损失函数:它需要一个任意实值分数(在z中)的向量 ,并将其压缩到0和1之间的值,向量和为1。 

如果你是第一次看到它softmax函数的完整的交叉熵损失可能看起来很恐怖,但相对容易激发。 

信息理论观。 “真实”分布p与估计分布q之间的交叉熵定义为:         
H(p,q)=xp(x)logq(x
 
因此,Softmax分类器将 预估的分类概率(q = efyi /Σjefj如上所述)和“真实”分布之间的交叉熵最小化,
也就是说,所有概率项在正确类上的分布(即,p = [0,... 1,...,0]在第y位置包含单个1。此外,由于交叉熵可以用
熵和Kullback-Leibler发散来表示为:H(p,q)=H(p)+DKL(p||q) 
并且Δ函数p的熵为零,这也相当于使两个分布之间的KL发散最小化(距离的度量)。
换句话说,交叉熵目标希望预测的所有块,在正确答案中均可以找到。

概率解释。 看着这个表达式,我们看到了:
(yixi;W)=efyijefj
 
可以解释为给定图像xi并由参数化的W的正确标签yi的(归一化)概率。
要看到这一点,请记住,Softmax分类器将输出向量f内的分数 解释为非归一化取对数后的概率。
指定这些数量,给出(非归一化)概率,并且分割执行归一化,使得概率总和为1。
在概率解释中,我们因此将负对数最小化作为正确分类的似然函数,这可以解释为执行最大似然估计(MLE)。
这个观点的一个很好的特点是,现在我们现在也可以将全损失函数中的正则化项R(W)解释为来自
加权矩阵W之前的高斯,其中代替MLE,我们执行最大后验(MAP) )估计。
我们提到这些解释来帮助你的直观的了解,但这个推导的全部细节超出了本部分的范围。

实际问题:数值稳定。在实践中,由于指数,中间项efyi和Σjefj可能非常大。
分割大数可能在数值上不稳定,所以使用规范化技巧很重要。
请注意,如果我们将分数的顶部和底部乘以常数C并将其变换为指数累加,
我们得到以下(数学上等效的)表达式:


efyijefj=CefyiCjefj=efyi+logCjefj+logC  

       
我们可以自由选择C.这不会改变任何结果,但是我们可以使用这个值来提高计算的数值稳定性。
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
可能混淆命名约定。确切地说,SVM分类器使用hinge损失,有时也称为最大损耗。
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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135256

相关文章

word2vec 两个模型,两个加速方法 负采样加速Skip-gram模型 层序Softmax加速CBOW模型 item2vec 双塔模型 (DSSM双塔模型)

推荐领域(DSSM双塔模型): https://www.cnblogs.com/wilson0068/p/12881258.html   word2vec  word2vec笔记和实现 理解 Word2Vec 之 Skip-Gram 模型 上面这两个链接能让你彻底明白word2vec,不要搞什么公式,看完也是不知所云,也没说到本质. 目前用的比较多的都是Skip-gram模型 Go

特征选择错误:The classifier does not expose coef_ or feature_importances_ attributes

在利用RFE进行特征筛选的时候出现问题,源代码如下: from sklearn.svm import SVRmodel_SVR = SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma='auto',kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verb

keras 将softmax值转成onehot 最大值赋值1 其他赋值0

注意: 当使用 categorical_crossentropy 损失时,你的目标值应该是分类格式 (即,如果你有 10 个类,每个样本的目标值应该是一个 10 维的向量,这个向量除了表示类别的那个索引为 1,其他均为 0)。 为了将 整数目标值 转换为 分类目标值,你可以使用 Keras 实用函数 to_categorical: from keras.utils.np_utils import

softmax解释

sigmoid函数只能分两类,而softmax能分多类,softmax是sigmoid的扩展 以下是Softmax函数的定义: 这个函数与hard max(即大家通常用的max函数)有相似之处,在其中某个x显著大于其他x时,返回值接近这个x,即max 下图为softmax(x, 0)和hardmax(x,0)的图形: 差别就在于softmax是连续可导的,消除了拐点,这个特

①softmax回归MNIST手写数字识别

Softmax在机器学习中有着非常广泛的应用,他计算简单而且效果显著。 假设有两个数a和b,且a>b > c 如果取max,结果是a 如果取softmax,则softmax(a) > softmax(b) > softmax(c),softmax把所有的选项都给出概率。 MNIST手写数字识别是一个使用softmax回归(softmax regression)模型

Spark MLlib模型训练—分类算法 Decision tree classifier

Spark MLlib模型训练—分类算法 Decision tree classifier 决策树(Decision Tree)是一种经典的机器学习算法,广泛应用于分类和回归问题。决策树模型通过一系列的决策节点将数据划分成不同的类别,从而形成一棵树结构。每个节点表示一个特征的分裂,叶子节点代表最终的类别标签。 在大数据场景下,Spark MLlib 提供了对决策树的高效实现,能够处理大规模数据

maven使用install打包时,程序包xxx不存在,pom中添加classifier分类标签解决

1.程序可以正常运行,但是打包时报错如下:** ** 2.解决办法:在引入的工程打包时pom中的打包插件修改如下: <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><executions><execution><goals><g

【Caffe】softmax和softmaxwithloss层的理解

softmax_axis_表示在那边切,当为1是,out_num_就表示batchsize,sum_multiplier表示通道数,scale相关的一般表示临时变量的存储,dim=C*W*H,spatial_dim=W*H,inner_num_如果fc层就为1,conv层就为H*W。 本文所举得例子是在mnist的基础上解说的,batchsize为128,类别为10。 首先看softmax求导

TensorFlow实现Softmax回归

原理 模型 相比线性回归,Softmax只多一个分类的操作,即预测结果由连续值变为离散值,为了实现这样的结果,我们可以使最后一层具有多个神经元,而输入不变,其结构如图所示: 为了实现分类,我们使用一个Softmax操作,Softmax函数能够将未规范化的预测变换为非负数并且总和为1,同时让模型保持可导的性质。 为了完成这一目标,我们首先对每个未规范化的预测求幂,这样可以确保输出非负。 为

Softmax与SoftmaxWithLoss原理及代码详解

一直对softmax的反向传播的caffe代码看不懂,最近在朱神的数学理论支撑下给我详解了它的数学公式,才豁然开朗 SoftmaxWithLoss的由来 SoftmaxWithLoss也被称为交叉熵loss。 回忆一下交叉熵的公式, H(p,q)=−∑jpjlogqj H ( p , q ) = − ∑ j p j log ⁡ q j H(p, q) = -\sum_j p_j\lo