交叉熵损失函数的应用和理论
在深度学习中用到了交叉熵损失函数,通过最小化损失函数可以优化模型。那么什么是交叉熵损失函数呢?我们又是怎样运用交叉熵损失函数的最小化来实现模型的优化的呢?
一、交叉熵损失函数的定义:
l o s s = 1 n ∑ i = 1 n H ( y ( i ) , y ^ ( i ) ) loss=\frac{1}{n}\sum_{i=1}^nH(y^{(i)},\hat{y}^{(i)}) loss=n1∑i=1nH(y(i),y^(i))
其中 y ( i ) y^{(i)} y(i)是给定的,而 y ^ ( i ) \hat{y}^{(i)} y^(i)是通过模型算出来的,又
H ( y ( i ) , y ^ ( i ) ) = − ∑ j = 1 q y j ( i ) l o g y j ^ ( i ) H(y^{(i)},\hat{y}^{(i)})=-\sum_{j=1}^qy_j^{(i)}log\hat{y_j}^{(i)} H(y(i),y^(i))=−∑j=1qyj(i)logyj^(i)
故:
l o s s = − 1 n ∑ i = 1 n ∑ j = 1 q y j ( i ) l o g y j ^ ( i ) loss=-\frac{1}{n}\sum_{i=1}^n\sum_{j=1}^qy_j^{(i)}log\hat{y_j}^{(i)} loss=−n1∑i=1n∑j=1qyj(i)logyj^(i)
这个式子中
n
n
n代表有
n
n
n个样本,
q
q
q代表有
q
q
q个分类类别
为了便于理解,下面举个例子:
sample1:
类别 | 猫 | 狗 | 猪 |
---|---|---|---|
Label | 1 | 0 | 0 |
Pred | 0.3 | 0.5 | 0.2 |
sample2:
类别 | 猫 | 狗 | 猪 |
---|---|---|---|
Label | 0 | 1 | 0 |
Pred | 0.1 | 0.8 | 0.1 |
这个例子中样本数
n
=
2
n=2
n=2,类别数
q
=
3
q=3
q=3,开始计算他的损失函数:
首先:
H ( y ( 1 ) , y ^ ( 1 ) ) = y 1 ( 1 ) l o g y 1 ^ ( 1 ) + y 2 ( 1 ) l o g y 2 ^ ( 1 ) + y 3 ( 1 ) l o g y 3 ^ ( 1 ) = 1 × l o g 0.3 + 0 × l o g 0.5 + 0 × l o g 0.2 = − 0.523 H(y^{(1)},\hat{y}^{(1)})=y_1^{(1)}log\hat{y_1}^{(1)}+y_2^{(1)}log\hat{y_2}^{(1)}+y_3^{(1)}log\hat{y_3}^{(1)}=1\times{log0.3}+0\times{log0.5}+0\times{log0.2}=-0.523 H(y(1),y^(1))=y1(1)logy1^(1)+y2(1)logy2^(1)+y3(1)logy3^(1)=1×log0.3+0×log0.5+0×log0.2=−0.523
H ( y ( 2 ) , y ^ ( 2 ) ) = y 1 ( 2 ) l o g y 1 ^ ( 2 ) + y 2 ( 2 ) l o g y 2 ^ ( 2 ) + y 3 ( 2 ) l o g y 3 ^ ( 2 ) = 0 × l o g 0.1 + 1 × l o g 0.8 + 0 × l o g 0.1 = − 0.097 H(y^{(2)},\hat{y}^{(2)})=y_1^{(2)}log\hat{y_1}^{(2)}+y_2^{(2)}log\hat{y_2}^{(2)}+y_3^{(2)}log\hat{y_3}^{(2)}=0\times{log0.1}+1\times{log0.8}+0\times{log0.1}=-0.097 H(y(2),y^(2))=y1(2)logy1^(2)+y2(2)logy2^(2)+y3(2)logy3^(2)=0×log0.1+1×log0.8+0×log0.1=−0.097
l o s s = − 1 2 [ H ( y ( 1 ) , y ^ ( 1 ) ) + H ( y ( 2 ) , y ^ ( 2 ) ) ] = 0.310 loss=-\frac{1}{2}[H(y^{(1)},\hat{y}^{(1)})+H(y^{(2)},\hat{y}^{(2)})]=0.310 loss=−21[H(y(1),y^(1))+H(y(2),y^(2))]=0.310
可以看到,当我们进行预测时,第一个样本实际上为猫,但是算法预测为猫的可能性只有0.3,这说明预测正确的概率比较小,所以算出来的 H ( y ( 1 ) , y ^ ( 1 ) ) H(y^{(1)},\hat{y}^{(1)}) H(y(1),y^(1))的绝对值偏大一些,而第二个样本实际上为狗,且预测为狗的概率是0.8,这说明预测正确的概率比较大,所以算出来的 H ( y ( 2 ) , y ^ ( 2 ) ) H(y^{(2)},\hat{y}^{(2)}) H(y(2),y^(2))的绝对值偏小一些。反映在 l o s s loss loss函数上如果预测正确的可能性比较大的话 l o s s loss loss函数就会笑一些,所以通过最小化 l o s s loss loss函数就可以优化模型。
二、交叉熵的由来
交叉熵最早是在信息论中提出的,想要了解交叉熵需要一点一点来
1、信息量
信息量实际上就是不确定性,如果一个消息的不确定性越大,它的信息量就越多,反之如果一个消息是确定的,那么它的信息量就是零。
比如掷一个骰子,信息A为掷得1点,信息B为掷得的点数大于1,可以知道信息A出现的概率为
P
(
A
)
=
c
1
6
P(A)=c\frac{1}{6}
P(A)=c61,而信息B出现的概率为
P
(
B
)
=
5
6
P(B)=\frac{5}{6}
P(B)=65,代入信息量的计算公式:
I
(
x
)
=
−
l
o
g
P
(
x
)
I(x)=-logP(x)
I(x)=−logP(x)得:
I
(
A
)
=
−
l
o
g
P
(
A
)
=
−
l
o
g
1
6
I(A)=-logP(A)=-log\frac{1}{6}
I(A)=−logP(A)=−log61
I
(
B
)
=
−
l
o
g
P
(
B
)
=
−
l
o
g
5
6
I(B)=-logP(B)=-log\frac{5}{6}
I(B)=−logP(B)=−log65
可以知道
I
(
A
)
>
I
(
B
)
I(A)>I(B)
I(A)>I(B),即信息A的信息量更大一些。
2、信息熵
信息熵就是信息量的期望,即
H ( X ) = − ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) H(X)=-\sum_{i=1}^np(x_i)log(p(x_i)) H(X)=−∑i=1np(xi)log(p(xi))
沿用上面掷骰子的例子,有
H ( X ) = − P ( A ) l o g P ( A ) − P ( B ) l o g P ( B ) = − 1 6 l o g 1 6 − 5 6 l o g 5 6 H(X)=-P(A)logP(A)-P(B)logP(B)=-\frac{1}{6}log\frac{1}{6}-\frac{5}{6}log\frac{5}{6} H(X)=−P(A)logP(A)−P(B)logP(B)=−61log61−65log65
3、相对熵(KL散度)
公式:
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{KL}(p||q)=\sum_{i=1}^np(x_i)log(\frac{p(x_i)}{q(x_i)}) DKL(p∣∣q)=∑i=1np(xi)log(q(xi)p(xi))
其中
p
(
x
i
)
p(x_i)
p(xi)表示真实分布,而
q
(
x
i
)
q(x_i)
q(xi)表示理论分布,相对熵的就表示使用理论分布来拟合真实分布时产生的信息损耗。
将公式展开会更直观一点:
D K L ( p ∣ ∣ q ) = − ∑ i = 1 n p ( x i ) l o g q ( x i ) − ( − ∑ i = 1 n p ( x i ) l o g p ( x i ) ) D_{KL}(p||q)=-\sum_{i=1}^np(x_i)logq(x_i)-(-\sum_{i=1}^np(x_i)logp(x_i)) DKL(p∣∣q)=−∑i=1np(xi)logq(xi)−(−∑i=1np(xi)logp(xi))
即理论分布拟合真实分布的信息熵减去真实分布拟合真实分布的信息熵,这里会产生一个熵增,也就是说用理论分布拟合真实分布会使不确定性增大。理论分布越接近真实分布,不确定性越小。
4、交叉熵
由相对熵的定义可知当理论分布越接近真实分布时相对熵越小,而我们优化模型的目的就是使理论无限接近于真实,所以最小化相对熵便可以实现这个目的。又因为相对熵公式展开之后的第二项就是 p p p的信息熵,这是真实情况下的,即为已知的,所以第二项是一个常数。想要最小化相对熵只需要最小化第一项即可,此时定义第一项为交叉熵:
H ( p ∣ q ) = − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) H(p|q)=-\sum_{i=1}^np(x_i)log(q(x_i)) H(p∣q)=−∑i=1np(xi)log(q(xi))
到这儿便解释了交叉熵的理论,并把其为什么能用在交叉损失函数中解释了一下。