信息论的一个基本想法
一个不太可能的事件居然发生了,要比一个非常可能的事件发生,能提供更多的信息。
信息量
所谓信息量是指从N个相等可能事件中选出一个事件所需要的信息度量或含量,也就是在辩识N个事件中特定的一个事件的过程中所需要提问"是或否"的最少次数.
所以***信息量是指信息多少的量度,用一个信息所需要的编码长度来定义。***
根据信息论的基本想法,信息量和事件发生的概率有关。
假设X是一个离散型随机变量,其取值集合为χ,概率分布函数p(x)=Pr(X=x),x∈χ,x∈χ,则定义事件X=x0的信息量为:
I
=
log
2
(
1
p
(
x
)
)
=
−
log
2
(
p
(
x
)
)
I=\log _{2}\left(\frac{1}{p(x)}\right)=-\log _{2}(p(x))
I=log2(p(x)1)=−log2(p(x))
熵
信息熵代表一个分布的信息量,或者编码的平均长度,用于随机变量的不确定性度量.
H
(
p
)
=
∑
x
p
(
x
)
log
2
(
1
p
(
x
)
)
=
−
∑
x
p
(
x
)
log
2
(
p
(
x
)
)
H(p)=\sum_{x} p(x) \log _{2}\left(\frac{1}{p(x)}\right)=-\sum_{x} p(x) \log _{2}(p(x))
H(p)=∑xp(x)log2(p(x)1)=−∑xp(x)log2(p(x))
即概率乘信息量。
如果是二分类问题,可以表示为:
H
(
X
)
=
−
∑
i
=
1
n
p
(
x
i
)
log
(
p
(
x
i
)
)
=
−
p
(
x
)
log
(
p
(
x
)
)
−
(
1
−
p
(
x
)
)
log
(
1
−
p
(
x
)
)
\begin{aligned} H(X) &=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(p\left(x_{i}\right)\right) \\ &=-p(x) \log (p(x))-(1-p(x)) \log (1-p(x)) \end{aligned}
H(X)=−i=1∑np(xi)log(p(xi))=−p(x)log(p(x))−(1−p(x))log(1−p(x))
相对熵(KL散度)
相对熵,又被称为Kullback-Leibler散度或信息散度,是两个概率分布间差异的***非对称性度量 ***。
在信息理论中,相对熵等价于两个概率分布的信息熵的差值 。
如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),P为真实分布,Q为预测分布
D
K
L
(
p
∥
q
)
=
∑
i
=
1
n
p
(
x
i
)
log
(
p
(
x
i
)
q
(
x
i
)
)
D_{K L}(p \| q)=\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(\frac{p\left(x_{i}\right)}{q\left(x_{i}\right)}\right)
DKL(p∥q)=∑i=1np(xi)log(q(xi)p(xi))
相对熵是一些优化算法,例如最大期望算法的损失函数 。此时参与计算的一个概率分布为真实分布,另一个为理论(拟合)分布,相对熵表示使用理论分布拟合真实分布时产生的信息损耗。
交叉熵 cross-entropy
交叉熵本质上可以看成,用一个猜测的分布的编码方式去编码其真实的分布,得到的平均编码长度或者信息量 。
KL散度可以表示为:
D
K
L
(
p
∥
q
)
=
∑
i
=
1
n
p
(
x
i
)
log
(
p
(
x
i
)
)
−
∑
i
=
1
n
p
(
x
i
)
log
(
q
(
x
i
)
)
=
−
H
(
p
(
x
)
)
+
[
−
∑
i
=
1
n
p
(
x
i
)
log
(
q
(
x
i
)
)
]
\begin{aligned} D_{K L}(p \| q) &=\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(p\left(x_{i}\right)\right)-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right) \\ &=-H(p(x))+\left[-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right)\right] \end{aligned}
DKL(p∥q)=i=1∑np(xi)log(p(xi))−i=1∑np(xi)log(q(xi))=−H(p(x))+[−i=1∑np(xi)log(q(xi))]
其中等式前一部分
−
H
(
p
(
x
)
)
-H(p(x))
−H(p(x))为信息熵,是固的的,等式的后一部分,就是交叉熵
H
(
p
,
q
)
=
−
∑
i
=
1
n
p
(
x
i
)
log
(
q
(
x
i
)
)
H(p, q)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right)
H(p,q)=−∑i=1np(xi)log(q(xi))
机器学习中,我们用预测分布q去预测真实分布p,因为真实分布p是固定的,即等式前一部分信息熵固定,也就是说等式后一部分交叉熵H(p,q)越大,相对熵D(p||q)越大,两个分布的差异越大。
所以常用交叉熵用来做损失函数,它衡量了真实分布和预测分布的差异性,最小化交叉熵既可以使预测和真值更接近。
联合信息熵
联合熵的物理意义是:观察一个多个随机变量的随机系统获得的信息量。
如果随机变量 (X,Y)∼p(x,y),那么其联合熵 H(X,Y)为,
H
(
X
,
Y
)
=
−
∑
x
∈
X
∑
y
∈
Y
p
(
x
,
y
)
log
p
(
x
,
y
)
=
−
E
log
p
(
X
,
Y
)
H(X, Y)=-\sum_{x \in \mathcal{X}} \sum_{y \in \mathcal{Y}} p(x, y) \log p(x, y)=-E \log p(X, Y)
H(X,Y)=−∑x∈X∑y∈Yp(x,y)logp(x,y)=−Elogp(X,Y)
用来评估(X,Y)在一起时的不确定性度量
条件信息熵
条件熵就是指,知道X后Y还剩多少信息量(H(Y|X))。或者知道Y后,X还剩多少信息量(H(X|Y))。
H
(
Y
∣
X
)
=
∑
x
∈
X
p
(
x
)
H
(
Y
∣
X
=
x
)
=
−
∑
x
∈
X
p
(
x
)
∑
y
∈
Y
p
(
y
∣
x
)
log
p
(
y
∣
x
)
=
−
∑
x
∈
X
∑
y
∈
Y
p
(
x
,
y
)
log
p
(
y
∣
x
)
H(Y | X)=\sum_{x \in \mathcal{X}} p(x) H(Y | X=x)=-\sum_{x \in \mathcal{X}} p(x) \sum_{y \in \mathcal{Y}} p(y | x) \log p(y | x)=-\sum_{x \in \mathcal{X}} \sum_{y \in \mathcal{Y}} p(x, y) \log p(y | x)
H(Y∣X)=∑x∈Xp(x)H(Y∣X=x)=−∑x∈Xp(x)∑y∈Yp(y∣x)logp(y∣x)=−∑x∈X∑y∈Yp(x,y)logp(y∣x)
=
−
E
log
p
(
Y
∣
X
)
=-E \log p(Y | X)
=−Elogp(Y∣X)
条件熵中X也是一个变量,意思是在一个变量X的条件下(变量X的每个值都会取),另一个变量Y熵对X的期望。 X指的是变量不是一个数。
互信息
互信息(信息增益)
一个联合分布中的两个信息的纠缠程度/或者叫相互影响那部分的信息量 ,看成是一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不肯定性。
I(X,Y)=H(X)+H(Y)−H(X,Y)
I(X,Y)=H(Y)−H(Y|X)
其他
- 熵:
用于随机变量的不确定性度量,表示事件包含多少信息。 - 相对熵(KL散度):
用于评估预测分布和真实分布的差异,如:已知事件A和事件B,描述A和B的差异 - 交叉熵:
用于评估预测分布和真实分布的差异,简单地说就是判断模型的好与坏。常用来作为优化loss,比如已知事件A和事件B,如何用事件A来描述事件B,有多少相似的地方。 - 联合熵:
(A,B)在一起时的不确定性度量 - 条件熵:
A确定时,B的不确定性度量,即在A发生是前提下,B发生新带来的信息熵。
问题
-
分类和回归问题?
分类问题: 目标变量是离散的。
回归问题: 目标变量是连续的数值。 -
MSE、交叉熵、classification error
MSE: J = 1 N ∑ i = 1 N ( y i − h θ ( x i ) ) 2 J=\frac{1}{N} \sum_{i=1}^{N}\left(y i-h_{\theta}\left(x_{i}\right)\right)^{2} J=N1∑i=1N(yi−hθ(xi))2
交叉熵: H ( p , q ) = − ∑ i = 1 n p ( x i ) log ( q ( x i ) ) H(p, q)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right) H(p,q)=−∑i=1np(xi)log(q(xi))
classification error:classification error = count of error items count of all items =\frac{\text { count of error items }}{\text { count of all items }} = count of all items count of error items
-
为什么分类要用交叉熵做loss函数?
-
KL散度表示预测和真值的差异,所以可以被用于计算代价,但是KL散度中的信息熵H§是固定的,所以直接用另外一项交叉熵来作为loss, 当交叉熵很小时,我们认为预测的分布和真实分布接近;
其实我们训练的时候只是拿训练集分布来当做真实分布,这样最小化交叉熵其实很容易过拟合,所以出现了各种正则化方法 -
回归问题要求拟合实际的值,通过MSE衡量预测值和实际值之间的误差,可以通过梯度下降的方法来优化。而分类问题,one hot 形式算出各 label 的概率, 然后通过 argmax 选出最终的分类, 这个过程需要一系列的激活函数(sigmoid、softmax)来将预测值映射到0-1之间;
可以看出log函数早0-1的范围内是凸函数,可以找到局部最优,所以用sigmoid或者softmax作为激活函数把网络输出映射成0-1的概率可以找到最优解;
cross entropy的理念其实接近MSE,通过sigmoid function(0-1之间)计算出来的概率,看这个预测和真实答案(0或者1)的“距离”多远。 -
交叉熵损失函数+sigmoid求导:
∂ C ∂ w j = − 1 n ∑ x ( y σ ( z ) − ( 1 − y ) 1 − σ ( z ) ) ∂ σ ∂ w j = − 1 n ∑ x ( y σ ( z ) − ( 1 − y ) 1 − σ ( z ) ) σ ′ ( z ) x j = 1 n ∑ x σ ′ ( z ) x j σ ( z ) ( 1 − σ ( z ) ) ( σ ( z ) − y ) = 1 n ∑ x x j ( σ ( z ) − y ) \begin{aligned} \frac{\partial C}{\partial w_{j}} &=-\frac{1}{n} \sum_{x}\left(\frac{y}{\sigma(z)}-\frac{(1-y)}{1-\sigma(z)}\right) \frac{\partial \sigma}{\partial w_{j}} \\ &=-\frac{1}{n} \sum_{x}\left(\frac{y}{\sigma(z)}-\frac{(1-y)}{1-\sigma(z)}\right) \sigma^{\prime}(z) x_{j} \\ &=\frac{1}{n} \sum_{x} \frac{\sigma^{\prime}(z) x_{j}}{\sigma(z)(1-\sigma(z))}(\sigma(z)-y) \\ &=\frac{1}{n} \sum_{x} x_{j}(\sigma(z)-y) \end{aligned} ∂wj∂C=−n1x∑(σ(z)y−1−σ(z)(1−y))∂wj∂σ=−n1x∑(σ(z)y−1−σ(z)(1−y))σ′(z)xj=n1x∑σ(z)(1−σ(z))σ′(z)xj(σ(z)−y)=n1x∑xj(σ(z)−y)
∂ C ∂ b = 1 n ∑ x ( σ ( z ) − y ) \frac{\partial C}{\partial b}=\frac{1}{n} \sum_{x}(\sigma(z)-y) ∂b∂C=n1∑x(σ(z)−y)
可以看出损失函数的大小与sigmoid导数无关,只与激活函数输出和真实值有关,差距大损失大,差距小损失小;
-
-
为什么分类不用classification error?
因为分类错误率不能区分模型好坏,只能区分对错(但是预测对的类别分数高和分数低其实模型好坏是不同的);
https://zhuanlan.zhihu.com/p/35709485 -
为什么回归用MSE损失函数?
J = 1 N ∑ i = 1 N ( y i − h θ ( x i ) ) 2 J=\frac{1}{N} \sum_{i=1}^{N}\left(y i-h_{\theta}\left(x_{i}\right)\right)^{2} J=N1∑i=1N(yi−hθ(xi))2
回归的目标变量是连续的数值,预测值需要接近真实数值,MSE衡量了预测的实数值和事实值之间的数值大小的差异程度(是衡量的距离);
如果差异大则损失应该很大,bp之后权重更新会较为明显,差异小则损失应该比较小。 -
分类为什么用sigmoid和softmax?
sigmoid保证结果在0-1之间,可以被理解为概率,同时是凸型函数,容易优化。因此可以同时作为evaluation metrics和loss function -
为什么分类不用MSE损失函数?
- 回归问题要求拟合实际的值,通过MSE衡量预测值和实际值之间的误差,可以通过梯度下降的方法来优化。
MSE求导:
d J d W = ( y i − y ^ i ) σ ′ ( W x i + b ) x i \frac{d J}{d W}=\left(y_{i}-\hat{y}_{i}\right) \sigma^{\prime}\left(W x_{i}+b\right) x_{i} dWdJ=(yi−y^i)σ′(Wxi+b)xi
d J d b = ( y i − y ^ i ) σ ′ ( W x i + b ) \frac{d J}{d b}=\left(y_{i}-\hat{y}_{i}\right) \sigma^{\prime}\left(W x_{i}+b\right) dbdJ=(yi−y^i)σ′(Wxi+b)
其中 σ ′ ( W x i + b ) \sigma^{\prime}\left(W x_{i}+b\right) σ′(Wxi+b)为 σ ( W x i + b ) ( 1 − σ ( W x i + b ) ) \sigma\left(W x_{i}+b\right)\left(1-\sigma\left(W x_{i}+b\right)\right) σ(Wxi+b)(1−σ(Wxi+b)),当 σ ( W x i + b ) \sigma\left(W x_{i}+b\right) σ(Wxi+b)为0或1的时候导数趋近于0,
即MSE的一个缺点就是其偏导值在输出概率值接近0或者接近1的时候非常小,这可能会造成模型刚开始训练时,偏导值几乎消失,学习速率非常慢的情况;
https://zhuanlan.zhihu.com/p/35707643 - MSE+softmax函数形式不是凸函数 ,容易进入局部最优,MSE 计算 loss, 输出的曲线是波动的,有很多局部的极值点。 即非凸优化问题 。
https://zhuanlan.zhihu.com/p/53045651 - sigmoid函数图像可以发现,对于均方差MSE损失,输出越大,梯度越小。 当真值为0的时候,y=σ(wh+b) 越大,即sigmoid的值越大,但是sigmoid的梯度越小,但是Δcross-entropy的梯度大(因为交叉熵导数与sigmoid导无关),ΔMSE的梯度小(因为乘以了sigmoid较远的非常小的梯度)。
综上:使用MSE作为loss function时,梯度收到压缩,造成梯度的损失,训练太慢,因为激活函数f是sigmoid函数,所以0<f(u)<1,所以0<f(u)(1-f(u))<1,梯度乘以一个大于0小于1的数,造成了梯度的损失。而用cross-entropy作为loss时,梯度保持原样,且是线性函数,保证了梯度较稳定的回传。
原文链接:https://blog.csdn.net/u014267567/article/details/79510808
https://blog.csdn.net/zb1165048017/article/details/71154581 - 感兴趣还可以看下:https://rohanvarma.me/Loss-Functions/
- 回归问题要求拟合实际的值,通过MSE衡量预测值和实际值之间的误差,可以通过梯度下降的方法来优化。
参考
熵:
https://blog.csdn.net/haolexiao/article/details/70142571
https://blog.csdn.net/tsyccnh/article/details/79163834
https://blog.csdn.net/Recall_Tomorrow/article/details/79088414
问题:
https://zhuanlan.zhihu.com/p/35709485
https://zhuanlan.zhihu.com/p/53045651
https://rohanvarma.me/Loss-Functions/
https://zhuanlan.zhihu.com/p/35709485
!https://blog.csdn.net/u014267567/article/details/79510808
!https://blog.csdn.net/zb1165048017/article/details/71154581