TensorFlow中均方误差(MSE)两种实现差异的技术疑问
为什么MSE损失函数实现里分母要乘以2?
嘿,这个疑惑特别正常,我来帮你拆解清楚:
首先先明确**标准均方误差(MSE)**的定义:
MSE = (1/N) * Σ(预测值 - 真实值)²
你的cost2完全符合这个公式,所以输出9是正确的标准MSE结果。
那cost里的/(2*num_instances)是干嘛的?其实这是一个简化梯度计算的小技巧:
当我们用梯度下降来优化模型时,需要对损失函数求导。如果损失函数是标准MSE,求导后会出现一个系数2:d(MSE)/d(参数) = (2/N) * Σ(预测值-真实值) * d(预测值)/d(参数)
但如果我们在损失函数里提前除以2,也就是定义损失为:cost = (1/(2N)) * Σ(预测值-真实值)²
此时求导后,平方项的系数2会和分母的2抵消,梯度表达式就变成:d(cost)/d(参数) = (1/N) * Σ(预测值-真实值) * d(预测值)/d(参数)
这样的梯度表达式更简洁,计算时少了一步乘法操作,而且完全不影响模型的优化效果——因为梯度的倍数可以通过调整学习率来补偿,最终模型收敛的结果和用标准MSE是完全一样的。
回到你的代码,cost的结果4.5正好是标准MSE(9)的一半,就是因为多除以了2,这只是损失值的数值缩放,本质上和标准MSE是等价的优化目标。
内容的提问来源于stack exchange,提问作者ZZZZZZZZZ
相关产品推荐
相关产品推荐

