文章目录
回归模型的损失函数
L1正则损失函数(即绝对值损失函数)
平均绝对误差损失(Mean Absolute Error Loss),也称为 L1 Loss。是对预测值与目标值的差值求绝对值,其基本形式如下:
L
(
Y
,
f
(
X
)
)
=
∣
Y
−
f
(
X
)
∣
L(Y,f(X))=\left | Y-f(X) \right |
L(Y,f(X))=∣Y−f(X)∣
缺点:L1正则损失函数在目标值附近不平滑,会导致模型不能很好地收敛。
我们可以对这个损失函数进行可视化如下图,MAE 损失的最小值为 0(当预测等于真实值时),最大值为无穷大。可以看到随着预测与真实值绝对误差
y
−
f
(
X
)
y-f(X)
y−f(X) 的增加,MAE 损失呈线性增长。
背后的假设
我们是在一定的假设下通过最大化似然得到 MAE 损失的形式,假设模型预测与真实值之间的误差服从拉普拉斯分布 Laplace distribution(
μ
=
0
,
b
=
1
\mu=0,b=1
μ=0,b=1)。
L2正则损失函数(即欧拉损失函数)
均方差损失(Mean Squared Error Loss MSE) 损失是机器学习、深度学习回归任务中最常用的一种损失函数,也称为 L2 Loss。
L2正则损失函数是预测值与目标值差值的平方和,公式如下:
L
(
Y
,
f
(
X
)
)
=
∑
i
=
1
n
(
Y
−
f
(
X
)
)
2
L(Y,f(X))= \sum_{i=1}^{n} (Y-f(X))^{2}
L(Y,f(X))=i=1∑n(Y−f(X))2
当对L2取平均值,就变成均方误差(MSE, mean squared error),公式如下:
M
S
E
(
Y
,
f
(
X
)
)
=
1
n
∑
i
=
1
n
(
Y
−
f
(
X
)
)
2
MSE(Y,f(X))= \frac{1}{n}\sum_{i=1}^{n} (Y-f(X))^{2}
MSE(Y,f(X))=n1i=1∑n(Y−f(X))2
优点:L2正则损失函数在目标值附近有很好的曲度,离目标越近收敛越慢,是非常有用的损失函数。
L1、L2正则损失函数如下图所示:
背后的假设
实际上在一定的假设下,我们可以使用最大化似然得到均方差损失的形式。假设模型预测与真实值之间的误差服从标准高斯分布(
μ
=
0
,
σ
=
1
\mu=0,\sigma=1
μ=0,σ=1 )。
Pseudo-Huber 损失函数
Huber损失函数经常用于回归问题,它是分段函数,公式如下:
从这个公式可以看出当残差(预测值与目标值的差值,即y-f(x) )很小的时候,损失函数为L2范数,残差大的时候,为L1范数的线性函数。该公式依赖于参数delta,delta越大,则两边的线性部分越陡峭。
L1、L2、Huber损失函数的对比图如下,其中Huber的delta取0.25、5两个值:
分类模型的损失函数
Hinge损失函数
又名折页损失函数、铰链损失函数。Hinge损失常用于二分类问题,主要用来评估向量机算法(SVM),但有时也用来评估神经网络算法,公式如下:
L
(
y
)
=
m
a
x
(
0
,
1
−
t
⋅
y
)
L(y)=max(0,1-t\cdot y)
L(y)=max(0,1−t⋅y)
上面的代码中,目标值为1,当预测值离1越近,则损失函数越小,如下图:
两类交叉熵(Cross-entropy)损失函数
交叉熵来自于信息论,是分类问题中使用广泛的损失函数。交叉熵刻画了两个概率分布之间的距离,当两个概率分布越接近时,它们的交叉熵也就越小,给定两个概率分布p和q,则距离如下:
H
(
p
,
q
)
=
−
∑
x
p
(
x
)
l
o
g
(
x
)
H(p,q)=-\sum_{x}p(x)log(x)
H(p,q)=−x∑p(x)log(x)
对于两类问题,当一个概率p=y,则另一个概率q=1-y,因此代入化简后的公式如下:
H
(
p
,
q
)
=
−
∑
i
p
(
i
)
l
o
g
q
(
i
)
=
−
y
l
o
g
y
^
−
(
1
−
y
)
l
o
g
(
1
−
y
^
)
H(p,q)=-\sum_{i}p(i)logq(i)=-ylog\widehat{y}-(1-y)log(1-\widehat{y})
H(p,q)=−i∑p(i)logq(i)=−ylogy
−(1−y)log(1−y
)
Cross-entropy损失函数主要应用在二分类问题上,预测值为概率值,取值范围为[0,1],损失函数图如下:
加权交叉熵损失函数
加权交叉熵损失函数是Sigmoid交叉熵损失函数的加权。
Sigmoid交叉熵损失函数
与上面的两类交叉熵类似,只是将预测值y_pred值通过sigmoid函数进行转换,再计算交叉熵损失。由于sigmoid函数会将输入值变小很多,从而平滑了预测值,使得sigmoid交叉熵在预测值离目标值比较远时,其损失的增长没有那么的陡峭。与两类交叉熵的比较图如下:
Softmax交叉熵损失函数
在Logistic regression二分类问题中,我们可以使用sigmoid函数将输入映射到区间中,从而得到属于某个类别的概率。将这个问题进行泛化,推广到多分类问题中,我们可以使用softmax函数,对输出的值归一化为概率值。通过softmax函数将输出结果转化成概率分布,从而便于输入到交叉熵里面进行计算(交叉熵要求输入为概率),softmax定义如下:
y
′
=
s
o
f
t
m
a
x
(
y
i
)
=
e
y
i
∑
j
=
1
n
e
y
i
{y}'=softmax(y_{i})=\frac{e^{y_{i}}}{\sum_{j=1}^{n}e^{y_{i}}}
y′=softmax(yi)=∑j=1neyieyi
以上可以看出:
∑
y
′
=
1
\sum {y}'=1
∑y′=1,这也是为什么softmax层的每个节点的输出值成为了概率和为1的概率分布。
交叉熵描述了两个概率分布之间的距离,当交叉熵越小说明二者之间越接近。尽管交叉熵刻画的是两个概率分布之间的距离,但是神经网络的输出却不一定是一个概率分布。为此我们常常用Softmax回归将神经网络前向传播得到的结果变成概率分布。
Softmax+交叉熵也被称为Softmax损失函数,它表达式为:
H
(
P
,
T
)
=
−
∑
1
C
P
l
o
g
(
T
)
H(P,T)=-\sum_{1}^{C}Plog(T)
H(P,T)=−1∑CPlog(T)
其中,P为样本的期望输出,它是一个one-hot编码形式。T为样本的实际输出,其中
T
=
[
s
o
f
t
m
a
x
(
y
1
)
,
s
o
f
t
m
a
x
(
y
2
)
,
.
.
.
,
s
o
f
t
m
a
x
(
y
i
=
n
)
]
T=[softmax(y_{1}),softmax(y_{2}),...,softmax(y_{i=n})]
T=[softmax(y1),softmax(y2),...,softmax(yi=n)]。这里P和T是一个长度与类别数相同的集合。
图见《百面机器学习》P143
参考:https://blog.csdn.net/xg123321123/article/details/80781611
为什么逻辑回归不用mse,为什么分类就不能有mse
角度1—梯度角度解释:
其中fw,b代表的是我们的训练模型,根据上面的梯度更新公式可知,当预测值趋于0或者趋于1,也就是预测越来越准的情况下,梯度会趋于消失,即梯度消失问题,这样模型很难收敛。
角度二——凸or不凸:
当我们使用mse作为逻辑回归的损失函数的时候推导出来的损失函数是一个非凸函数,我们无法使用梯度下降法这类凸优化的方法来求解一个非凸函数的最优值,如果一定要使用凸优化的方法去解决非凸函数优化问题则会很容易陷入局部最优值。
https://zhuanlan.zhihu.com/p/70127314
总结:
损失 | 凸函数 | 光滑 | ||
---|---|---|---|---|
绝对值损失 | 非凸 | 非光滑 | 回归 | |
欧拉损失 | 凸 | 光滑 | 回归 | |
Pseudo-Huber 损失 | 回归 | |||
Logistic损失 | 回归 | |||
Hinge损失 | 非光滑 | 分类 | ||
0-1损失 | 非凸 | 非光滑 | 分类 | |
两类交叉熵损失 | 分类 | |||
Sigmoid交叉熵损失 | 分类 | |||
Softmax交叉熵损失 | 分类 |
在实际使用中,对于回归问题经常会使用MSE均方误差(L2取平均)计算损失,对于分类问题经常会使用Sigmoid交叉熵损失函数。
参考:
https://my.oschina.net/u/876354/blog/1940819
https://blog.csdn.net/lilong117194/article/details/81542667
https://blog.csdn.net/chaipp0607/article/details/73392175
https://zhuanlan.zhihu.com/p/70127314
https://zhuanlan.zhihu.com/p/77686118
回归损失函数的选取:平法差适合高斯分布的数据,绝对值适合拉普拉斯分布的数据。