瞎搞系列-重读softmax
softmax 在机器学习与深度学习中有着比较广泛的作用,尤其它在处理多分类任务的时候,分类器单元需要通过softmax函数进行数值处理。对于softmax的函数定义如下所示:
其中,vi是分类器前级输出单元的输出,i表示类别索引,总得类别个数为C。Si表示当前元素的指数与所有元素指数和的比值。softmax将多分类的输出数值转化为相对概率,比较容易了解和比较。
一个多分类的问题,C=4.线性分类模型最后输出层包含了四个值,分别是:
经过softmax处理后的相对概率为:
比较明显的是,softmax的输出表征了不同类别之间的相对概率,可以清晰的看到有些概率比较大。softmax将连续值转化为相对概率,更加有利于我们理解。在实际应用中,softmax需要注意数值溢出,所以对V进行数值处理:V中的每个元素减去V中的最大值。
softmax代码:
scores = np.array([123, 456, 789]) # example with 3 classes and each having large scores
scores -= np.max(scores) # scores becomes [-666, -333, 0]
p = np.exp(scores) / np.sum(np.exp(scores))
2,softmax损失函数
线性分类器的输出是输入x与权重系统的矩阵相乘:s=wx.其中,下标i表示i样本。求导过程的程序设计分为两种:for循环,另一种直接矩阵计算。
实际上,矩阵运算比嵌套循环要快很多,特别是在训练样本数目很多的情况下。
所以在用机器学习算法模型的时候,尽量使用矩阵运算,少用嵌套循环,以提高运算速度。
3,softmax与SVM
softmax线性回归损失函数计算相对概率,叫做交叉熵。SVM的损失函数为hinge loss, 比较关注分类样本和错误样本之间的距离,只要距离大于deta,不需要在乎距离相差多少。而softmax中每个类别的得分函数都会影响到损失函数的大小。
对于正则化来说,正则化参数越大,对权重限制也就越大,正则化参数越大,softmax各类输出越接近。
4,softmax实际应用
转自:点击打开链接