今天再来介绍一些概念性知识
一、信息熵
- 热力学中的熵: 是表示分子状态混乱程度的物理量
- 信息论中的熵:用来描述信源的不确定性的大小
- 经常使用的熵概念有下列几种:
信息熵 交叉熵 相对熵 条件熵 互信息
1.信息熵
-
信源信息的不确定性函数
f
f
f通常满足两个条件:
- 是概率
p
p
p的单调递减函数
- 两个独立符号所产生的不确定性应等于各自不确定性之和,即
f
(
p
1
,
p
2
)
=
f
(
p
1
)
+
f
(
p
2
)
f(p_1,p_2) = f(p_1) + f(p_2)
f(p1?,p2?)=f(p1?)+f(p2?)
-
对数函数同时满足这两个条件:
f
(
p
)
=
l
o
g
1
p
=
?
l
o
g
p
f(p) = log\frac{1}{p} = -logp
f(p)=logp1?=?logp -
信息熵:要考虑信源所有可能发生情况的平均不确定性。若信源符号有n种取值:
U
1
,
.
.
,
U
i
,
.
.
.
,
U
n
U_1,..,U_i,...,U_n
U1?,..,Ui?,...,Un?,对应概率为
p
1
,
.
.
.
,
p
i
,
.
.
.
,
p
n
p_1,...,p_i,...,p_n
p1?,...,pi?,...,pn?,且各种出现彼此独立。此时信源的平均不确定性应当为单个符号不确定性
log
?
p
i
\log p_i
logpi?的统计平均值(E),称为信息熵,即
H
(
U
)
=
E
[
?
l
o
g
p
i
]
=
?
∑
i
=
1
n
p
i
l
o
g
p
i
=
∑
i
=
1
n
=
p
i
l
o
g
(
1
p
i
)
H(U) = E[-log p_i] = -\sum_{i = 1}^{n}{p_i logp_i} = \sum_{i = 1}^{n} = p_i log(\frac{1}{p_i})
H(U)=E[?logpi?]=?i=1∑n?pi?logpi?=i=1∑n?=pi?log(pi?1?)
2.交叉熵
- 定义:交叉熵是信息论中一个重要的概念,用于表征两个变量概率分布P、Q(假设P表示真实分布,Q为模型预测的分布)的差异性。交叉熵越大,两个变量差异程度越大。
- 公式:
H
(
P
,
Q
)
=
?
∑
x
∈
X
P
(
x
)
l
o
g
Q
(
x
)
=
∑
x
∈
X
P
(
x
)
l
o
g
1
Q
(
x
)
H(P,Q) = -\sum_{x\in X}{P(x)logQ(x)} = \sum_{x\in X}P(x)log\frac{1}{Q(x)}
H(P,Q)=?x∈X∑?P(x)logQ(x)=x∈X∑?P(x)logQ(x)1?
3.相对熵KL散度
- 也成为KL散度(Kullback–Leibler divergence,简称KLD)、信息散度(information divergence)、信息增益(information gain)。
- 定义:是交叉熵与信息熵的差值。表示用分布Q模拟真实分布P,所需的额外信息。是两个概率分布P和Q差别的非对称性的度量。
- 公式:
D
K
L
(
P
∣
∣
Q
)
=
∑
x
∈
X
P
(
x
)
l
o
g
1
Q
(
x
)
?
∑
x
∈
X
P
(
x
)
l
o
g
1
P
(
x
)
=
∑
x
∈
X
P
(
x
)
l
o
g
P
(
x
)
Q
(
x
)
D_{KL}(P||Q) = \sum_{x\in X}P(x)log\frac{1}{Q(x)} - \sum_{x\in X}P(x)log\frac{1}{P(x)} = \sum_{x\in X}P(x)log\frac{P(x)}{Q(x)}
DKL?(P∣∣Q)=x∈X∑?P(x)logQ(x)1??x∈X∑?P(x)logP(x)1?=x∈X∑?P(x)logQ(x)P(x)?
- 举例:假设某字符发射器随机发出0和1两种字符。且其真实发出概率分布为A。现在有两人的观察概率分布B与C。各个分布如下:
- 性质:
- 相对熵(KL散度)不具有对称性,即
D
K
L
(
P
∣
∣
Q
)
≠
D
K
L
(
Q
∣
∣
P
)
D_{KL}(P||Q) \neq D_{KL}(Q||P)
DKL?(P∣∣Q)?=DKL?(Q∣∣P)
- 相对熵具有非负性。即
D
K
L
(
P
∣
∣
Q
)
≥
0
D_{KL}(P||Q) \geq 0
DKL?(P∣∣Q)≥0
4.JS散度
- JS散度(Jensen–Shannon divergence)具有对称性:
由于KL散度不具对称性,因此JS散度在KL散度的基础上进行了改进。现有两个分布p1和p2,其JS散度公式为:
J
S
(
P
1
∣
∣
P
2
)
=
1
2
K
L
(
P
1
∣
∣
P
1
+
P
2
2
)
+
1
2
K
L
(
P
2
∣
∣
P
1
+
P
2
2
)
JS(P_1||P_2) = \frac{1}{2}KL(P_1||{\frac{P_1+P_2}{2}} )+ \frac{1}{2}KL({P_2||\frac{P_1+P_2}{2}})
JS(P1?∣∣P2?)=21?KL(P1?∣∣2P1?+P2??)+21?KL(P2?∣∣2P1?+P2??)
5.联合熵
- 用H(X, Y)表示。两个随机变量X、Y的联合分布的熵,形成联合熵
6.条件熵
- 条件熵(the conditional entropy):H(X|Y)表示在已知随机变量Y的条件下随机变量X的不确定性。
- 公式:表示(X, Y)的联合熵,减去Y单独发生包含的熵
H
(
X
∣
Y
)
=
H
(
X
,
Y
)
?
H
(
Y
)
H(X|Y) = H(X,Y) - H(Y)
H(X∣Y)=H(X,Y)?H(Y)
7.互信息
-
互信息(Mutual Information)可以被看成是一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不确定性 。 -
公式:
I
(
X
;
Y
)
=
H
(
X
)
?
H
(
X
∣
Y
)
=
H
(
X
)
+
H
(
Y
)
?
H
(
X
,
Y
)
=
∑
x
p
(
x
)
l
o
g
1
p
(
x
)
+
∑
y
p
(
y
)
l
o
g
1
p
(
y
)
?
∑
x
,
y
p
(
x
,
y
)
l
o
g
1
p
(
x
,
y
)
=
∑
x
,
y
p
(
x
,
y
)
l
o
g
p
(
x
,
y
)
p
(
x
)
p
(
y
)
I(X;Y) = H(X) - H(X|Y) = H(X) + H(Y) - H(X,Y) = \sum_{x}p(x)log\frac{1}{p(x)} + \sum_{y}p(y)log\frac{1}{p(y)} - \sum_{x,y}p(x,y)log\frac{1}{p(x,y)} = \sum_{x,y}p(x,y)log\frac{p(x,y)}{p(x)p(y)}
I(X;Y)=H(X)?H(X∣Y)=H(X)+H(Y)?H(X,Y)=x∑?p(x)logp(x)1?+y∑?p(y)logp(y)1??x,y∑?p(x,y)logp(x,y)1?=x,y∑?p(x,y)logp(x)p(y)p(x,y)? -
即互信息
I
(
X
;
Y
)
I(X;Y)
I(X;Y)是联合分布
p
(
x
,
y
)
p(x,y)
p(x,y)与乘积分布
p
(
x
)
p
(
y
)
p(x)p(y)
p(x)p(y)的相对熵
8.文氏图图解
二、反向传播中的梯度
-
反向传播(BP)算法的学习过程由正向传播过程和反向传播过程组成。 -
反向传播需要通过递归调用链规则(chain rule)计算表达式的梯度 -
链式原则,大家应该微积分都学过吧,不做过多介绍了,直接上例子,冲冲冲!!! -
例1:sigmoid的反向传播 sigmoid函数
σ
(
x
)
=
1
1
+
e
?
z
\sigma (x) = \frac{1}{1+e^{-z}}
σ(x)=1+e?z1?,则
d
σ
(
z
)
d
z
=
e
?
z
(
1
+
e
?
z
)
2
=
(
1
+
e
?
z
?
1
1
+
e
?
z
)
(
1
1
+
e
?
z
)
=
(
1
?
σ
(
z
)
)
σ
(
z
)
\frac{d\sigma (z)}{dz} = \frac{e^{-z}}{(1+e^{-z})^2} = (\frac{1+e^{-z}-1}{1+e^{-z}})(\frac{1}{1+e^{-z}}) = (1-\sigma (z))\sigma(z)
dzdσ(z)?=(1+e?z)2e?z?=(1+e?z1+e?z?1?)(1+e?z1?)=(1?σ(z))σ(z) 假设有
f
(
w
,
x
)
=
1
1
+
e
?
(
w
0
x
0
+
w
1
x
1
+
w
2
)
f(w,x) = \frac{1}{1+e^{-(w_0x_0+w_1x_1+w_2)}}
f(w,x)=1+e?(w0?x0?+w1?x1?+w2?)1?,则其正、反传播过程为:
import math
w = [3, 4, 5]
x = [6, 7]
dot = w[0]*x[0] + w[1]*x[1] + w[2]
f = 1.0 / (1 + math.exp(-dot))
dfddot = (1 - f) * f
dfdx = [w[0] * dfddot, w[1] * dfddot]
dfdw = [x[0] * dfddot, x[1] * dfddot, 1.0 * dfddot]
- 例2:矩阵相乘的梯度
矩阵相乘的梯度需要注意维度和转置操作
import numpy as np
W = np.random.randn(5, 10)
X = np.random.randn(10, 2)
D = W.dot(X)
dD = np.random.randn(*D.shape)
dDdW = dD.dot(X.T)
dDdX = W.T.dot(dD)
|