在机器学习和深度学习中,很多时候需要进行分类,这时会涉及到决策边界,比如sigmod激活函数;
但是当面对多分类的时候(比如经典的MNIST),我们需要预测每一个种类output的概率,比如softmax,这时候我们需要对:
信息论和交叉熵有一个清晰的认识
那么我们的文章将会对 信息论和交叉熵损失函数 进行一个讲解;
1.信息论
1.1 信息论是从物理学中借鉴过来的,我们只讲其数学意义:
其实信息论是一种用来描述 概率分布或者蒋概率分布之间的相似性 的一种思想
信息论的核心思想就是用来表示 意外程度 ,即小概率事件发生的信息量大
- 1.必然事件的信息量为0
- 2.事件发生的概率越小,其提供的信息量就越大
- 3.信息是具有增量的特征的,即同一事件,发生一次的信息量是
I
I
I ,则重复投递两次的信息量是
2
I
2I
2I
那么为了实现我们的目的 将概率事件的信息量进行量化
2.自信息
就是单个事件的信息量的量化值
我们构建这样一个公式:
I
(
x
)
=
−
l
o
g
(
p
(
x
)
)
I(x) = -log(p(x))
I(x)=−log(p(x))
- 这里 P ( x ) P(x) P(x)就是随机事件 X = x X = x X=x 时候事件发生的概率
-
l
o
g
对
数
函
数
式
增
函
数
,
那
么
−
l
o
g
函
数
就
是
减
函
数
log对数函数式增函数,那么-log函数就是减函数
log对数函数式增函数,那么−log函数就是减函数,这样构建出来的函数就实现了我们的某种目的,随着概率的减小,信息量就越大
但是自信息仅能预测一个事件的信息量 - I ( x ) I(x) I(x)的单位是奈特 n a t nat nat,就是说1 n a t nat nat代表以 1 / e 1/e 1/e概率的一个事件的自信息量
3.香农熵
往往在我们的实际应用中我们需要使用 香农熵 来对整个事件概率分布中的不确定性总量进行量化
在这里我们可以借鉴 随机变量X的数学期望的求值公式
E
(
X
)
=
−
∑
k
=
1
∞
x
k
p
k
E(X) =- \sum_{k = 1}^{∞}x_kp_k
E(X)=−k=1∑∞xkpk
这里的香农熵其实可以看做是: 信息量
I
(
x
)
I(x)
I(x)的数学期望的求值公式
H
(
X
)
=
−
∑
k
=
1
n
x
k
l
o
g
(
p
k
)
H(X) = -\sum_{k = 1}^{n}x_klog(p_k)
H(X)=−k=1∑nxklog(pk)
- 这里k是类别,n代表总类别
下面我们举例说明:
-
数组1: 111111
-
数组2: 111222
-
数组3: 112233
我们来算数组1 ,2 和 3的香农熵
H ( 1 ) = − 1 ∗ l o g ( p ( 1 ) ) = − 1 ∗ 0 = 0 H(1)=-1*log(p(1)) = -1 * 0= 0 H(1)=−1∗log(p(1))=−1∗0=0
H ( 2 ) = − 1 / 2 ∗ l o g ( p ( 1 ) ) + ( − 1 / 2 ∗ l o g ( p ( 2 ) ) = − 1 / 2 ∗ I n 1 / 2 + 1 / 2 ∗ I n 1 / 2 ≈ 0.7 H(2)=-1/2*log(p(1)) + (-1/2*log(p(2)) = -1/2 * In1/2 +1/2 * In1/2 ≈ 0.7 H(2)=−1/2∗log(p(1))+(−1/2∗log(p(2))=−1/2∗In1/2+1/2∗In1/2≈0.7
H ( 3 ) = ( − 1 / 3 ∗ l o g ( p ( 1 ) ) + ( − 1 / 3 ∗ l o g ( p ( 2 ) ) + ( − 1 / 3 ∗ l o g ( p ( 3 ) ) ≈ 1 H(3)=(-1/3*log(p(1)) + (-1/3*log(p(2)) + (-1/3*log(p(3)) ≈ 1 H(3)=(−1/3∗log(p(1))+(−1/3∗log(p(2))+(−1/3∗log(p(3))≈1
这样来看数组1的香农熵为0,则为必然事件,数组2居中,数组3最大,则其概率分布的概率最小
4.交叉熵
前面我们有讲到 自信息 和 香农熵
那么如何用到机器学习和深度学习中呢,不着急慢慢往下看
我们记得之前在多类别分类的模型中我们有用到
s
o
f
t
m
a
x
softmax
softmax 进行每个类别概率估计,然后取最大概率做为预测值
而当我们反向更新
s
o
f
t
m
a
x
softmax
softmax为激活函数的模型或者神经网络时候,是将交叉熵做为
l
o
s
s
函
数
loss函数
loss函数进行梯度调节的
那么让我们聚焦交叉熵
在这之前我们需要看下
K
L
KL
KL散列,这是基于香农熵用来衡量对于同一个随机变量X的两个单独分布
P
(
X
)
和
Q
(
X
)
P(X)和Q(X)
P(X)和Q(X)的差异的途径:
D
k
l
(
P
∣
∣
Q
)
=
E
x
−
p
[
l
o
g
(
P
(
x
)
/
Q
(
x
)
)
]
=
E
x
−
p
[
l
o
g
(
P
(
x
)
)
−
l
o
g
(
Q
(
x
)
)
]
D_{kl}(P||Q) = E_{x-p}[log(P(x)/Q(x))] = E_{x-p}[log(P(x))-log(Q(x))]
Dkl(P∣∣Q)=Ex−p[log(P(x)/Q(x))]=Ex−p[log(P(x))−log(Q(x))]
但是在深度学习中我们使用
K
L
KL
KL散列的变形,也就是交叉熵来作为某些场景的
l
o
s
s
loss
loss函数,即:
H
(
P
,
Q
)
=
H
(
P
)
+
D
K
L
(
P
∣
∣
Q
)
H(P,Q) = H(P) + D_{KL}(P||Q)
H(P,Q)=H(P)+DKL(P∣∣Q)
根据
K
L
KL
KL散列我们队上述公式进行变形:
H
(
P
,
Q
)
=
−
E
x
−
p
[
l
o
g
P
(
x
)
]
+
E
x
−
p
[
l
o
g
P
(
x
)
]
−
E
x
−
p
[
l
o
g
Q
(
x
)
]
H(P,Q) = -E_{x-p}[logP(x)] + E_{x-p}[logP(x)] - E_{x-p}[logQ(x)]
H(P,Q)=−Ex−p[logP(x)]+Ex−p[logP(x)]−Ex−p[logQ(x)]
经过变形就得到:
H
(
P
,
Q
)
=
−
E
x
−
p
[
l
o
g
Q
(
x
)
]
H(P,Q) = - E_{x-p}[logQ(x)]
H(P,Q)=−Ex−p[logQ(x)]
接着,我们变化成易于理解的
l
o
s
s
loss
loss函数
H
(
P
,
Q
)
=
−
∑
x
P
(
x
)
l
o
g
Q
(
x
)
H(P,Q) = -\sum_{x}P(x)logQ(x)
H(P,Q)=−x∑P(x)logQ(x)
到这里我们看到了我们熟悉的成本函数,
s
o
f
t
m
a
x
softmax
softmax回归分类器的成本函数
接着我们探讨为什么使用这个成本函数
主要是softmax等多分类器,在评估真实值( y y y)和预测值( y e x c p t y^{excpt} yexcpt)距离时,更多的是在评估概率之间的距离,这样使用传统的均方根误差做为 l o s s loss loss函数毫无意义
我们来举个例子(以MNIST为例: 识别0~9的数字图片):
假设输出层是
s
o
f
t
m
a
x
softmax
softmax为激活函数:
那么我们假设用两组标签相同的实例
A
和
B
A和B
A和B 来进行分析
首先我们的
l
a
b
e
l
label
label都是0,所以真实值得向量组合是(1,0,0,0,0,0,0,0,0,0)
- A的预测值向量组合(0.9,0.2,0.1,0,0,0,0,0,0,0)
- B的预测值向量组合(0.8,0,0.1,0,0.5,0,0,0,0,0)
接着算A和B的交叉熵(也就是
l
o
s
s
loss
loss函数) :
H
(
P
,
Q
)
=
−
(
1
∗
l
o
g
(
0.9
)
+
0
∗
l
o
g
(
0.2
)
+
0
∗
l
o
g
(
0.1
)
+
7
∗
(
0
∗
l
o
g
(
0
)
)
≈
0.1
H(P,Q) = -(1* log(0.9) + 0 * log(0.2) + 0 *log(0.1) + 7 * (0 * log(0)) ≈ 0.1
H(P,Q)=−(1∗log(0.9)+0∗log(0.2)+0∗log(0.1)+7∗(0∗log(0))≈0.1
H
(
P
,
Q
)
=
−
(
1
∗
l
o
g
(
0.8
)
+
0
∗
l
o
g
(
0.1
)
+
0
∗
l
o
g
(
0.5
)
+
7
∗
(
0
∗
l
o
g
(
0
)
)
≈
0.2
H(P,Q) = -(1* log(0.8) + 0 * log(0.1) + 0 *log(0.5) + 7 * (0 * log(0)) ≈ 0.2
H(P,Q)=−(1∗log(0.8)+0∗log(0.1)+0∗log(0.5)+7∗(0∗log(0))≈0.2
- P代表真实值
- Q代表预测值
因为 0.1 < 0.2 0.1 < 0.2 0.1<0.2,所以明显第一组要由于第二组
补充一点:交叉熵 H ( P , Q ) H(P,Q) H(P,Q)不是对称的,所以 H ( P , Q ) ≠ H ( Q , P ) H(P,Q) ≠ H(Q,P) H(P,Q)=H(Q,P)所以要注意P和Q的顺序,一版情况下,P代表真实值,Q代表预测值
最近很热,大家谨防中暑,但是学习不能断 ^^