如果你正在学机器学习,线性回归多半是第一个正式接触的算法。而线性回归里最容易被当成“跑个流程”带过、实际上却决定整套方法上限的,就是损失函数。我可以直接说,很多人学到后面卡在梯度下降、过拟合、甚至看不懂训练日志,根子都在这里没打牢。
这篇文章我会把线性回归中的损失函数从头到尾拆开讲清楚:它到底在做什么、为什么线性回归默认用均方误差、怎么从损失函数出发推导出两种求解参数的路线,再带你把代码跑通、把损失曲线画出来。无论你是刚入门想补基础,还是作业平台上被线性回归实验卡住了,或者训练深度学习模型时想搞懂那些loss曲线到底是什么意思,这篇文章都是按你能直接落地的标准写的。
1. 损失函数到底在解决什么问题
1.1 线性回归模型想表达的本质
先回到最原始的起点。线性回归做的是这样一件事:给你一堆数据点,每个点有若干个特征 x 和一个目标值 y,你想找一个直线(或超平面)来近似描述 x 和 y 之间的关系。比如用广告投放过预测销量,用房子面积预测价格,用学习时长预测考试成绩,本质上都是在做同一件事:找到一条“最能代表数据趋势”的线。
这条线在数学上写作:
y = wx + b
如果是多个特征,就写成:
y = w1x1 + w2x2 + ... + wnxn + b
这里的 w 是权重,b 是偏置。所谓“训练模型”,其实就是找出最适合的一组 w 和 b。问题是:计算机怎么判断一组参数比另一组参数更好?光靠肉眼在图上比划肯定不现实,必须有一个统一的、可量化的标准来告诉机器“你现在的预测到底差了多少”。这个标准,就是损失函数。
1.2 损失函数的本质就是给错误打分
损失函数(Loss Function)可以理解成一把尺子,专门用来度量模型预测值和真实值之间的差距。预测得越准,损失值越小;预测得越离谱,损失值越大。训练过程的目标也就变得非常直接:找一组参数,让这个损失值尽可能小。
我用个生活化的例子解释你立刻就懂。假设你是个弓箭手,靶心是真实值,你的箭落点是预测值。损失函数就是在统计“箭离靶心偏了多少”。如果只射一箭,你直接看偏差就行;但如果你射了一百箭,你总得有个综合指标来评价整体水平,是把所有偏差简单加起来?还是把偏差平方后加起来?还是只关心最大偏差?不同的统计方式,就是不同的损失函数,最后会引导你练出不同的射击习惯。
机器学习里的情况完全一样。模型在训练集上会做很多次预测,每次预测都有一个偏差,损失函数把这些偏差汇总成一个数值。训练算法的任务,就是不断调整参数,让这个汇总数值越来越小。
1.3 训练的本质不是“学知识”,而是“不断调参数降低损失”
有一个常见的误区:很多人觉得训练是让模型“记住知识”。实际上,梯度下降这类优化算法干的事情非常朴素,就是反复做两件事:算一下当前的损失值有多大;朝着让损失更小的方向,微调 w 和 b。
这一过程就像你在山上往下走雾很大,看不清整座山的路,只能靠脚下的坡度判断“往前走是不是在下坡”。损失函数就是告诉你当前高度的仪表,梯度就是告诉你哪个方向下坡最陡。参数更新一步,就看一眼仪表;数值在降,说明方向对了;数值不降反升,说明步子迈大了或者方向错了。
理解了这个逻辑,你再看任何机器学习训练过程,思路都会清晰很多。之前有读者问我,说看代码里model.fit()一下就出结果了,感觉像黑魔法。其实fit内部就是在做“前向计算损失-反向求梯度-更新参数”的循环,核心引擎就是损失函数。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 线性回归为什么默认选择均方误差MSE
2.1 用真实例子感受平方带来的惩罚力度
线性回归最常用的损失函数是均方误差(Mean Squared Error,MSE),公式长这样:
L = (1/m) * Σ(yi - ŷi)²
其中 yi 是第 i 个样本的真实值,ŷi 是模型预测值,m 是样本数量。翻译过来就是:把所有样本预测偏差的平方加起来,再取平均。
为什么要平方?我算给你看。假设有两个样本,真实值都是10元,模型A预测为9元和11元,绝对偏差都是1元;模型B预测为8元和12元,绝对偏差都是2元。如果只看绝对偏差之和,模型A总偏差为2,模型B总偏差为4,A确实更好。这个结论没问题,但当模型B有两个小偏差(比如预测为9.5和10.5,绝对偏差0.5+0.5=1)和模型A有一个大偏差(预测为7和10,绝对偏差3+0=3)时,简单求和会看不出差别,而平方后大偏差会被放大成9,小偏差只放大成0.25。这样优化器就会优先去处理那些错得离谱的样本,这在实际训练中非常重要。
平方还有一层含义:误差的惩罚是非线性增长的。预测偏差从0.1变成0.2,损失增加得不明显;但从1变成2,损失会翻4倍。这种“错得越离谱,代价越大”的特性,会让模型不敢在任何一个样本上犯大错,从而整体保持稳定。
2.2 数学层面:MSE的三个硬核优点
选择MSE不只是经验习惯,更是数学推导的结果。
第一,MSE是关于 w 和 b 的凸函数。凸函数的意思可以粗略理解成:损失曲面长得像一个碗,碗底只有一个全局最低点,没有那些坑坑洼洼的局部最低点来捣乱。这就保证了你沿着梯度往下走,最终不管从哪里出发,都能到达同一个最优点。这在线性回归里是极强的性质,很多复杂的模型(比如神经网络)用的损失函数是非凸的,所以训练时特别依赖初始化,容易陷入局部最优。线性回归没有这个烦恼。
第二,MSE处处可导且导数形式简单。求导后得到的形式非常规整,几乎不带任何复杂的运算,这让梯度计算变得极其高效。对比一下绝对误差损失 L = |y - ŷ|,它在误差为0的点不可导,梯度方向在0附近还会剧烈跳变,导致参数更新不稳定。
第三,在高斯噪声假设下,MSE对应最大似然估计。如果你假设样本的真实值等于理想线性函数的输出加上一个独立同分布的高斯噪声,那么用最大似然方法去估计参数,推出来的损失函数恰好就是MSE。也就是说,你默认数据里的随机干扰是“围绕真实值呈钟形分布、大偏差少、小偏差多”的形态时,MSE是最合理的度
