softmax 分类器

softmax 分类器没有时间总结,先记下来。(1)CS231n课程笔记翻译:线性分类笔记(下)https://zhuanlan.zhihu.com/p/21102293?refer=intelligentunit(2)cs231n-assignment1-SVM/Softmax/two-layer-nets梯度求解https://blog.csdn.net/pjia_1008/article/deta…

1.从两个角度理解

(1)信息论中交叉熵

H ( p , q ) = − ∑ x p ( x ) l o g ( q ( x ) ) = H ( p ) + D K L ( p ∣ ∣ q ) H(p,q)=-\sum_xp(x)log(q(x))=H(p)+D_{KL}(p||q) H(p,q)=xp(x)log(q(x))=H(p)+DKL(pq)
p是指真实的分布,q是估计的分布。式中 H ( p ) H(p) H(p)是真实分布的熵,当给定分布,熵就确定; D K L ( p ∣ ∣ q ) D_{KL}(p||q) DKL(pq)是相对熵。
softmax分类器就是要最小化估计分类概率和真实分布之间的交叉熵。
交叉熵用于评估两个分布的相似度。

(2)概率的角度

softmax函数 P ( y i ∣ x i , w ) = e f y i ∑ j e f j P(y_i|x_i,w)=\frac{e^{f_{y_i}}}{\sum_je^{f_j}} P(yixi,w)=jefjefyi
给定输入 x i {x_i} xi和参数w,分配给正确分类标签的归一化概率。

2. softmax在实际应用中的问题

softmax函数中分子和分母都做指数运算,当数值很大的时候,会出现指数爆炸等问题。
常用的处理方法是分子分母同时乘以一个常数C,
e f y i ∑ j e f j = C e f y i C ∑ j e f j = e f y i + l o g C ∑ j e f j + l o g C \frac{e^{f_{y_i}}}{\sum_je^{f_j}}=\frac{Ce^{f_{y_i}}}{C\sum_je^{f_j}} = \frac{e^{f_{y_i}+logC}}{\sum_je^{f_j+logC}} jefjefyi=CjefjCefyi=jefj+logCefyi+logC
C通常取值为 − m a x ( f j ) -max(f_j) max(fj),使最大的值为0.

# python实现
 f -= np.max(f)
 p = np.exp(f)/np.sum(np.exp(f))

3. 一个简单的示例

pic1

这里需要强调的是:最后的输出直接由权重上一层的输出+偏置求得,并没有经过sigmoid函数,所以上图输出结果是 [ − 2.85 , 0.86 , 0.28 ] [-2.85,0.86,0.28] [2.85,0.86,0.28]
(1) 先求 e f j e^{f_j} efj,
[ e − 0.285 , e 0.86 , e 0.28 ] = [ 0.058 , 2.36 , 1.32 ] [e^{-0.285},e^{0.86},e^{0.28}] = [0.058, 2.36, 1.32] [e0.285,e0.86,e0.28]=[0.058,2.36,1.32]
(2) 求 ∑ j e f j \sum_je^{f_j} jefj
e − 0.285 + e 0.86 + e 0.28 = 0.058 + 2.36 + 1.32 = 3.738 e^{-0.285}+e^{0.86}+e^{0.28} = 0.058+2.36+1.32=3.738 e0.285+e0.86+e0.28=0.058+2.36+1.32=3.738
(3) 求输出概率
P ( y 1 ∣ x 1 , w ) = e f y 1 ∑ j e f j = 0.058 3.738 = 0.016 P(y_1|x_1,w)=\frac{e^{f_{y_1}}}{\sum_je^{f_j}}=\frac{0.058}{3.738}=0.016 P(y1x1,w)=jefjefy1=3.7380.058=0.016
P ( y 2 ∣ x 1 , w ) = e f y 2 ∑ j e f j = 2.36 3.738 = 0.631 P(y_2|x_1,w)=\frac{e^{f_{y_2}}}{\sum_je^{f_j}}=\frac{2.36}{3.738}=0.631 P(y2x1,w)=jefjefy2=3.7382.36=0.631
P ( y 3 ∣ x 1 , w ) = e f y 3 ∑ j e f j = 1.32 3.738 = 0.0353 P(y_3|x_1,w)=\frac{e^{f_{y_3}}}{\sum_je^{f_j}}=\frac{1.32}{3.738}=0.0353 P(y3x1,w)=jefjefy3=3.7381.32=0.0353

给一个类别的打分为 [ 1 , − 2 , 0 ] [1,-2,0] [1,2,0],softmax通过上述的计算,得到概率输出 [ 0.7 , 0.04 , 0.26 ] [0.7,0.04,0.26] [0.7,0.04,0.26]
进一步考虑正则项的影响,假设惩罚使得得分的输出变为原来的 1 2 \frac{1}{2} 21,即 [ 1 , − 2 , 0 ] [1,-2,0] [1,2,0]=> [ 0.5 , − 1 , 0 ] [0.5,-1,0] [0.5,1,0]时,最终得到的输出为 [ 0.55 , 0.12 , 0.33 ] [0.55,0.12,0.33] [0.55,0.12,0.33]
softmax分类器会使正确的分类获得更大的概率,使错误的分类得到更小的概率。

(1)CS231n课程笔记翻译:线性分类笔记(下)
https://zhuanlan.zhihu.com/p/21102293?refer=intelligentunit
(2)cs231n-assignment1-SVM/Softmax/two-layer-nets梯度求解
https://blog.csdn.net/pjia_1008/article/details/66972060
(3)CS231n课程学习笔记(三)——Softmax分类器的实现
https://blog.csdn.net/stalbo/article/details/79379078
(4)斯坦福大学深度学习公开课cs231n学习笔记(9)softmax分类和神经网络分类代码实现
https://blog.csdn.net/piaoxuezhong/article/details/78818572

今天的文章softmax 分类器分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/6199.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注