损失函数
模型的预测有好有坏,我们需要一个数字来衡量预测有多准
预测值和真实值
我们已经用线性模型做过前向预测。下一个问题是:参数 和 到底该取什么值?
神经网络的参数不需要人工设定,而是由计算机 自动训练 得到,这一训练过程之后会正式展开。
但在展开自动训练之前,需要先回答一个更基础的问题: 如何定量地衡量当前预测的准确程度? 训练算法依据反馈不断调整参数,这个反馈必须是一个明确的数字,用来刻画预测与真实之间的差距,也是参数更新方向的判定依据。本课就来建立这一量化标准。
为此,先明确两个核心概念:
- 真实值 :数据中已知的正确答案。比如某套房子的实际成交价是 50 万, 那 。在构造数据时,我们用 生成了这些真实值。
- 预测值 (读作 y-hat):模型根据当前参数计算出来的值。 对于线性模型, 。参数 和 不同,预测值就不同。
我们希望模型输出的 尽可能接近 。但「接近」这个词太模糊,机器无法直接据此优化,需要一个 数字 来精确衡量两者之间的差距。 这就是 损失函数 要做的事。
什么是损失函数
损失函数 (Loss Function)是一个函数, 它接收预测值 和真实值 ,输出一个数字, 这个数字越大,说明预测越不准确;越小,说明预测越好。
损失函数只给出当前预测偏离真实值的具体程度,不涉及该如何调整参数。
均方误差(MSE)
对于回归问题(预测连续数值),最常用的损失函数是 均方误差 (Mean Squared Error,简称 MSE)。
每个样本的预测值和真实值之间的差距叫 误差 。 MSE 的计算方式是:把每个样本的误差平方,然后取平均值。
为什么用 平方 而不是绝对值?
- 平方让大误差受到更重的惩罚,偏差越大,平方后增长越快
- 平方函数处处可导,之后用梯度下降来优化时需要函数可导
直觉:拖动滑块感受 MSE
拖动滑块调节 和 ,左右两图同步联动:
- 左图 :当前参数下的预测直线,红色虚线是每个样本的 误差 ,线越贴近数据点,MSE 越小。
- 右图 : 损失函数曲面 ,每一组 对应曲面上唯一红点;滑块一动,红点就在曲面上滑动。
关键的对应关系:左图直线越贴近数据,右图红点就越靠近曲面 最低点 ,此处的参数就是最优参数。试着把红点拖到这里看看。
训练的核心目标
有了损失函数,训练的目标就变得清晰了:
当 MSE 接近 0 时,意味着每个样本的预测值 都非常接近真实值 , 模型就「学到」了数据中的规律。
实践:实现 MSE 计算
用 PyTorch 编写 MSE 函数,在一组带噪声的线性数据上计算损失值。