损失函数
损失函数分类
通常机器学习中每个算法都有一个目标函数,算法的求解过程就是对目标函数优化的过程。在分类后回归问题中,通常使用损失函数(代价函数)作为目标函数。损失函数是用来评价模型的预测值和真实值之间的差距,损失函数越小,模型越准确。
损失函数分为经验损失函数和结构损失函数。经验损失函数是预测结果和真实结果之间的差距,结构损失函数是经验损失函数加上正则项。数学表示如下:
θ
∗
=
a
r
g
m
i
n
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
,
θ
i
)
)
+
λ
ϕ
(
θ
)
\theta ^{\ast }=argmin\dfrac {1}{N}\sum ^{N}_{i=1}L\left( y_{i},f\left( x_{i},\theta _{i}\right) \right) +\lambda \phi \left( \theta \right)
θ∗=argminN1i=1∑NL(yi,f(xi,θi))+λϕ(θ)
其中,
a
r
g
m
i
n
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
,
θ
i
)
)
\ argmin\dfrac {1}{N}\sum ^{N}_{i=1}L\left( y_{i},f\left( x_{i},\theta _{i}\right) \right)
argminN1i=1∑NL(yi,f(xi,θi))是经验分险函数,L表示损失函数,
y
i
y_{i}
yi是真实值,
f
(
x
i
,
θ
i
)
f(x_{i},\theta_{i})
f(xi,θi)是预测值,λϕ(θ)是正则化项或惩罚项,它可以是L1、L2或其他正则函数,整个式子表示使目标函数最小。
常用的损失函数
L1损失函数
L1范数损失函数也称为最小绝对值偏差(LAD),最小绝对值误差(LAE),它是把目标值 y i y_{i} yi与预测值 f ( x i ) f(x_{i}) f(xi)的差值总和最小化: S = ∑ i = 1 N ∣ y i − f ( x i ) ∣ S=\sum ^{N}_{i=1}\left| y_{i}-f\left( x_{i}\right) \right| S=i=1∑N∣yi−f(xi)∣
L2损失函数
L2范数损失函数也称为最小平方偏差(LSE),它是把目标值与预测值差值的平方求和的结果最小化: S = ∑ i = 1 N ( y i − f ( x i ) ) 2 S=\sum ^{N}_{i=1}\left( y_{i}-f\left( x_{i}\right) \right) ^{2} S=i=1∑N(yi−f(xi))2
L1与L2的特点
L1 | L2 |
---|---|
稳健性高 | 稳健性一般 |
没有稳定的解 | 有稳定的解 |
可能有多组解 | 只有一个解 |
稳健性
L1函数稳健性高是他最大的的优点。当观测数据不稳定,误差较大时,L1受到的影响较小,而L2受到的影响会很大。这是因为 L1 累加的是 误差的绝对值,而L2累加的是误差的平方,如果误差较大时使用L2损失函数,我们就不得不更大程度的调整模型适应观测。
所以,当我们认为模型的值中存在异常值时,我们选用L1的效果就比L2好。当需要把误差较大的值也算进模型时,选用L2。
解的稳定性
L2函数处处可导,而L1在零点位置是不可导的,所以用L2损失函数求解会得到一个解析解,而L1损失函数没有。
当数据有微小变化时,L1函数的变化更大,解会更加不稳定。
交叉熵损失函数
交叉熵是Shannon信息论中用来衡量两个概率分布间差异性信息的概念。语言模型的性能通常用交叉熵和复杂度来衡量。
信息量
信息量是指从N个等可能事件中选出一个事件的信息度量或含量,也就是在N个事件中辨别出一个事件所需要提问是或否的次数。比如在32个数中选出预先设置的一个数,最快的方法是先问:这个数比16大还是小?通过回答我们再次提问,每次都缩小范围,直到选出那个预先设定好的数。所以最多需要
l
o
g
2
32
=
5
log_{2}32=5
log232=5 次,我们用二进制的五位0或1来表示这一过程就可以得到这一信息。
假设
x
x
x是一个离散型随机变量,其取值范围是集合
X
X
X,概率分布函数为
p
(
x
)
=
P
r
(
X
=
x
)
,
x
∈
X
p(x)=Pr(X=x),x\in X
p(x)=Pr(X=x),x∈X,我们定义事件
x
=
x
0
x=x_{0}
x=x0的信息量为:
I
(
x
0
)
=
−
l
o
g
(
p
(
x
0
)
)
I(x_{0})=-log(p(x_{0}))
I(x0)=−log(p(x0)),可以理解为一个事件发生的概率越大,则它携带的信息量就越少,而当事件发生的概率为1时,信息熵就为0,就是说该事件的发生不会导致信息量的增加。
信息熵
信息熵的定义公式: H ( X ) = − ∑ x ∈ X p ( x ) × log p ( x ) H( X )=-\sum _{x \in X}p\left( x\right) \times \log p \left(x \right) H(X)=−x∈X∑p(x)×logp(x)
x为事件,p(x)为发生事件x的概率。其中, 当 p ( x ) = 0 时 , 0 × log 0 = 0 当p(x)=0时,0\times \log0=0 当p(x)=0时,0×log0=0。事件发生的不确定性越大,其熵就越大,表明要搞清楚这个事件需要的信息量越多。这里的不确定性越大不是说事件发生的概率越小,而是说事件可能发生也有可能不发生,即 p ( x ) = 0.5 p(x)=0.5 p(x)=0.5,这时事件的熵最大。
交叉熵
对于一个样本集合,有两个概率分布
p
(
x
)
p(x)
p(x)和
q
(
x
)
q(x)
q(x),其中
p
(
x
)
p(x)
p(x)为真实分布,
q
(
x
)
q(x)
q(x)为非真实分布。基于真实分布
p
(
x
)
p(x)
p(x)我们可以计算这个样本集的信息熵也就是编码长度的期望:
H
(
X
)
=
−
∑
x
∈
X
p
(
x
)
×
log
p
(
x
)
H( X )=-\sum _{x \in X}p\left( x\right) \times \log p \left(x \right)
H(X)=−x∈X∑p(x)×logp(x)
如果我们用非真实分布
q
(
x
)
q(x)
q(x)来表示样本的信息量:
H
(
p
,
q
)
=
−
∑
x
∈
X
p
(
x
)
×
log
q
(
x
)
H( p,q )=-\sum _{x \in X}p\left( x\right) \times \log q \left(x \right)
H(p,q)=−x∈X∑p(x)×logq(x)
因为其中表示信息量的项来自非真实分布
q
(
x
)
q(x)
q(x),而对其期望值的计算采用的是真实值
p
(
x
)
p(x)
p(x),所以称其为交叉熵(Cross Entropy)。
比如:有一个随机变量
x
x
x,他的真实分布为:
p
(
x
)
=
(
0.4
,
0.6
,
0.4
,
0.7
)
p(x)=(0.4,0.6,0.4,0.7)
p(x)=(0.4,0.6,0.4,0.7),非真实分布为:
q
(
x
)
=
(
0.5
,
0.4
,
0.3
,
0.6
)
q(x)=(0.5,0.4,0.3,0.6)
q(x)=(0.5,0.4,0.3,0.6),所以真实信息熵为:
H
(
p
)
=
−
0.4
×
log
2
0.4
−
0.6
×
lg
2
0.6
−
0.4
×
log
2
0.4
−
0.7
×
log
2
0.7
=
0.53
+
0.44
+
0.53
+
0.36
=
1.86
b
i
t
s
\begin{aligned} H\left( p\right) &=-0.4\times \log _{2}0.4-0.6\times \lg _{2}0.6-0.4\times \log _{2}0.4-0.7\times \log _{2}0.7\\ &= 0.53 + 0.44 + 0.53 + 0.36\\ &=1.86bits \end{aligned}
H(p)=−0.4×log20.4−0.6×lg20.6−0.4×log20.4−0.7×log20.7=0.53+0.44+0.53+0.36=1.86bits
交叉熵:
H
(
p
,
q
)
=
−
0.4
×
l
o
g
2
0.5
−
0.6
×
log
2
0.4
−
0.4
×
log
2
0
⋅
3
−
0.7
×
log
2
0.6
=
0.4
+
0.79
+
0.69
+
0.52
=
2.4
b
i
t
s
\begin{aligned} H\left( p,q\right) &= -0.4\times log_{2}0.5-0.6\times \log _{2}0.4-0.4\times \log _{2}0\cdot 3-0.7\times \log_{2}0.6\\ &=0.4+0.79+0.69+0.52\\ &=2.4bits \end{aligned}
H(p,q)=−0.4×log20.5−0.6×log20.4−0.4×log20⋅3−0.7×log20.6=0.4+0.79+0.69+0.52=2.4bits
在这个例子中,我们可以看到交叉熵比原本真实信息熵要大。当我们对分布估计不准确时,总会引入不必要的额外的信息期望(引入了额外的误差),再加上原本真实的信息期望,最终的期望值就会比原来真实数据的期望值要大。
相对熵
相对熵(Relative Entropy)也称为KL散度,设
p
(
x
)
p(x)
p(x)、
q
(
x
)
q(x)
q(x)为离散型随机变量
X
X
X的概率分布,则
p
p
p对
q
q
q的相对熵为:
D
k
L
(
p
∣
∣
q
)
=
∑
x
p
(
x
)
l
o
g
p
(
x
)
q
(
x
)
=
E
p
(
x
)
log
p
(
x
)
q
(
x
)
D_{kL}\left( p||q\right) =\sum _{x}p\left( x\right) log\dfrac {p(x)}{q\left( x\right) }=E_{p\left( x\right) }\log \dfrac {p\left( x\right) }{q\left( x\right) }
DkL(p∣∣q)=x∑p(x)logq(x)p(x)=Ep(x)logq(x)p(x)
相对熵作为熵,也是大于0的,证明如下:
D
k
L
(
p
∣
∣
q
)
=
∑
x
p
(
x
)
l
o
g
p
(
x
)
q
(
x
)
=
−
∑
x
p
(
x
)
l
o
g
q
(
x
)
p
(
x
)
=
−
E
p
(
x
)
log
q
(
x
)
p
(
x
)
≥
−
l
o
g
E
p
(
x
)
(
p
(
x
)
q
(
x
)
)
=
−
l
o
g
∑
x
p
(
x
)
q
(
x
)
p
(
x
)
=
−
l
o
g
∑
x
q
(
x
)
\begin{aligned} D_{kL}\left( p||q\right) &=\sum _{x}p\left( x\right) log\dfrac {p(x)}{q\left( x\right) }\\ &=−\sum _{x}p\left( x\right) log\dfrac {q(x)}{p\left( x\right) }\\ &=-E_{p\left( x\right) }\log\dfrac {q(x)}{p\left( x\right) }\\ &\geq−logE_{p(x)}(\dfrac{p(x)}{q(x)})\\ &=−log\sum_{x}p(x)\dfrac{q(x)}{p(x)}\\ &=−log\sum_{x}q(x) \end{aligned}
DkL(p∣∣q)=x∑p(x)logq(x)p(x)=−x∑p(x)logp(x)q(x)=−Ep(x)logp(x)q(x)≥−logEp(x)(q(x)p(x))=−logx∑p(x)p(x)q(x)=−logx∑q(x)
因为
∑
x
q
(
x
)
=
1
\sum_{x}q(x)=1
∑xq(x)=1,所以
D
k
L
(
p
∣
∣
q
)
≥
0
D_{kL}\left( p||q\right)\geq0
DkL(p∣∣q)≥0
相对熵和交叉熵的关系
对相对熵进一步变形,得到:
D
k
L
(
p
∣
∣
q
)
=
∑
x
p
(
x
)
l
o
g
p
(
x
)
q
(
x
)
=
−
∑
x
p
(
x
)
l
o
g
q
(
x
)
−
(
−
∑
x
p
(
x
)
l
o
g
p
(
x
)
)
=
H
(
p
,
q
)
−
H
(
p
)
\begin{aligned} D_{kL}\left( p||q\right) &=\sum _{x}p\left( x\right) log\dfrac {p(x)}{q\left( x\right) }\\ &=-\sum_{x}p(x)logq(x)-(-\sum_{x}p(x)logp(x))\\ &=H(p,q)-H(p)\\ \end{aligned}
DkL(p∣∣q)=x∑p(x)logq(x)p(x)=−x∑p(x)logq(x)−(−x∑p(x)logp(x))=H(p,q)−H(p)
因为
D
k
L
(
p
∣
∣
q
)
≥
0
D_{kL}\left( p||q\right)\geq0
DkL(p∣∣q)≥0,所以
H
(
p
,
q
)
≥
H
(
p
)
H(p,q)\geq H(p)
H(p,q)≥H(p)
我们可以看到,相对熵表示的其实是我们用非真实数据表示系统时,得到的信息期望相比真实数据多出来的部分。
在机器学习中,训练数据固定后,其真实数据的熵
H
(
p
)
H(p)
H(p)是一个定值,那么最小化相对熵就等价于最小化交叉熵。
相对熵可以用来衡量两个概率分布间的差异。
交叉熵 可以来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小。