赞
踩
欢迎Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。
均方误差(MSE,Mean Squared Error)是回归问题中评估预测误差的一种广泛使用的指标。在回归中,目标是预测连续值,例如根据房屋的特征(如面积、位置、卧室数量等)估计房屋的价格。
计算从计算模型预测( A A A)与实际真值( Y Y Y)之间的平方误差( S E SE SE)开始:
S E ( A , Y ) = ( A − Y ) ⊙ ( A − Y ) SE(A, Y) = (A - Y) \odot (A - Y) SE(A,Y)=(A−Y)⊙(A−Y)
接下来,我们确定平方误差之和( S S E SSE SSE)。这里, ι N \iota_N ιN 和 ι C \iota_C ιC 分别表示大小为 N N N 和 C C C 的、填充有 1 的列向量:
S S E ( A , Y ) = ι N T ⋅ S E ( A , Y ) ⋅ ι C SSE(A,Y) = \iota_{N}^{T} \cdot SE(A,Y) \cdot \iota_{C} SSE(A,Y)=ιNT⋅SE(A,Y)⋅ιC
这个操作将 S E ( A , Y ) SE(A, Y) SE(A,Y) 矩阵中的所有元素求和,该矩阵的维度为 N × C N \times C N×C。通过 ι N T \iota_{N}^{T} ιNT 的乘法在行间聚合错误,随后通过 ι C \iota_{C} ιC 的乘法将这些在列间求和,产生一个单一标量的总误差。
然后计算每个组件的均方误差( M S E MSE MSE)损失:
M S E L o s s ( A , Y ) = S S E ( A , Y ) N ⋅ C MSELoss(A, Y) = \frac{SSE(A, Y)}{N \cdot C} MSELoss(A,Y)=N⋅CSSE(A,Y)
在反向传播过程中,需要计算 MSE 损失相对于模型输出( A A A)的梯度,以更新模型参数:
M S E L o s s . b a c k w a r d ( ) = 2 ⋅ ( A − Y ) N ⋅ C MSELoss.backward() = 2 \cdot \frac{(A - Y)}{N \cdot C} MSELoss.backward()=2⋅N⋅C(A−Y)
MSE 损失函数定义为:
M S E L o s s ( A , Y ) = 1 N ⋅ C ∑ i = 1 N ∑ j = 1 C ( A i j − Y i j ) 2 MSELoss(A, Y) = \frac{1}{N \cdot C} \sum\limits_{i=1}^{N} \sum\limits_{j=1}^{C} (A_{ij} - Y_{ij})^2 MSELoss(A,Y)=N⋅C1i=1∑Nj=1∑C(Aij−Yij)2
其中:
A A A:模型预测值。
Y Y Y:真实值。
N N N:批次中的样本数量。
C C C:每个样本的输出维度,回归任务中通常为 1。
为了更新模型参数(在这个例子中,通过反向传播),我们需要知道 A A A 的变化如何影响损失。这由损失函数相对于 A A A 的导数给出,表示为 ∂ M S E L o s s ∂ A \frac{\partial MSELoss}{\partial A} ∂A∂MSELoss。
∂ M S E L o s s ∂ A = 2 ⋅ ( A − Y ) N ⋅ C \frac{\partial MSELoss}{\partial A} = 2 \cdot \frac{(A - Y)}{N \cdot C} ∂A∂MSELoss=2⋅N⋅C(A−Y)
梯度 ∂ M S E L o s s ∂ A \frac{\partial MSELoss}{\partial A} ∂A∂MSELoss 指向损失函数最陡增加的方向。通过向相反方向移动(即,从预测 A A A 中减去这个梯度),我们可以减少损失,这是训练模型的目标。
总之, M S E L o s s . b a c k w a r d ( ) MSELoss.backward() MSELoss.backward() 的 2 ⋅ ( A − Y ) N ⋅ C 2 \cdot \frac{(A - Y)}{N \cdot C} 2⋅N⋅C(A−Y) 公式是通过对预测 A A A 求 MSE 损失函数的导数得到的,考虑了平方误差和平均操作。这个梯度在优化过程中被用来调整模型参数,以最小化损失。
import numpy as np class MSELoss: def forward(self, A, Y): # 为反向计算存储预测值(A)和真实值(Y) self.A = A self.Y = Y # 计算预测值和真实值之间的平方误差 se = (A - Y) ** 2 # 对平方误差求和以得到总的平方误差 sse = np.sum(se) # 通过将总的平方误差除以元素数量来计算均方误差 mse = sse / (A.shape[0] * A.shape[1]) return mse def backward(self): # 计算损失相对于预测值(A)的梯度 dLdA = 2 * (self.A - self.Y) / (self.A.shape[0] * self.A.shape[1]) return dLdA
让我们通过一个具体的例子来了解在回归场景中如何应用均方误差(MSE)损失。假设我们正试图基于一些特征来预测房屋价格。为了简单起见,我们将考虑一个案例,其中我们的模型基于多个特征(例如平方英尺面积和卧室数量)来预测两栋房屋的价格,因此我们的批量大小 N N N 为 2,特征数量 C C C 也为 2。
A
=
[
300
,
000
3
500
,
000
4
]
A =
这里,第一列代表两栋房屋的预测价格,第二列代表预测的卧室数量。
Y
=
[
350
,
000
4
450
,
000
3
]
Y =
S
E
(
A
,
Y
)
=
(
A
−
Y
)
⊙
(
A
−
Y
)
=
[
(
300
,
000
−
350
,
000
)
2
(
3
−
4
)
2
(
500
,
000
−
450
,
000
)
2
(
4
−
3
)
2
]
=
[
2500
×
1
0
6
1
2500
×
1
0
6
1
]
S S E ( A , Y ) = ∑ S E ( A , Y ) = 2 × ( 2500 × 1 0 6 ) + 2 × 1 = 5000 × 1 0 6 + 2 SSE(A, Y) = \sum SE(A, Y) = 2 \times (2500 \times 10^6) + 2 \times 1 = 5000 \times 10^6 + 2 SSE(A,Y)=∑SE(A,Y)=2×(2500×106)+2×1=5000×106+2
M S E L o s s ( A , Y ) = S S E ( A , Y ) N ⋅ C = 5000 × 1 0 6 + 2 2 × 2 = 2500 × 1 0 6 + 1 2 MSELoss(A, Y) = \frac{SSE(A, Y)}{N \cdot C} = \frac{5000 \times 10^6 + 2}{2 \times 2} = \frac{2500 \times 10^6 + 1}{2} MSELoss(A,Y)=N⋅CSSE(A,Y)=2×25000×106+2=22500×106+1
可以计算损失相对于预测值 ( A A A) 的梯度:
∂
M
S
E
L
o
s
s
∂
A
=
2
⋅
(
A
−
Y
)
N
⋅
C
=
2
⋅
[
300
,
000
−
350
,
000
3
−
4
500
,
000
−
450
,
000
4
−
3
]
2
×
2
=
1
2
[
−
50
,
000
−
1
50
,
000
1
]
这个梯度矩阵提供了如何调整每个预测(价格和卧室数量)以最小化损失的指导。负值表示需要增加预测值,正值表明需要减少预测值以减少误差。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。