吴恩达的机器学习课程我刷过不止一遍,第二讲“单变量线性回归”看起来是最基础的一课,很多人一天就能看完,甚至直接跳过。但说实话,这一讲是整个课程里信息密度被严重低估的地方。你后面学的所有东西——逻辑回归、神经网络、SVM——本质上都是在重复这一讲建立起来的三板斧:假设、代价函数、梯度下降。如果第二讲的理解停留在“哦,就是拟合一条直线”,那后面很多坑你会踩得不明不白。
这篇东西我不按课程顺序复述,而是把第二讲里真正值得抠的东西拆开讲,包括h(x)这种记号为什么要写成θ₀+θ₁x、代价函数为什么非要除以2m、梯度下降的两个偏导数到底怎么推出来的、学习率和特征缩放对收敛的实际影响有多大。最后再给出一段可以从零跑通的Python实现和课程期末复习时容易漏掉的细节。适合在看课程视频但感觉公式跟不上的人,也适合期末复习需要把逻辑串起来的人。
1. 假设空间的语义拆解:一条直线到底在表达什么
1.1 为什么第二讲从“单变量”开始
单变量线性回归,英文是Linear regression with one variable,也叫单特征线性回归。所谓单变量,就是输入特征只有一个维度。课程里用的是波特兰房价的例子,横轴是房子面积,纵轴是成交价格。但要注意,这里的“单变量”说的是特征只有一个,不是模型参数只有一个,这一点特别多人混淆。
第二讲故意选最简陋的模型,是因为它把所有核心机制都压缩在一个场景里,变量越少,你越能看清楚梯度下降每一步在做什么。等到了第三讲多变量情况出现,你发现公式从h(x)=θ₀+θ₁x变成h(x)=θ₀+θ₁x₁+θ₂x₂+...,本质没有任何区别,只是从一条直线升维成了一个超平面,更新参数的逻辑完全一样。看懂了单变量,多变量只是加循环的事。
1.2 θ₀和θ₁分别控制什么,以及参数空间如何映射成直线族
课程里定义的假设函数是:
h(x) = θ₀ + θ₁x
这个式子的语义要拆成两层。第一层是模型结构:它假设因变量y和特征x之间是线性关系。第二层是参数语义:θ₀是截距,决定了直线在y轴上的位置;θ₁是斜率,决定了x每增加一个单位,预测值y改变多少。
我说一个经常被忽略的点:θ₀和θ₁所张成的不是一条直线,而是整个“直线族”。如果你把θ₀和θ₁当作两个坐标轴,这个二维平面里的每一个点都对应着唯一一条直线。学习过程,就是在平面上找一个位置,让对应直线尽可能贴合训练数据。这个“参数平面”的视角,对理解梯度下降的“下山”非常关键,因为下山走的是参数空间,不是平面上的数据点。
我实际做项目时还会刻意先把θ₁的符号和量级想清楚。比如房价和面积,θ₁应该明显大于0,如果训练完之后θ₁变成了负数,甚至-3000多,那多半不是模型的问题,是数据预处理出了问题——比如特征列填错了,或者标准化之后没有还原到原始尺度。单变量模型的好处就是你完全可以靠直觉检查参数是否合理。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 代价函数J的设计动机与数学直觉
2.1 为什么是“平方误差”而不是其他误差
代价函数衡量的是模型预测和真实值的差距,这个大家都懂。但为什么吴恩达在这一讲单独强调“平方误差代价函数”?因为它有两个别的函数没有的好处。
第一个好处是平滑且可导。绝对值误差|h(x)-y|虽然直观,但在h(x)=y那个点不可导,梯度下降碰到这里就尴尬了。平方误差在整个实数域处处可导,梯度好算。第二个好处是放大误差:平方会让大偏差产生不成比例的惩罚,模型会更倾向于“求稳”,而不是被某个点带得特别偏。
我需要额外说明一个细节:线性回归里的平方误差代价函数,在参数θ₀、θ₁固定后其实是一个关于θ的二次型函数。二次型意味着它是凸函数。凸函数就意味着从任意初始点出发,梯度下降都不会陷入局部极小值,只会收敛到全局最小值。这不是运气,是数学结构给的保证。后面讲神经网络时,代价函数是非凸的,会踩坑才会想起这里的好。
2.2 除以m与除以2m:背后是两个完全不同的理由
代价函数的标准写法是:
J(θ₀, θ₁) = (1/2m) Σ(h(xⁱ) - yⁱ)²
很多初学者会问:除个m还能理解,是求平均,为什么天上掉下个2?
除以m是为了消除样本量的影响。假设训练集有1000条数据和10条数据,如果不做平均,1000条数据的误差和自然是10条数据的误差和的大约100倍,用一个和
