问题
线性回归损失函数为什么要用平方形式?
问题背景
这是在阿里一面中遇到的问题,当时我的回答是损失函数是是模型预测值与真实值之间的一种距离度量,我们可以计算出每个样本的预测值与真实值之间的距离,全部加起来就得到了所谓的损失函数。而距离的度量可以采用预测值与真实值之间差的绝对值,或者两者之差的平方,当然更高次的也行,只要你喜欢。正如问题所述,为什么我们一般使用的是两者之差的平方而不是两者只差的绝对值呢?其实这与模型的求解相关,举最简单的线性回归为例,如果采用的距离是两者之差的绝对值,那么求解的目标函数如下:
(
ω
∗
,
b
)
=
a
r
g
m
i
n
(
ω
,
b
)
∑
i
=
1
m
∣
f
(
x
i
)
−
y
i
∣
(\omega^*, b) = arg min_{(\omega, b)}\sum_{i=1}^{m}\left|{f(x_i)-y_i}\right|
(ω∗,b)=argmin(ω,b)i=1∑m∣f(xi)−yi∣
如果采用的距离是两者之差的平方,那么求解的目标函数如下:
(
ω
∗
,
b
)
=
a
r
g
m
i
n
(
ω
,
b
)
∑
i
=
1
m
(
f
(
x
i
)
−
y
i
)
2
(\omega^*, b) = arg min_{(\omega, b)}\sum_{i=1}^{m}({f(x_i)}-y_i)^2
(ω∗,b)=argmin(ω,b)i=1∑m(f(xi)−yi)2
其中:
f
(
x
i
)
=
ω
x
i
+
b
f(x_i) = \omega x_i + b
f(xi)=ωxi+b 即预测值,
y
i
y_i
yi 为真实值,
m
m
m 为样本总数,
ω
\omega
ω 和
b
b
b 为要求解的参数
要求得使以上损失函数最小化对应的那个 ω \omega ω 和 b b b ,可将损失函数对 ω \omega ω 和 b b b 求导,并令导数为0。但是当采取的距离是两者之差的绝对值时,函数在0处不可导,且还增加的一个工作量是需要判断 f ( x i ) − y i f(x_i)-y_i f(xi)−yi 正负号。而采用的距离是两者之差的平方时就没有这方面的问题,所以解决回归问题的时候一般使用平方损失。但理论上两者都可以使用,只是如果用两者之差的绝对值的话,那么需要判断和处理的东西多点,例如人为设定0处的导数为0等等。
但其实这样的回答是不对的,下面给出一个大佬的解答:
问题解答
其实是因为最小化平方误差本质上等同于在误差服从高斯分布的假设下的最大似然估计。(这句话确实不好理解,我也理解不了,就先这么记着吧,说不定啥时候就理解了呢……)
线性回归,简单点来说就是对于训练数据样本
(
x
i
,
y
i
)
(x_i, y_i)
(xi,yi) ,预测值
y
i
^
=
θ
0
+
θ
1
∗
x
i
\hat{y_i} = \theta_0+\theta_1*x_i
yi^=θ0+θ1∗xi ,并构建损失函数:
J
=
∑
i
=
1
n
(
y
i
−
y
i
^
)
2
J = \sum_{i=1}^{n}{(y_i-\hat{y_i})^2}
J=i=1∑n(yi−yi^)2
损失函数表示的是每个训练数据点
(
x
i
,
y
i
)
(x_i, y_i)
(xi,yi) 到拟合直线
y
i
^
=
θ
0
+
θ
1
∗
x
i
\hat{y_i} = \theta_0+\theta_1*x_i
yi^=θ0+θ1∗xi 的竖直距离的平方和,通过最小化这个损失函数来求得拟合直线的最佳参数
θ
\theta
θ 。那么损失函数为什么要用均方误差的形式,而不是绝对值形式,一次方,三次方,或者四次方形式呢?
简单来说,是因为使用平方形式的时候,使用的是“最小二乘法”的思想,这里的二乘指的是平方的形式来度量预测值与真实值之间的距离,“最小”指的是求得的最佳参数 θ \theta θ 要保证预测值与真实值之间距离的平方和最小。
最小二乘法以预测值与真实值距离的平方和作为损失函数,在误差服从正态分布的前提下,与极大似然估计的思想在本质上是相同的(哈哈哈不太理解……)。
我们设真实值与预测值之间的误差为:
ε
i
=
y
i
−
y
i
^
\varepsilon_i = y_i - \hat{y_i}
εi=yi−yi^
我们通常认为误差
ε
\varepsilon
ε 服从标准正态分布
(
μ
=
0
,
σ
2
=
1
)
(\mu = 0, \sigma^2 = 1)
(μ=0,σ2=1) ,即给定一个
x
i
x_i
xi ,模型输出真实值为
y
i
y_i
yi 的概率为:
p
(
y
i
∣
x
i
)
=
1
2
π
∗
e
x
p
(
−
ε
i
2
2
)
p(y_i |x_i) = \frac{1}{\sqrt{2\pi}}*exp(-\frac{\varepsilon_i^2}{2})
p(yi∣xi)=2π1∗exp(−2εi2)
进一步我们假设数据集中N个样本点之间相互独立,则给定所有
x
x
x 输出所有真实值
y
y
y 的概率即似然Likeihood,为所有
p
(
y
i
∣
x
i
)
p(y_i|x_i)
p(yi∣xi) 的累乘:
L
(
x
,
y
)
=
∏
i
=
1
n
1
2
π
∗
e
x
p
[
−
ε
i
2
2
]
L(x,y) = \prod_{i=1}^{n}\frac{1}{\sqrt{2\pi}}*exp[-\frac{\varepsilon_i^2}{2}]
L(x,y)=i=1∏n2π1∗exp[−2εi2]
取对数似然函数得:
l
o
g
[
L
(
x
,
y
)
]
=
−
n
2
l
o
g
2
π
−
1
2
∑
i
=
1
n
ε
i
2
log[L(x,y)] = - \frac{n}{2}log{2\pi}-\frac{1}{2}\sum_{i=1}^{n}\varepsilon_i^2
log[L(x,y)]=−2nlog2π−21i=1∑nεi2
去掉与
y
i
^
\hat{y_i}
yi^ 无关的第一项,然后转化为最小化负对数似然:
n
e
g
_
l
o
g
[
L
(
x
,
y
)
]
=
1
2
∑
i
=
1
n
ε
i
2
=
1
2
∑
i
=
1
n
(
y
i
−
y
i
^
)
2
neg\_log[L(x,y)] = \frac{1}{2}\sum_{i=1}^{n}\varepsilon_i^2=\frac{1}{2}\sum_{i=1}^{n}(y_i-\hat{y_i})^2
neg_log[L(x,y)]=21i=1∑nεi2=21i=1∑n(yi−yi^)2
可以看到这个实际上就是均方差损失的形式。也就是说在模型输出与真实值的误差服从高斯分布的假设下,最小化均方差损失函数与极大似然估计本质上是一致的,因此在这个假设能被满足的场景中(比如回归),均方差损失是一个很好的损失函数选择;当这个假设没能被满足的场景中(比如分类),均方差损失不是一个好的选择,这也解释了为什么在分类问题中不使用均方误差作为损失函数而是使用交叉熵的问题。
当然回答上面下划线部分的问题还可以举的一个例子是:假设有一个样本 [ x 1 ] [x_1] [x1] 的真实标签为 [ 0 , 0 , 1 ] [0,0,1] [0,0,1] ,那么预测得到概率中第三类的概率最大即说明分类正确,例如为 [ 0.2 , 0.2 , 0.6 ] [0.2, 0.2, 0.6] [0.2,0.2,0.6] ,但是平方误差却过于严格,比如当预测结果是 [ 0 , 0.4 , 0.6 ] [0, 0.4, 0.6] [0,0.4,0.6] ,虽然两者在交叉熵上的结果是一样的,但是平方误差中却差别很大。