欢迎Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。
均方误差损失
均方误差(MSE,Mean Squared Error)是回归问题中评估预测误差的一种广泛使用的指标。在回归中,目标是预测连续值,例如根据房屋的特征(如面积、位置、卧室数量等)估计房屋的价格。
MSE 损失前向方程
计算从计算模型预测( 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 损失反向方程
在反向传播过程中,需要计算 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 损失的导数
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 A A):预测的两栋房屋的价格和卧室数量。假设模型对每栋房屋的预测如下(价格以美元计,卧室以数量计)。这可以表示为一个 2×2 矩阵(因为 N = 2 N=2 N=2 且 C = 2 C=2 C=2):
A = [ 300 , 000 3 500 , 000 4 ] A = \begin{bmatrix} 300,000 & 3 \\ 500,000 & 4 \end{bmatrix} A=[300,000500,00034]
这里,第一列代表两栋房屋的预测价格,第二列代表预测的卧室数量。
- 真实值 ( Y Y Y):两栋房屋的实际价格和卧室数量。这也是一个 2×2 矩阵:
Y = [ 350 , 000 4 450 , 000 3 ] Y = \begin{bmatrix} 350,000 & 4 \\ 450,000 & 3 \end{bmatrix} Y=[350,000450,00043]
正向传播(计算 MSE 损失):
- 计算平方误差 ( S E SE SE):
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 ] \begin{align} SE(A, Y) &= (A – Y) \odot (A – Y) \\ &= \begin{bmatrix} (300,000 – 350,000)^2 & (3 – 4)^2 \\ (500,000 – 450,000)^2 & (4 – 3)^2 \end{bmatrix} \\ &= \begin{bmatrix} 2500 \times 10^6 & 1 \\ 2500 \times 10^6 & 1 \end{bmatrix} \end{align} SE(A,Y)=(A−Y)⊙(A−Y)=[(300,000−350,000)2(500,000−450,000)2(3−4)2(4−3)2]=[2500×1062500×10611]
- 平方误差之和 ( S S E SSE SSE):
将 S E SE SE 中的所有元素相加:
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 MSE MSE):
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 ] \begin{align} \frac{\partial MSELoss}{\partial A} &= 2 \cdot \frac{(A – Y)}{N \cdot C} \\ &= 2 \cdot \frac{\begin{bmatrix} 300,000 – 350,000 & 3 – 4 \\ 500,000 – 450,000 & 4 – 3 \end{bmatrix}}{2 \times 2} \\ &= \frac{1}{2} \begin{bmatrix} -50,000 & -1 \\ 50,000 & 1 \end{bmatrix} \end{align} ∂A∂MSELoss=2⋅N⋅C(A−Y)=2⋅2×2[300,000−350,000500,000−450,0003−44−3]=21[−50,00050,000−11]
这个梯度矩阵提供了如何调整每个预测(价格和卧室数量)以最小化损失的指导。负值表示需要增加预测值,正值表明需要减少预测值以减少误差。
参考:
- CMU_11785_深度学习导论
今天的文章深度学习笔记:详解MSE Loss均方误差损失函数[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/79987.html