损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。
损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。
一、分类问题
1. 0-1损失函数(zero-one loss)
0-1损失是指预测值和目标值不相等为1, 否则为0:
L
(
Y
,
f
(
X
)
)
=
{
1
,
Y
≠
f
(
X
)
0
,
Y
=
f
(
X
)
L(Y, f(X))=\left\{\begin{array}{l} 1, Y \neq f(X) \\ 0, Y=f(X) \end{array}\right.
L(Y,f(X))={1,Y?=f(X)0,Y=f(X)? 特点:
- 0-1损失函数直接对应分类判断错误的个数,但是它是一个非凸函数,不太适用.
- 感知机就是用的这种损失函数。但是相等这个条件太过严格,因此可以放宽条件,即满足
∣
Y
?
f
(
x
)
∣
<
T
|Y-f(x)|<T
∣Y?f(x)∣<T时认为相等,
L
(
Y
,
f
(
X
)
)
=
{
1
,
∣
Y
?
f
(
X
)
∣
≥
T
0
,
∣
Y
=
f
(
X
)
∣
<
T
L(Y, f(X))=\left\{\begin{array}{l} 1,|Y-f(X)| \geq T \\ 0,|Y=f(X)|<T \end{array}\right.
L(Y,f(X))={1,∣Y?f(X)∣≥T0,∣Y=f(X)∣<T?
2. Hinge 损失函数
Hinge损失函数标准形式如下:
L
(
y
,
f
(
x
)
)
=
max
?
(
0
,
1
?
y
f
(
x
)
)
L(y, f(x))=\max (0,1-y f(x))
L(y,f(x))=max(0,1?yf(x)) 特点:
- hinge损失函数表示如果被分类正确,损失为0,否则损失就为
1
?
y
f
(
x
)
1-y f(x)
1?yf(x) 。SVM就是使用这个损失函数。
- 一般的
f
(
x
)
f(x)
f(x)是预测值,在-1到1之间,
y
y
y是目标值(-1或1)。其含义是,
f
(
x
)
f(x)
f(x)的值在-1和+1之间就可以了,并不鼓励
∣
f
(
x
)
∣
>
1
|f(x)|>1
∣f(x)∣>1 ,即并不鼓励分类器过度自信,让某个正确分类的样本距离分割线超过1并不会有任何奖励,从而使分类器可以更专注于整体的误差。
- 健壮性相对较高,对异常点、噪声不敏感,但它没太好的概率解释。
3. log对数损失函数
log对数损失函数的标准形式如下:
L
(
Y
,
P
(
Y
∣
X
)
)
=
?
log
?
P
(
Y
∣
X
)
L(Y, P(Y \mid X))=-\log P(Y \mid X)
L(Y,P(Y∣X))=?logP(Y∣X) 特点:
- log对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合。
- 健壮性不强,相比于hinge loss对噪声更敏感。
- 逻辑回归的损失函数就是log对数损失函数。
4. Logistic损失
Logistic损失标准形式如下:
L
(
y
,
f
(
x
)
)
=
log
?
2
(
1
+
e
?
y
f
(
x
)
)
L(y, f(x))=\log_2 (1+e^{-yf(x)})
L(y,f(x))=log2?(1+e?yf(x)) 特点:
- 该函数处处光滑,可使用梯度下降法优化
- 但该函数对所有样本点都有惩罚,因此对异常值相对敏感。
5. 交叉熵损失函数 (Cross-entropy loss function)
交叉熵损失函数的标准形式如下:
L
(
y
,
f
(
x
)
)
=
?
1
n
∑
x
[
y
ln
?
f
(
x
)
+
(
1
?
y
)
ln
?
(
1
?
f
(
x
)
)
]
L(y, f(x))=-\frac{1}{n} \sum_{x}[y \ln f(x)+(1-y) \ln (1-f(x))]
L(y,f(x))=?n1?x∑?[ylnf(x)+(1?y)ln(1?f(x))] 特点:
- 本质上也是一种对数似然函数,可用于二分类和多分类任务中。对数损失函数和交叉熵损失函数应该是等价的。
二分类问题中的loss函数如上(输入数据是softmax或者sigmoid函数的输出) 多分类问题中的loss函数如下(输入数据是softmax或者sigmoid函数的输出):
?loss?
=
?
1
n
∑
i
y
i
ln
?
a
i
\text { loss }=-\frac{1}{n} \sum_{i} y_{i} \ln a_{i}
?loss?=?n1?i∑?yi?lnai? - 当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数,因为它可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。
二、回归问题
1. 绝对值损失函数
绝对值损失函数是计算预测值与目标值的差的绝对值:
L
(
Y
,
f
(
x
)
)
=
∣
Y
?
f
(
x
)
∣
L(Y, f(x))=|Y-f(x)|
L(Y,f(x))=∣Y?f(x)∣ 特点:
- 绝对值损失相当于做中值回归,相比SE对异常点更鲁棒一些。
- 但在
f
=
y
f=y
f=y处无法求导
2. 平方损失函数
平方损失函数标准形式如下:
L
(
Y
∣
f
(
X
)
)
=
∑
N
(
Y
?
f
(
X
)
)
2
L(Y \mid f(X))=\sum_{N}(Y-f(X))^{2}
L(Y∣f(X))=N∑?(Y?f(X))2 特点:
- 最常用的回归损失函数,函数光滑,可以使用梯度下降法优化,预测值与真实值越远惩罚越大,因此对异常点敏感。
3. Huber损失
Huber损失标准形式如下:
f
(
x
)
=
{
(
Y
?
f
(
X
)
)
2
,
∣
Y
?
f
(
X
)
∣
≤
δ
2
δ
∣
Y
?
f
(
X
)
∣
?
δ
2
,
∣
Y
?
f
(
X
)
∣
>
δ
f(x)=\left\{ \begin{aligned} &(Y-f(X))^{2}, &|Y-f(X)| \leq\delta\\ &2\delta|Y-f(X)|-\delta^2, &|Y-f(X)| > \delta \end{aligned} \right.
f(x)={?(Y?f(X))2,2δ∣Y?f(X)∣?δ2,?∣Y?f(X)∣≤δ∣Y?f(X)∣>δ? 特点:
- 兼具平方损失的处处可导性,绝对值损失的异常点鲁棒性。
三、常见问题
1. 交叉熵函数与最大似然函数的联系和区别?
区别:交叉熵函数使用来描述模型预测值和真实值的差距大小,越大代表越不相近;似然函数的本质就是衡量在某个参数下,整体的估计和真实的情况一样的概率,越大代表越相近。
联系:交叉熵函数可以由最大似然函数在伯努利分布的条件下推导出来,或者说最小化交叉熵函数的本质就是对数似然函数的最大化。
2. 在用sigmoid作为激活函数的时候,为什么要用交叉熵损失函数,而不用均方误差损失函数?
分析一下两个误差函数的参数更新过程就会发现原因了。 对于均方误差损失函数,更新参数
w
w
w 和
b
b
b :
w
=
w
?
η
?
L
o
s
s
?
w
=
w
?
η
(
f
(
x
)
?
y
)
σ
′
(
z
)
x
b
=
b
?
η
?
L
o
s
s
?
b
=
b
?
η
(
f
(
x
)
?
y
)
σ
′
(
z
)
\begin{gathered} w=w-\eta \frac{\partial Loss}{\partial w}=w-\eta(f(x)-y) \sigma^{\prime}(z) x \\ b=b-\eta \frac{\partial Loss}{\partial b}=b-\eta(f(x)-y) \sigma^{\prime}(z) \end{gathered}
w=w?η?w?Loss?=w?η(f(x)?y)σ′(z)xb=b?η?b?Loss?=b?η(f(x)?y)σ′(z)? 其中
z
=
w
x
+
b
z=wx+b
z=wx+b,因为sigmoid的性质,导致
σ
′
(
z
)
\sigma^{\prime}(z)
σ′(z)在
z
z
z取大部分值时会很小(如下图标出来的两端,几乎接近于平坦),这样会使得
η
(
f
(
x
)
?
y
)
σ
′
(
z
)
\eta(f(x)-y) \sigma^{\prime}(z)
η(f(x)?y)σ′(z)很小,导致参数
w
w
w和
b
b
b更新非常慢。
对于交叉熵损失函数,参数更新公式为:
w
=
w
?
η
?
L
o
s
s
?
w
=
w
?
η
(
f
(
x
)
?
y
)
x
b
=
b
?
η
?
L
o
s
s
?
b
=
b
?
η
(
f
(
x
)
?
y
)
\begin{gathered} w=w-\eta \frac{\partial Loss}{\partial w}=w-\eta(f(x)-y) x \\ b=b-\eta \frac{\partial Loss}{\partial b}=b-\eta(f(x)-y) \end{gathered}
w=w?η?w?Loss?=w?η(f(x)?y)xb=b?η?b?Loss?=b?η(f(x)?y)? 可以看到参数更新公式中没有
σ
′
(
z
)
\sigma^{\prime}(z)
σ′(z)这一项,权重的更新受
(
f
(
x
)
?
y
)
(f(x)-y)
(f(x)?y)影响,受到误差的影响,所以当误差大的时候,权重更新快;当误差小的时候,权重更新慢。这是一个很好的性质。 所以当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数。
参考文章:常见的损失函数(loss function)总结
|