1. 前言
在机器学习中学习模型的参数是通过不断损失函数的值来实现的。对于机器学习中常见的损失函数有:平方损失函数与交叉熵损失函数。在本文中将讲述两者含义与响应的运用区别。
2. 平方损失函数
平方损失函数较为容易理解,它直接测量机器学习模型的输出与实际结果之间的距离。这里可以定义机器学习模型的输出为
y
i
y_i
yi,实际的结果为
t
i
t_i
ti,那么平方损失函数可以被定义为:
L
(
x
)
=
1
N
∑
i
=
1
N
(
y
i
−
t
i
)
2
L(x)=\frac{1}{N}\sum_{i=1}^{N}{(y_i-t_i)^2}
L(x)=N1i=1∑N(yi−ti)2
对于这样的定义简单直接,能够很清楚的解释损失函数的含义,但是对于交叉熵损失函数其含义就不是那么好理解了,接下来的内容将具体讲解。
3. 交叉熵损失函数
3.1 交叉熵损失函数定义
交叉熵(Cross Entry)是用来评估当前训练得到的概率分布与真实分布的差异情况,减少交叉熵损失就是在提高模型的预测准确率。其离散函数形式
H
(
p
,
q
)
=
−
∑
x
p
(
x
)
l
o
g
(
q
(
x
)
)
H(p,q)=-\sum_x{p(x)log(q(x))}
H(p,q)=−x∑p(x)log(q(x))
参数解释:
p
(
x
)
p(x)
p(x)是真实分布的概率,
q
(
x
)
q(x)
q(x)是模型通过数据计算出来的概率估计。
例如在二分类问题中,对于
y
i
y_i
yi的取值无非是1或是0,表示为
y
i
∈
{
1
,
0
}
y_i\in{\{1, 0\}}
yi∈{1,0}。
当
y
i
=
1
y_i=1
yi=1时:
P
(
y
i
=
1
∣
x
i
)
=
1
,
P
(
y
+
i
=
0
∣
x
i
)
=
0
P(y_i=1|x_i)=1, P(y+i=0|x_i)=0
P(yi=1∣xi)=1,P(y+i=0∣xi)=0
反之当
y
i
=
0
y_i=0
yi=0时:
P
(
y
i
=
1
∣
x
i
)
=
0
,
P
(
y
+
i
=
0
∣
x
i
)
=
1
P(y_i=1|x_i)=0, P(y+i=0|x_i)=1
P(yi=1∣xi)=0,P(y+i=0∣xi)=1
对于模型的估计概率,可以表示为:
P
(
y
i
=
1
∣
x
i
)
=
y
i
,
,
P
(
y
+
i
=
0
∣
x
i
)
=
1
−
y
i
,
P(y_i=1|x_i)=y_{i}^{,}, P(y+i=0|x_i)=1-y_i^,
P(yi=1∣xi)=yi,,P(y+i=0∣xi)=1−yi,
因而,对于该二分类模型其交叉熵损失函数可以定义为:
H
(
p
,
q
)
=
1
N
∑
i
=
0
N
−
y
i
l
o
g
y
i
,
−
(
1
−
y
i
)
l
o
g
(
1
−
y
i
,
)
H(p,q)=\frac{1}{N}\sum_{i=0}^{N}-y_ilogy_i^,-(1-y_i)log(1-y_i^,)
H(p,q)=N1i=0∑N−yilogyi,−(1−yi)log(1−yi,)
3.2 交叉熵损失函数信息论角度理解
信息熵是在结果出来之前对可能产生的信息量的期望。相对熵表示两个概率分布的差异,即KL散度。当两个分布相同时,相对熵的值为
0
0
0,其余情况下都大于
0
0
0。
D
(
p
∣
∣
q
)
=
∫
x
p
(
x
)
l
o
g
p
(
x
)
q
(
x
)
=
−
∫
x
p
(
x
)
l
o
g
q
(
x
)
d
x
−
(
−
∫
x
p
(
x
)
l
o
g
p
(
x
)
d
x
)
D(p||q)=\int_xp(x)log\frac{p(x)}{q(x)}=−\int_xp(x)logq(x)dx−(−\int_xp(x)logp(x)dx)
D(p∣∣q)=∫xp(x)logq(x)p(x)=−∫xp(x)logq(x)dx−(−∫xp(x)logp(x)dx)
前者是交叉熵,而后者是真实分布的信息熵。由于真实分布是固定的,所以信息熵的值是固定的。当交叉熵越小,相对熵则越小,估计的概率分布
q
(
x
)
q(x)
q(x)越接近真实的分布
p
(
x
)
p(x)
p(x)。
3.3 训练与测试集正样本比例不同的影响
交叉熵最小化等价于似然函数最大化。假设我们对每个标签为正例的样本都预测一个固定的概率,根据似然函数最大化,得到
y
i
,
=
正
样
本
数
量
全
部
样
本
数
量
y_i^,=\frac{正样本数量}{全部样本数量}
yi,=全部样本数量正样本数量
如果测试集的正例的比例也接近这个值,那么在该假设情况下我们得到的损失函数最小。
但是,如果训练集和测试集的正例比例不同,那么模型越复杂,越接近临界值的样本(越难判断结果的样本)就越容易受到训练集中正例比例的影响而偏离真实分布。
3.4 正样本比例不同的解决办法
为了解决训练集与测试集中正样本比例不一致的问题,常用到的解决办法就是抽样,假设正样本以
α
\alpha
α的比例进行抽样,而负样本以
β
\beta
β的比例进行抽样,则最后的交叉熵损失函数可以表示为:
H
(
p
,
q
)
=
1
N
∑
i
=
0
N
−
α
y
i
l
o
g
y
i
,
−
β
(
1
−
y
i
)
l
o
g
(
1
−
y
i
,
)
H(p,q)=\frac{1}{N}\sum_{i=0}^{N}-\alpha y_ilogy_i^,-\beta(1-y_i)log(1-y_i^,)
H(p,q)=N1i=0∑N−αyilogyi,−β(1−yi)log(1−yi,)
4. 两种损失函数的区别
平方损失函数与交叉熵损失函数都可以用作为机器学习模型的目标函数,但是在何种场景下使用何种损失函数才是较为合理的选择呢?一般来讲,如果学习模型致力于解决的问题是回归问题的连续变量,那么使用平方损失函数较为合适;若是对于分类问题的离散Ont-Hot向量,那么交叉熵损失函数较为合适
4.1 直观理解
从平方损失函数运用到多分类场景下,可知平方损失函数对每一个输出结果都十分看重,而交叉熵损失函数只对正确分类的结果看重。例如,对于一个多分类模型其模型结果输出为
(
a
,
b
,
c
)
(a,b,c)
(a,b,c),而实际真实结果为
(
1
,
0
,
0
)
(1, 0, 0)
(1,0,0)。则根据两种损失函数的定义其损失函数可以描述为:
L
S
=
(
a
−
1
)
2
+
(
b
−
0
)
2
+
(
c
−
0
)
2
=
(
a
−
1
)
2
+
b
2
+
c
2
L_S=(a-1)^2+(b-0)_2+(c-0)_2=(a-1)^2+b^2+c^2
LS=(a−1)2+(b−0)2+(c−0)2=(a−1)2+b2+c2
L
C
=
−
1
∗
l
o
g
a
−
0
∗
l
o
g
b
−
0
∗
l
o
g
c
=
−
l
o
g
a
L_C=-1*loga-0*logb-0*logc=-loga
LC=−1∗loga−0∗logb−0∗logc=−loga
从上述的结果中可以看出,交叉熵损失函数只和分类正确的预测结果有关。而平方损失函数还和错误的分类有关,该损失函数除了让正确分类尽量变大,还会让错误分类都变得更加平均,但实际中后面的这个调整使没必要的。但是对于回归问题这样的考虑就显得重要了,因而回归问题上使用交叉熵并不适合。
4.2 理论角度分析
平方数损失函数假设最终结果都服从高斯分布,而高斯分布实际上是一个连续变量,并不是一个离散变量。如果假设结果变量服从均值
u
u
u,方差为
σ
\sigma
σ,那么利用最大似然法就可以优化它的负对数似然,公式最终变为了:
=
m
a
x
∑
i
N
[
−
1
2
l
o
g
(
2
π
σ
2
)
−
(
t
i
−
y
)
2
σ
2
]
=max\sum_i^N[-\frac{1}{2}log(2\pi\sigma^2)-\frac{(t_i-y)}{2\sigma^2}]
=maxi∑N[−21log(2πσ2)−2σ2(ti−y)]
出去与
y
y
y无关的项目,最后剩下的就是平方损失函数的形式。