信息熵
提到交叉熵,首先我们要知道熵的定义。熵也叫信息熵
H
(
x
)
H(x)
H(x)表示在信号源发出信号后每个信号的平均信息量,即该信号源的平均编码长度。也表示在信号输出前,信号源的不确定性。用信息熵
H
(
x
)
H(x)
H(x)来表征变量
x
x
x的随机性。信息量越大则信号源的不确定性就越强。当变量
x
x
x发生的概率为1时,信息熵为0.
H
(
x
)
=
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
p
(
x
i
)
H(x)=-\sum_{i=1}^np(x_i)logp(x_i)
H(x)=−i=1∑np(xi)logp(xi)
相对熵
在衡量两个分布之间的差异时,通常用相对熵即KL散度来表示。设
p
p
p为目标概率分布,
q
q
q为近似
p
p
p的概率分布,则
D
K
L
(
p
∣
∣
q
)
D_{KL}(p||q)
DKL(p∣∣q)表示两个分布
p
p
p和
q
q
q之间的差异:
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
n
p
(
x
i
)
l
o
g
p
(
x
i
)
q
(
x
i
)
=
∑
i
=
1
n
p
(
x
i
)
l
o
g
p
(
x
i
)
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
q
(
x
i
)
=
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
q
(
x
i
)
−
(
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
p
(
x
i
)
)
=
H
(
p
,
q
)
−
H
(
p
)
D_{KL}(p||q) =\sum_{i=1}^np(x_i)log\frac{p(x_i)}{q(x_i)}\\ =\sum_{i=1}^np(x_i)logp(x_i)-\sum_{i=1}^np(x_i)logq(x_i)\\ =-\sum_{i=1}^np(x_i)logq(x_i)-(-\sum_{i=1}^np(x_i)logp(x_i))\\=H(p,q)-H(p)
DKL(p∣∣q)=i=1∑np(xi)logq(xi)p(xi)=i=1∑np(xi)logp(xi)−i=1∑np(xi)logq(xi)=−i=1∑np(xi)logq(xi)−(−i=1∑np(xi)logp(xi))=H(p,q)−H(p)
通过上式得到,相对熵=交叉熵-信息熵。两个分布差异越大相对熵越大,差异越小相对熵越小。当两个分布相同时,差异为0.
为什么在神经网络中使用交叉熵作为优化函数,而不是相对熵
在神经网络中,我们通常用交叉熵作为损失函数,是因为我们要用概率分布
q
q
q尽量逼近概率分布
p
p
p,而真实概率分布
p
p
p时固定的,所以其信息熵为定值。当要最小化分布
p
和
q
p和q
p和q之间的相对熵时就是要最小化它们之间的交叉熵。
为什么在神经网络中使用交叉熵作为优化函数,而不是均方误差
以二分类为例,设最后一层的输入为
x
l
x_l
xl,对应的该层的权重为
w
l
w_l
wl,偏置为
b
l
b_l
bl,激活函数为sigmoid函数,用
σ
(
x
)
\sigma(x)
σ(x)表示,
y
^
\hat{y}
y^表示预测输出的类别。
y
^
=
σ
(
w
l
x
l
+
b
l
)
=
σ
(
z
)
\hat{y}=\sigma(w_lx_l+b_l)=\sigma(z)
y^=σ(wlxl+bl)=σ(z)
其中
σ
(
x
)
=
1
1
+
e
−
x
\sigma(x)=\frac{1}{1+e^{-x}}
σ(x)=1+e−x1,
σ
′
(
x
)
=
σ
(
x
)
(
1
−
σ
(
x
)
)
\sigma'(x)=\sigma(x)(1-\sigma(x))
σ′(x)=σ(x)(1−σ(x)).
当使用均方误差时,优化函数为
l
=
1
2
(
y
−
y
^
)
2
l=\frac{1}{2}(y-\hat{y})^2
l=21(y−y^)2,对参数
w
l
w_l
wl求导为:
∂
l
∂
w
l
=
(
y
−
y
^
)
σ
′
(
z
)
x
l
\frac{\partial{l}}{\partial{w_l}}=(y-\hat{y})\sigma'(z)x_l
∂wl∂l=(y−y^)σ′(z)xl
由于
σ
′
(
z
)
\sigma'(z)
σ′(z)在绝大部分情况下导数值都很小,因此梯度更新较慢。而且根据链式法则可知当神经网络层数越深时越容易出现梯度消失问题。
当使用交叉熵时,优化函数为
l
=
−
y
l
o
g
(
y
^
)
−
(
1
−
y
)
l
o
g
(
1
−
y
^
)
l=-ylog(\hat{y})-(1-y)log(1-\hat{y})
l=−ylog(y^)−(1−y)log(1−y^),对参数
w
l
w_l
wl求导为:
∂
l
∂
w
l
=
(
−
y
y
^
+
1
−
y
1
−
y
^
)
σ
′
(
z
)
x
l
=
(
−
y
y
^
+
1
−
y
1
−
y
^
)
(
y
^
(
1
−
y
^
)
)
x
l
=
(
y
^
−
y
)
x
l
\frac{\partial{l}}{\partial{w_l}}=(-\frac{y}{\hat{y}}+\frac{1-y}{1-\hat{y}})\sigma'(z)x_l\\ =(-\frac{y}{\hat{y}}+\frac{1-y}{1-\hat{y}})(\hat{y}(1-\hat{y}))x_l\\ =(\hat{y}-y)x_l
∂wl∂l=(−y^y+1−y^1−y)σ′(z)xl=(−y^y+1−y^1−y)(y^(1−y^))xl=(y^−y)xl
计算得到的梯度已经和sigmoid的导数无关,而是由预测值和真实值之间的误差影响,误差越大梯度下降越快,因此避免了训练慢的问题。
参考链接:
1、如何通俗的解释交叉熵与相对熵?