卷积神经网络的深入理解-优化目标(损失函数)篇
优化目标-损失函数(持续补充)
下面讲介绍两类基础任务(分类任务+回归任务,分类任务主要是预测概率的分布,而回归主要是预测具体的数值)的常见优化目标(损失函数)
一、分类任务损失
1、0-1损失
如下:
预测类别等于真实类别时loss为0,否则loss为1,但由于无法求导和优化,因此只具有理论意义。
2、KL散度 & 交叉熵损失(cross entropy loss)& softmax loss
提到KL散度,交叉熵损失之前我们先要知道另一个概念:信息熵
(1)信息熵
这个概念大家应该比较熟悉了,下面给出公式:
H
(
X
)
=
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
p
(
x
i
)
H(X)=-\sum_{i=1}^{n}p(x_{i})logp(x_{i})
H(X)=−i=1∑np(xi)logp(xi)
大家可以将
x
i
x_{i}
xi看作是类别,
p
(
x
i
)
p(x_{i})
p(xi)看作是
X
X
X是
x
i
x_{i}
xi这一类的概率。下面给出例子:
1、
p
(
x
i
)
p(x_{i})
p(xi)是确定的,即很明确的知道样本
X
X
X是否属于这一类
x
i
x_{i}
xi
* | 篮球 | 足球 | 排球 |
---|---|---|---|
label | 1 | 0 | 0 |
其信息熵为:
H
(
X
)
=
−
(
1
∗
l
o
g
(
1
)
+
0
∗
l
o
g
(
0
)
+
0
∗
l
o
g
(
0
)
)
=
0
H(X)=-(1*log(1)+0*log(0)+0*log(0))=0
H(X)=−(1∗log(1)+0∗log(0)+0∗log(0))=0
由于是确定的,因此信息熵为0。
2、 p ( x i ) p(x_{i}) p(xi)是不确定的,即只知道样本 X X X属于这一类 x i x_{i} xi的概率
* | 篮球 | 足球 | 排球 |
---|---|---|---|
prediction | 0.6 | 0.3 | 0.1 |
其信息熵为:
H
(
X
)
=
−
(
0.6
∗
l
o
g
(
0.6
)
+
0.3
∗
l
o
g
(
0.3
)
+
0.1
∗
l
o
g
(
0.1
)
)
H(X)=-(0.6*log(0.6)+0.3*log(0.3)+0.1*log(0.1))
H(X)=−(0.6∗log(0.6)+0.3∗log(0.3)+0.1∗log(0.1))
由于只知道样本属于某一类的概率,因此信息熵不为0。
(2)KL散度(相对熵)
是指两个概率分布间差异的非对称性度量,通俗点说就是衡量同一个随机变量的两个不同分布之间的距离,可能还不太好理解后面会举一些具体的例子。先给出公式:
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
p
(
x
i
)
q
(
x
i
)
)
D_{KL}(p||q)=\sum_{i=1}^{n}p(x_{i})log(\frac{p(x_{i})}{q(x_{i})})
DKL(p∣∣q)=i=1∑np(xi)log(q(xi)p(xi))
这里
x
i
x_{i}
xi可以被看作是不同的类别,
p
(
x
i
)
p(x_{i})
p(xi)看作是这个样本在某种条件属于这一类的概率,
q
(
x
i
)
q(x_{i})
q(xi)看作是这个样本在另一种条件属于这一类的概率
下面给出具体的例子
* | 真p(x) | 模型二认为该样本是什么的概率q(x) |
---|---|---|
🐱 | 0.7 | 0.2 |
🐕 | 0.2 | 0.6 |
🐖 | 0.1 | 0.2 |
KL散度有两种计算
一种是模型一相对于模型二的KL散度:
D
K
L
(
p
∣
∣
q
)
=
0.7
l
o
g
(
0.7
0.2
)
+
0.2
l
o
g
(
0.2
0.6
)
+
0.1
l
o
g
(
0.1
0.2
)
=
0.25535
D_{KL}(p||q)=0.7log(\frac{0.7}{0.2})+0.2log(\frac{0.2}{0.6})+0.1log(\frac{0.1}{0.2})=0.25535
DKL(p∣∣q)=0.7log(0.20.7)+0.2log(0.60.2)+0.1log(0.20.1)=0.25535
另一种是模型二相对于模型一的KL散度:
D
K
L
(
q
∣
∣
p
)
=
0.2
l
o
g
(
0.2
0.7
)
+
0.6
l
o
g
(
0.6
0.2
)
+
0.2
l
o
g
(
0.2
0.1
)
=
0.23764
D_{KL}(q||p)=0.2log(\frac{0.2}{0.7})+0.6log(\frac{0.6}{0.2})+0.2log(\frac{0.2}{0.1})=0.23764
DKL(q∣∣p)=0.2log(0.70.2)+0.6log(0.20.6)+0.2log(0.10.2)=0.23764
那么如果有一种是已知分布,另一个是概率分布呢?看下面的例子(接下来在如何选择KL散度损失函数还是交叉熵损失函数会用到)。
* | 真实标签p(x) | 模型预测值q(x) |
---|---|---|
🐱 | 1 | 0.7 |
🐕 | 0 | 0.1 |
🐖 | 0 | 0.2 |
预测值相对于真实标签的KL散度:
D
K
L
(
p
∣
∣
q
)
=
1
∗
l
o
g
(
1
0.7
)
+
0
∗
l
o
g
(
0
0.1
)
+
0
∗
l
o
g
(
0
0.2
)
=
l
o
g
(
1
0.7
)
D_{KL}(p||q)=1*log(\frac{1}{0.7})+0*log(\frac{0}{0.1})+0*log(\frac{0}{0.2})=log(\frac{1}{0.7})
DKL(p∣∣q)=1∗log(0.71)+0∗log(0.10)+0∗log(0.20)=log(0.71)
KL散度的特性(这里不过多介绍,可以自己证明):
1、非对称性
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),只有在
p
p
p与
q
q
q概率分布完全一样时才相等。
2、非负性
D
K
L
(
p
∣
∣
q
)
恒
大
于
等
于
0
D_{KL}(p||q)恒大于等于0
DKL(p∣∣q)恒大于等于0,只有在
p
p
p与
q
q
q概率分布完全一样时才等于0。
下面我们来看一下KL散度的公式:
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
p
(
x
i
)
q
(
x
i
)
)
D_{KL}(p||q)=\sum_{i=1}^{n}p(x_{i})log(\frac{p(x_{i})}{q(x_{i})})
DKL(p∣∣q)=i=1∑np(xi)log(q(xi)p(xi))
=
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
p
(
x
i
)
)
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
q
(
x
i
)
)
=\sum_{i=1}^{n}p(x_{i})log(p(x_{i}))-\sum_{i=1}^{n}p(x_{i})log(q(x_{i}))
=i=1∑np(xi)log(p(xi))−i=1∑np(xi)log(q(xi))
=
−
(
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
p
(
x
i
)
)
)
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
q
(
x
i
)
)
=-(-\sum_{i=1}^{n}p(x_{i})log(p(x_{i})))-\sum_{i=1}^{n}p(x_{i})log(q(x_{i}))
=−(−i=1∑np(xi)log(p(xi)))−i=1∑np(xi)log(q(xi))
=
H
(
P
,
Q
)
−
H
(
P
)
=H(P,Q)-H(P)
=H(P,Q)−H(P)
我们来看一下
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
p
(
x
i
)
)
是
信
息
熵
,
记
为
H
(
P
)
-\sum_{i=1}^{n}p(x_{i})log(p(x_{i}))是信息熵,记为H(P)
−i=1∑np(xi)log(p(xi))是信息熵,记为H(P)
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
q
(
x
i
)
)
也
就
是
我
们
接
下
来
要
介
绍
的
交
叉
熵
损
失
函
数
记
为
H
(
P
,
Q
)
-\sum_{i=1}^{n}p(x_{i})log(q(x_{i}))也就是我们接下来要介绍的交叉熵损失函数记为H(P,Q)
−i=1∑np(xi)log(q(xi))也就是我们接下来要介绍的交叉熵损失函数记为H(P,Q)
(3)交叉熵损失(cross entropy loss)
交叉熵主要用于度量同一个随机变量
x
x
x的预测分布Q和真实分布P之间的差距。(需要注意的是真实分布是P,预测分布是Q)
公式为:
H
(
P
,
Q
)
=
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
q
(
x
i
)
)
H(P,Q)=-\sum_{i=1}^{n}p(x_{i})log(q(x_{i}))
H(P,Q)=−i=1∑np(xi)log(q(xi))
下面举一个例子这个例子还是上面那个例子:
* | 真实标签p(x) | 模型预测概率q(x) |
---|---|---|
🐱 | 1 | 0.7 |
🐕 | 0 | 0.1 |
🐖 | 0 | 0.2 |
其交叉熵损失为:
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
q
(
x
i
)
)
=
−
(
1
∗
l
o
g
(
0.7
)
+
0
∗
l
o
g
(
0.1
)
+
0
∗
l
o
g
(
0.2
)
)
=
−
l
o
g
(
0.7
)
-\sum_{i=1}^{n}p(x_{i})log(q(x_{i}))=-(1*log(0.7)+0*log(0.1)+0*log(0.2))=-log(0.7)
−i=1∑np(xi)log(q(xi))=−(1∗log(0.7)+0∗log(0.1)+0∗log(0.2))=−log(0.7)
一个样本只有一个类别的标签为真(不考虑一个样本有多个真实标签)从这里我们可以得到一个更加简化的公式:
H
(
P
,
Q
)
=
−
p
(
x
)
l
o
g
(
q
(
x
)
)
=
−
l
o
g
(
q
(
x
)
)
,
p
(
x
)
为
1
H(P,Q)=-p(x)log(q(x))=-log(q(x)),p(x)为1
H(P,Q)=−p(x)log(q(x))=−log(q(x)),p(x)为1
交叉熵损失只与真实标签为1的预测概率有关。
那么为什么很多网络模型中使用交叉熵作损失函数呢?
让我们来推一下:
D
K
L
(
p
∣
∣
q
)
=
H
(
P
,
Q
)
−
H
(
P
)
D_{KL}(p||q)=H(P,Q)-H(P)
DKL(p∣∣q)=H(P,Q)−H(P)
这是我们从上面推出的公式,
D
K
L
(
p
∣
∣
q
)
D_{KL}(p||q)
DKL(p∣∣q)是KL散度,
H
(
P
,
Q
)
H(P,Q)
H(P,Q)是交叉熵,
H
(
P
)
H(P)
H(P)是信息熵,上面我们已经知道
D
K
L
(
p
∣
∣
q
)
=
l
o
g
(
1
0.7
)
D_{KL}(p||q)=log(\frac{1}{0.7})
DKL(p∣∣q)=log(0.71),
H
(
P
,
Q
)
=
−
l
o
g
(
0.7
)
=
l
o
g
(
1
0.7
)
H(P,Q)=-log(0.7)=log(\frac{1}{0.7})
H(P,Q)=−log(0.7)=log(0.71),显然一个样本的真实标签只有一个为1,不属于其余类别标签(这里不考虑一个样本属于多种类别),因此很容易算出
H
(
P
)
H(P)
H(P)为0,在有真实分布时,
H
(
P
)
H(P)
H(P)都为0。
由此得到一个重要结论,在有真实分布时,KL散度等于交叉熵,此时选择交叉熵,没有真实分布时建议使用KL散度
那么为什么有真实分布要使用交叉熵损失函数呢?KL散度与交叉熵不是相等吗?
这就考虑到网络的梯度更新了,因为更新梯度时,损失函数要进行求导,而信息熵此时是一个常数,在计算KL散度时,这个常数每次都会计算,而我们都知道它为0,这就使得每次计算损失时会多余的计算这个常数,浪费计算资源。
(4)Softmax 损失函数(Softmax loss)
Softmax损失函数其实就是将Softmax与交叉熵损失函数的结合。
Softmax如下:
其是将数字转换为给概率,用到了数据归一化。
Softmax公式如下:
S
i
=
e
Z
i
∑
i
=
1
n
e
Z
i
S_{i}=\frac{e^{Z_{i}}}{\sum_{i=1}^{n}e^{Z_{i}}}
Si=∑i=1neZieZi
H
(
P
,
Q
)
=
−
l
o
g
(
q
(
x
)
)
H(P,Q)=-log(q(x))
H(P,Q)=−log(q(x))将
q
(
x
)
q(x)
q(x)换为
S
i
S_{i}
Si可得Softmax loss的公式如下:
H
(
P
,
Q
)
=
−
l
o
g
(
e
Z
i
∑
i
=
1
n
e
Z
i
)
H(P,Q)=-log(\frac{e^{Z_{i}}}{\sum_{i=1}^{n}e^{Z_{i}}})
H(P,Q)=−log(∑i=1neZieZi)
=
−
Z
i
+
l
o
g
(
∑
i
=
1
n
e
Z
i
)
=-Z_{i}+log({\sum_{i=1}^{n}}e^{Z_{i}})
=−Zi+log(i=1∑neZi)
二、回归任务损失
1、L1/L2-loss & Huber loss & smooth L1 loss
L1/L2 Loss与下面介绍的正则化方法中的参数正则化类似
下面分别介绍。
(1)L1 Loss
L1-loss全称 Mean absolute loss(MAE),是以绝对误差作为距离。
公式为:
M
A
E
=
1
n
∑
i
=
1
n
∣
(
y
i
−
y
i
˙
)
∣
MAE=\frac{1}{n}\sum_{i=1}^{n}|(y_{i}-\dot{y_{i}})|
MAE=n1i=1∑n∣(yi−yi˙)∣
假设n=1时,L1损失函数图像如下,
M
A
E
MAE
MAE是纵坐标,
(
y
i
−
y
i
˙
)
(y_{i}-\dot{y_{i}})
(yi−yi˙)是横坐标。
在
(
y
i
−
y
i
˙
)
=
0
(y_{i}-\dot{y_{i}})=0
(yi−yi˙)=0处不可导。MAE损失函数在
(
y
i
−
y
i
˙
)
(y_{i}-\dot{y_{i}})
(yi−yi˙)不为0处梯度是相等的,这意味着即使对于小的损失值,其梯度也是大的。这不利于函数的收敛和模型的学习。但是,无论对于什么样的输入值,都有着稳定的梯度,不会导致梯度爆炸问题,具有较为稳健性的解。(这里参考的是这篇博文回归损失函数1:L1 loss, L2 loss以及Smooth L1 Loss的对比)
(2)L2 Loss
L2 Loss 全称 Mean Squared Loss/Quadratic Loss(MSE loss),称为欧式距离,误差平方和作为距离。
公式为:
M
S
E
=
1
n
∑
i
=
1
n
(
y
i
−
y
i
˙
)
2
MSE=\frac{1}{n}\sum_{i=1}^{n}(y_{i}-\dot{y_{i}})^2
MSE=n1i=1∑n(yi−yi˙)2
假设n=1时,L2损失函数图像如下,
M
S
E
MSE
MSE是纵坐标,
(
y
i
−
y
i
˙
)
(y_{i}-\dot{y_{i}})
(yi−yi˙)是横坐标。
能够发现的是,当预测值与目标值相差很大时,梯度很容易爆炸。MSE的函数曲线光滑、连续,处处可导,便于使用梯度下降算法,是一种常用的损失函数。 而且,随着误差的减小,梯度也在减小,这有利于收敛,即使使用固定的学习速率,也能较快的收敛到最小值。
当
(
y
i
−
y
i
˙
)
(y_{i}-\dot{y_{i}})
(yi−yi˙)大于1时,会放大误差;而当
(
y
i
−
y
i
˙
)
(y_{i}-\dot{y_{i}})
(yi−yi˙)小于1时,则会缩小误差,MSE对于较大的误差(>1)给予较大的惩罚,较小的误差(<1)给予较小的惩罚。
(3)Huber loss
为解决L1 loss梯度不平滑,L2 loss梯度爆炸的问题,提出了Huber loss
公式如下:
l
H
u
b
e
r
(
y
i
−
y
i
˙
)
{
0.5
(
y
i
−
y
i
˙
)
2
i
f
∣
y
i
−
y
i
˙
∣
⩽
δ
δ
∗
(
∣
y
i
−
y
i
˙
∣
−
1
2
δ
)
o
t
h
e
r
w
i
s
e
l_{Huber}(y_{i}-\dot{y_{i}})\left\{\begin{matrix} 0.5(y_{i}-\dot{y_{i}})^2 & if|y_{i}-\dot{y_{i}}|\leqslant \delta \\ \delta *(|y_{i}-\dot{y_{i}}|-\frac{1}{2}\delta )& otherwise \end{matrix}\right.
lHuber(yi−yi˙){0.5(yi−yi˙)2δ∗(∣yi−yi˙∣−21δ)if∣yi−yi˙∣⩽δotherwise
δ
\delta
δ可由自己设置,当预测偏差小于
δ
\delta
δ时,它采用平方误差,当预测偏差大于
δ
\delta
δ时,采用的线性误差。
(4)smooth L1 loss
smooth L1 loss其实是Huber loss中
δ
\delta
δ=1时的损失函数,公式如下:
s
m
o
o
t
h
L
1
(
y
i
−
y
i
˙
)
{
0.5
(
y
i
−
y
i
˙
)
2
i
f
∣
y
i
−
y
i
˙
∣
⩽
1
(
∣
y
i
−
y
i
˙
∣
−
0.5
)
o
t
h
e
r
w
i
s
e
smooth_{L_{1}}(y_{i}-\dot{y_{i}})\left\{\begin{matrix} 0.5(y_{i}-\dot{y_{i}})^2 & if|y_{i}-\dot{y_{i}}|\leqslant 1 \\ (|y_{i}-\dot{y_{i}}|-0.5 )& otherwise \end{matrix}\right.
smoothL1(yi−yi˙){0.5(yi−yi˙)2(∣yi−yi˙∣−0.5)if∣yi−yi˙∣⩽1otherwise
当
(
y
i
−
y
i
˙
)
(y_{i}-\dot{y_{i}})
(yi−yi˙)比较小时,等价于L2 loss,保持平滑,
(
y
i
−
y
i
˙
)
(y_{i}-\dot{y_{i}})
(yi−yi˙)比较大时,等价于L1 loss,可以限制数值的大小。
下面是三种loss的函数图像。
这就是神经网络损失函数的理解,如有不对的地方欢迎指正,之后会持续更新