softmax与交叉熵的关系
softmax第一步就是将模型的预测结果转化到指数函数上,这样保证了概率的非负性。
1)分子:通过指数函数,将实数输出映射到零到正无穷。
2)分母:将所有结果相加,进行归一化。
假设模型三分类问题:-3、1.5、2
y1 = exp(-3) = 0.05
y2 = exp(1.5) = 4.48
y3 = exp(2) = 7.39
分母使概率之和等于1
z1 = y1/(y1+y2+y3) = 0.05/(1.05+4.48+7.39)
z2 = y2/(y1+y2+y3) = 4.48/(1.05+4.48+7.39)
z3 = y3/(y1+y2+y3) = 7.39/(1.05+4.48+7.39)
import numpy as np
x=[-1,1.2,2,3]
y=np.exp(x)
sum=np.sum(y)
z=y/sum
交叉熵:交叉熵越小损失越小分类效果越好
交叉熵刻画的是预测输出与期望输出的距离,交叉熵的值越小,两个概率分布就越接近。
假设概率分布p为期望输出,概率分布q为实际输出,H(p,q)为交叉熵
p为标签,q为预测输出 p q同一个变量的两个不同的分布。
神经网络解决多分类中,最后一层输出N个节点,表示分类N种。如果一个输入的样本属于K类,则这个类对应的输出节点值为1,其它为0.这个样本的标签
. … p = [0,0,0,1,0,0]
而实际的输出的每个节点是神经网络的加权的出来的值,在经过一个softmax,得到一个预测输出 .
. . . .q = [0.1,0.1,0.1,0.5,0.1,0.1]
在通过交叉熵H(p,q) 来判定预测输出,与标签的接近程度===使用交叉熵来计算损失
计算方法一:
假设N=3,期望标签输出为p=(1,0,0),实际预测输出
q1=(0.5,0.2,0.3)
q2=(0.8,0.1,0.1)
q2与P的交叉熵小说明q2与标签越接近
计算方法二:
在实际训练中:输入的样本是一个batch,则输出的H(p,q)为多维的,对一个batch最后去平均 == 0.2