均方误差损失(MSE loss)—最常用的回归(Regression)损失

均方误差损失(MSE loss)—最常用的回归(Regression)损失

什么是均方误差损失?

假设我们有真实值:

y _ true = y = [ y 1 y 2 y 3 ] y\_\text{true}=y=\begin{bmatrix}y_1\\y_2\\y_3\end{bmatrix} y_true=y= y1y2y3

和预测值:

y _ pred = y ^ = [ y 1 ^ y 2 ^ y 3 ^ ] y\_\text{pred}=\widehat{y}=\begin{bmatrix}\widehat{y_1}\\\widehat{y_2}\\\widehat{y_3}\end{bmatrix} y_pred=y = y1 y2 y3

均方误差(Mean Square Error)损失可以写为:

M S E = 1 N ∑ i = 1 i = N ( y _ true i − y _ pred i ) 2 M S E = 1 N ∑ i = 1 i = N ( y i − y i ^ ) 2    ⟹    M S E = 1 3 [ ( y 1 − y 1 ^ ) 2 + ( y 2 − y 2 ^ ) 2 + ( y 3 − y 3 ^ ) 2 ] \begin{aligned}MSE&=\frac{1}{N}\sum_{i=1}^{i=N}{(y\_\text{true}_i-y\_\text{pred}_i)^2}\\MSE&=\frac{1}{N}\sum_{i=1}^{i=N}{(y_i-\widehat{y_i})^2}\\\implies MSE&=\frac{1}{3}[(y_1-\widehat{y_1})^2+(y_2-\widehat{y_2})^2+(y_3-\widehat{y_3})^2]\end{aligned} MSEMSEMSE=N1i=1i=N(y_trueiy_predi)2=N1i=1i=N(yiyi )2=31[(y1y1 )2+(y2y2 )2+(y3y3 )2]

Python中,利用Numpy,均方误差损失可以写为:

import numpy as np
np.random.seed(2001716)

# defining MSE
def mse(y_true, y_pred):
    return np.mean((y_true - y_pred) ** 2)

如何计算MSE的梯度?

真实值 y _ true y\_\text{true} y_true固定,MSE的值与 y _ pred y\_\text{pred} y_pred有关,也即与 ( y 1 ^ , y 2 ^ , y 3 ^ ) (\widehat{y_1},\widehat{y_2},\widehat{y_3}) (y1 ,y2 ,y3 )有关。

M S E = f ( y 1 ^ , y 2 ^ , y 3 ^ ) MSE = f(\widehat{y_1},\widehat{y_2},\widehat{y_3}) MSE=f(y1 ,y2 ,y3 )

MSEJacobian矩阵(函数的一阶偏导数以一定方式排列而成的矩阵)为:

J = ∂ ( M S E ) ( y 1 ^ , y 2 ^ , y 3 ^ ) = [ ∂ ( M S E ) ∂ ( y 1 ^ ) ∂ ( M S E ) ∂ ( y 2 ^ ) ∂ ( M S E ) ∂ ( y 3 ^ ) ] J=\frac{\partial(MSE)}{(\widehat{y_1},\widehat{y_2},\widehat{y_3})}=\begin{bmatrix}\frac{\partial(MSE)}{\partial(\widehat{y_1})}\\\\\frac{\partial(MSE)}{\partial(\widehat{y_2})}\\\\\frac{\partial(MSE)}{\partial(\widehat{y_3})}\end{bmatrix} J=(y1 ,y2 ,y3 )(MSE)= (y1 )(MSE)(y2 )(MSE)(y3 )(MSE)

分别计算Jacobian矩阵中的每一个元素得到:

⟹ J = [ − 2 ( y 1 − y 1 ^ ) 3 − 2 ( y 2 − y 2 ^ ) 3 − 2 ( y 3 − y 3 ^ ) 3 ]    ⟹    J = − 2 3 ( [ y 1 − y 1 ^ y 2 − y 2 ^ y 3 − y 3 ^ ] )    ⟹    J = − 2 3 ( [ y 1 y 2 y 3 ] − [ y 1 ^ y 2 ^ y 3 ^ ] )    ⟹    J = − 2 3 ( y _ true − y _ pred ) \begin{aligned} &\Longrightarrow J=\begin{bmatrix}\frac{-2(y_{1}-\widehat{y_{1}})}{3}\\\\\frac{-2(y_{2}-\widehat{y_{2}})}{3}\\\\\frac{-2(y_{3}-\widehat{y_{3}})}{3}\end{bmatrix} \\ &\implies J=-\frac23(\begin{bmatrix}y_1-\widehat{y_1}\\\\y_2-\widehat{y_2}\\\\y_3-\widehat{y_3}\end{bmatrix}) \\ &\implies J=-\frac23(\begin{bmatrix}y_1\\\\y_2\\\\y_3\end{bmatrix}-\begin{bmatrix}\widehat{y_1}\\\\\widehat{y_2}\\\\\widehat{y_3}\end{bmatrix}) \\ &\implies J=-\frac{2}{3}(y\_\text{true}-y\_\text{pred}) \end{aligned} J= 32(y1y1 )32(y2y2 )32(y3y3 ) J=32( y1y1 y2y2 y3y3 )J=32( y1y2y3 y1 y2 y3 )J=32(y_truey_pred)

其中,‘3’代表 y _ true y\_\text{true} y_true y _ pred y\_\text{pred} y_pred中标量元素的个数。

Python中,利用Numpy,均方误差损失的Jacobian矩阵可以写为:

# defining MSE gradients

def mse_grad(y_true, y_pred):
    N = y_true.shape[0]
    return -2 * (y_true - y_pred) / N

MSE的优缺点

8hp8qg.png

😀优点:MSE由于存在(y_true - y_pred)平方项,能够保证被训练的模型不会产生具有较大误差的预测;同时使用MSE训练的模型收敛速度快

☹️缺点:MSE使得被训练的模型容易受到训练数据中局外点(outliers)的影响,模型的某一个无关紧要的小错误都会被MSE的平方项放大,造成对模型本身严重的影响。在现实应用中,我们不需要关心那些局外点,只需要关心模型在数据集的主要部分上的性能。

MSE loss over.

  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值