softmax,softmax loss和交叉熵的关系

交叉熵

对于分类问题的交叉熵损失函数:
L = 1 n ∑ i = 1 n ( − ∑ j = 1 C y i , j log ⁡ p i , j ) L=\frac{1}{n}\sum^{n}_{i=1}(-\sum^{C}_{j=1}y_{i,j}\log p_{i,j}) L=n1i=1n(j=1Cyi,jlogpi,j)
n为batchSize的大小,C为分类问题中类的数目, y i , j y_{i,j} yi,j为第 i 个样本在第 j 类上的真实标签, p i , j p_{i,j} pi,j为第i个样本对第j类的预测概率

举个例子:
假设是三分类(cat, dog, pig)问题:一共有两个样本x1,x2,分布对应的真实类别为y1=dog,y2=cat. y用one-hot方式表示,即 y 1 y_{1} y1=[ y 1 , 1 , y 1 , 2 , y 1 , 3 y_{1,1}, y_{1,2}, y_{1,3} y1,1,y1,2,y1,3]=[0,1,0], y 2 y_{2} y2=[ y 2 , 1 , y 2 , 2 , y 2 , 3 y_{2,1}, y_{2,2}, y_{2,3} y2,1,y2,2,y2,3]=[1,0,0]

p 1 = ( p 1 , 1 , p 1 , 2 , p 1 , 3 ) = [ 0.1 , 0.8 , 0.1 ] p_{1}=(p_{1,1}, p_{1,2}, p_{1,3})=[0.1, 0.8, 0.1] p1=(p1,1,p1,2,p1,3)=[0.1,0.8,0.1]
p 2 = ( p 2 , 1 , p 2 , 2 , p 2 , 3 ) = [ 0.7 , 0.2 , 0.1 ] p_{2}=(p_{2,1}, p_{2,2}, p_{2,3})=[0.7, 0.2, 0.1] p2=(p2,1,p2,2,p2,3)=[0.7,0.2,0.1]

则交叉熵为:
L = 1 2 ( − 1 ∗ l o g 0.8 − 1 ∗ l o g 0.7 ) L=\frac{1}{2}(-1*log0.8 - 1*log0.7) L=21(1log0.81log0.7)
这里可以看到实际上只有当前样本对应的类计算出来是有值的,因为其他地方都是0。所以,公式可以简化为:

L = 1 n ∑ i = 1 n ( − log ⁡ p i , Y i ) L=\frac{1}{n}\sum^{n}_{i=1}(-\log p_{i,Y_{i}}) L=n1i=1n(logpi,Yi)

Y i Y_{i} Yi 用来指示第 i 个样本所属的类别,比如例子中的 Y 1 Y_{1} Y1=2, Y 2 Y_{2} Y2=1
p i , Y i p_{i,Y_{i}} pi,Yi表示第 i 个样本在其所属类别上的预测概率

那么交叉熵和softmax function有什么关系呢? 神经网络的输出通常称为 logit(logit是模型的raw outputs, 还没有通过softmax layer. 也就是softmax layer的输入就是logit.) , 也就是全连接层输出的结果,其范围是不确定的, ∈ ( − ∞ , + ∞ ) \in (-\infty,+\infty) (,+),而softmax可以将这样的输出转为(0,1)之间,所以将 logit 用softmax转换为概率值就可以用来计算交叉熵

Softmax函数:

p i , j = e l i , j ∑ k = 1 C e l i , k p_{i,j} = \frac{e^{l_{i,j}}}{\sum_{k=1}^{C}e^{l_{i,k}}} pi,j=k=1Celi,keli,j

p i , j p_{i,j} pi,j为第 i 个样本属于第j类的预测概率, l i , j {l_{i,j}} li,j为神经网络对第 i 个样本在第 j 类的输出 logit, C为类的数目

logit是模型的raw outputs, 还没有通过softmax layer. 也就是softmax layer的输入就是logit.

softmax loss:

L = 1 n ∑ i = 1 n ( − log ⁡ p i , Y i ) = 1 n ∑ i = 1 n ( − log ⁡ e l i , j ∑ k = 1 C e l i , k ) L=\frac{1}{n}\sum^{n}_{i=1}(-\log p_{i,Y_{i}})=\frac{1}{n}\sum^{n}_{i=1}(-\log \frac{e^{l_{i,j}}}{\sum_{k=1}^{C}e^{l_{i,k}}}) L=n1i=1n(logpi,Yi)=n1i=1n(logk=1Celi,keli,j)

参考博客,讲的超好!!!
为什么softx要用指数函数
最大熵模型

你可能感兴趣的:(深度学习,python)