mafei863分享 http://blog.sciencenet.cn/u/mafei863 道法自然,道即合理

博文

[转载]hardmax和softmax的区分和优缺点

已有 1519 次阅读 2021-4-7 22:20 |个人分类:点滴记录|系统分类:科研笔记|文章来源:转载

https://www.pianshen.com/article/3582306846/


Softmax是soft(软化)的max。在CNN的分类问题中,我们的ground truth是one-hot形式,下面以四分类为例,理想输出应该是(1,0,0,0),或者说(100%,0%,0%,0%),这就是我们想让CNN学到的终极目标。

网络输出的幅值千差万别,输出最大的那一路对应的就是我们需要的分类结果。通常用百分比形式计算分类置信度,最简单的方式就是计算输出占比,假设输出特征是 (x_{1}, x_{2}, x_{3}, x_{4}),这种最直接最最普通的方式,相对于soft的max,在这里我们把它叫做hard的max

而现在通用的是soft的max,将每个输出x非线性放大到exp(x),形式如下:

hard的max和soft的max到底有什么区别呢?看几个例子

相同输出特征情况,soft max比hard max更容易达到终极目标one-hot形式,或者说,softmax降低了训练难度,使得多分类问题更容易收敛。

到底想说什么呢?Softmax鼓励真实目标类别输出比其他类别要大,但并不要求大很多。对于人脸识别的特征映射(feature embedding)来说,Softmax鼓励不同类别的特征分开,但并不鼓励特征分离很多,如上表(5,1,1,1)时loss就已经很小了,此时CNN接近收敛梯度不再下降。

1.计算与标注样本的差距

    在神经网络的计算当中,我们经常需要计算按照神经网络的正向传播计算的分数S1,和按照正确标注计算的分数S2,之间的差距,计算Loss,才能应用反向传播。Loss定义为交叉熵


    L_i=-log(\frac{e^{f_{y_i}}}{\sum_j{e^j}})

    取log里面的值就是这组数据正确分类的Softmax值,它占的比重越大,这个样本的Loss也就越小,这种定义符合我们的要求

2.计算上非常非常的方便

    当我们对分类的Loss进行改进的时候,我们要通过梯度下降,每次优化一个step大小的梯度

    我们定义选到yi的概率是

     P_{y_i}=\frac{e^{f_{y_i}}}{\sum_j{e^j}}

    然后我们求Loss对每个权重矩阵的偏导,应用链式法则

     \frac{\partial{L_i}}{\partial{f_{y_i}}}=\frac{\partial(-\ln(\frac{e^{f_{y_{i}}}}{\sum_{j}e^{​{j}}}))}{\partial{f_{y_i}}}=P_{f_{y_i}}-1

    最后结果的形式非常的简单,只要将算出来的概率的向量对应的真正结果的那一维减1,就可以了

    举个例子,通过若干层的计算,最后得到的某个训练样本的向量的分数是[ 1, 5, 3 ], 那么概率分别就是[0.015,0.866,0.117],如果这个样本正确的分类是第二个的话,那么计算出来的偏导就是[0.015,0.866−1,0.117]=[0.015,−0.134,0.117]然后再根据这个进行back propagation就可以了

image.png



https://blog.sciencenet.cn/blog-538909-1280824.html

上一篇:[转载]安装anaconda和pytorch版本注意事项
下一篇:[转载]交叉熵分类的标签类型必须换成long

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2021-12-7 02:46

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部