分类问题使用的损失函数为:交叉熵
回归问题使用的损失函数为:MSE
今天被人问到为什么分类问题不能使用MSE,突然不知道怎么回答了,之前也没考虑过这个问题,只是知道这么去使用。下面是查了一些资料,以及推导了一点公式,试图将这个问题讲明白。
首先,对于分类问题,网络输出的是属于某个类的概率。二分类就输出一个值,属于该类就是这个值,不属于这类就等于1-该值。多分类问题(比如n个类别),就是得到n个概率值。
这就要求使用激活函数对最后一层进行处理,二分类使用sigmoid,多分类就使用softmax,这两个函数本质上是等价的。
假设模型的预测结果为 y ^ \hat y y^,真实的结果为 y y y:
如果是MSE激活函数: L o s s = 1 2 n ∑ i = 1 n ( y i − y ^ i ) 2 Loss=\frac{1}{2n}\sum_{i=1}^{n}(y_i-\hat y_i)^2 Loss=2n1∑i=1n(yi−y^i)2, n表示类别数
如果是交叉熵函数: L o s s = − ∑ i = 1 n y i log ( y i ^ ) Loss=-\sum_{i=1}^{n}y_i\log(\hat{y_i}) Loss=−∑i=1nyilog(yi^), n表示类别数
以二分类sigmoid为例:
模型的输出为:
y
^
∈
(
0
,
1
)
\hat y\in(0,1)
y^∈(0,1)
标签为
y
=
1
y=1
y=1
我们知道,sigmoid求导为: y ^ ( 1 − y ^ ) \hat{y}(1-\hat{y}) y^(1−y^)
MSE激活函数:
L
o
s
s
=
1
2
(
y
−
y
^
)
2
Loss=\frac{1}{2}(y-\hat y)^2
Loss=21(y−y^)2
∂
L
o
s
s
∂
θ
=
(
y
−
y
^
)
y
^
(
y
−
y
^
)
∂
o
u
t
p
u
t
∂
θ
=
(
1
−
y
^
)
y
^
(
1
−
y
^
)
∂
o
u
t
p
u
t
∂
θ
\frac{\partial Loss}{\partial \theta}=(y-\hat{y})\hat{y}(y-\hat{y})\frac{\partial output}{\partial \theta}=(1-\hat{y})\hat{y}(1-\hat{y})\frac{\partial output}{\partial \theta}
∂θ∂Loss=(y−y^)y^(y−y^)∂θ∂output=(1−y^)y^(1−y^)∂θ∂output
交叉熵函数:
L
o
s
s
=
−
y
log
(
y
^
)
Loss=-y\log(\hat{y})
Loss=−ylog(y^)
∂
L
o
s
s
∂
θ
=
−
y
1
y
^
y
^
(
y
−
y
^
)
∂
o
u
t
p
u
t
∂
θ
=
−
y
(
y
−
y
^
)
∂
o
u
t
p
u
t
∂
θ
=
−
(
1
−
y
^
)
∂
o
u
t
p
u
t
∂
θ
\frac{\partial Loss}{\partial \theta}=-y\frac{1}{\hat{y}}\hat{y}(y-\hat{y})\frac{\partial output}{\partial \theta}=-y(y-\hat{y})\frac{\partial output}{\partial \theta}=-(1-\hat{y})\frac{\partial output}{\partial \theta}
∂θ∂Loss=−yy^1y^(y−y^)∂θ∂output=−y(y−y^)∂θ∂output=−(1−y^)∂θ∂output
因此,在使用MSE时,梯度是
y
^
\hat{y}
y^的三次表达式,如果
y
^
\hat y
y^被错误的预测,也就是等于0,那么梯度也是0,不会被优化,显然是不对的。
而使用交叉熵,梯度是
y
^
\hat y
y^的线性表达(正好被消掉了),如果
y
^
\hat y
y^被错误的预测,也就是等于0,那么梯度是有值的,会被正常优化。
那么,回归问题能否使用交叉熵呢?
也是可以的,但是更多的是将回归问题转变为分类问题(离散化),然后使用交叉熵损失函数
以上是公式的推导,说明了MSE用在分类问题上不能优化网络参数(因为梯度会为0,梯度消失)
MSE应用在分类上,还存在一个问题,会导致正确分类变大的同时,错误分类也变得平均,比如三分类问题,预测结果为(a,b,c),真实结果为(1,0,0),loss函数的值为: ( a − 1 ) 2 + b 2 + c 2 (a-1)^2+b^2+c^2 (a−1)2+b2+c2,因此,只有在a被正确预测(a=1),且b和c都是相同值时,loss最小。
从本质上讲,交叉熵衡量的是同一个随机变量中的两个不同概率分布的差异程度,在机器学习中就表示为真实概率分布和预测概率分布之间的差异,所以交叉熵本质是概率问题,和几何上的欧式距离无关,在回归问题中才有欧式距离的说法。
而MSE衡量预测值与实际值之间的差距,更适合回归问题。
从优化角度上讲,MSE+sigmoid得到的损失函数是非凸函数,有多个极值点,不适合做损失函数。
参考:
https://blog.csdn.net/u013385018/article/details/115355701