监督式机器学习 | Supervised Machine Learning Course Notes

Based on notes from Professor Andrew Ng's Machine Learning Specialization 2022 course.

周三 3月 04 2026
3123 字 · 13 分钟

本文是我学习吴恩达(Andrew Ng)《Machine Learning Specialization》(2022)后整理的笔记,覆盖 Part 1:Supervised Machine Learning: Regression and Classification

机器学习的分类

机器学习任务按是否存在标签(label)划分为监督学习(Supervised Learning)与非监督学习(Unsupervised Learning)。

  • Machine Learning
    • Supervised Learning(监督学习)
      • Regression(回归):输出连续数值
      • Classification(分类):输出离散类别(可为二分类或多分类)
    • Unsupervised Learning(非监督学习)
      • Clustering(聚类)(Google News 新闻聚类,DNA microarray,Grouping customers)
      • Anomaly Detection(异常检测)
      • Dimensionality Reduction(降维)

基本线性回归模型

代价函数

在线性回归中,预测函数写作

fw,b(x)=wx+bf_{w,b}(x)=wx+b

其中 w,bw,b 为参数,xx 为输入特征。对第 ii 个训练样本 (x(i),y(i))(x^{(i)}, y^{(i)}),预测值记为

y^(i)=fw,b(x(i))\hat y^{(i)} = f_{w,b}(x^{(i)})

训练问题的核心并不是给出一条“看起来合适”的直线,而是用统一标准衡量参数 (w,b)(w,b) 的优劣。平方误差代价函数(squared error cost function)将这一点写成可计算的形式:

J(w,b)=12mi=1m(y^(i)y(i))2=12mi=1m(fw,b(x(i))y(i))2J(w,b)=\frac{1}{2m}\sum_{i=1}^{m}\left(\hat y^{(i)}-y^{(i)}\right)^2 =\frac{1}{2m}\sum_{i=1}^{m}\left(f_{w,b}(x^{(i)})-y^{(i)}\right)^2

这里 mm 为训练样本数。于是训练目标可以写为

minw,bJ(w,b)\min_{w,b} J(w,b)

到这一步为止,线性回归训练已经被完整表述为一个优化问题:参数 (w,b)(w,b) 的选择不再依赖直观调节,而由目标函数最小化给出。记号层面在这里也完成统一:x(i)x^{(i)}y(i)y^{(i)}y^(i)\hat y^{(i)}mmfw,b(x)f_{w,b}(x)J(w,b)J(w,b) 会在后续推导与实现中持续出现,保持一致比额外扩展术语更重要。

在参数空间中观察 J(w,b)J(w,b) 时,常见表示方式是曲面图与等高线图;它们的作用主要在于把后续参数更新过程转化为几何上的“下降轨迹”。

Cost function surface and contour

梯度下降

梯度下降(Gradient Descent)是一个通用优化方法,用于最小化目标函数。在当前场景中,它作用于 J(w,b)J(w,b);在更一般的情形中,也可以作用于更高维参数下的目标函数。在线性回归中,梯度下降给出了一套明确的参数更新规则。

在线性回归的双参数形式下,梯度下降写作:

repeat until convergence {w=wαwJ(w,b)b=bαbJ(w,b)\text{repeat until convergence } \left\{ \begin{aligned} w &= w-\alpha \frac{\partial}{\partial w}J(w,b) \\\\ b &= b-\alpha \frac{\partial}{\partial b}J(w,b) \end{aligned} \right.

其中 α\alpha 为学习率(learning rate)。这一表达式已经给出算法骨架:从某个初始参数出发,重复依据当前点的局部导数更新参数,直到收敛。若只看单参数形式

w=wαddwJ(w)w = w-\alpha \frac{d}{dw}J(w)

则更新方向更容易理解:导数为正时参数减小,导数为负时参数增大,更新方向始终朝向使目标函数下降的一侧。接近最小值时导数变小,更新步长也会自然变小,因此在不少情况下即使 α\alpha 固定,仍然可以逐步收敛到最小值附近。

学习率的作用需要单独保留:α\alpha 过小时更新过慢,α\alpha 过大时可能越过最小值并出现震荡,甚至发散。实际实现中,公式无误但训练效果异常,常见原因往往首先落在学习率选择上。

将线性回归模型代入代价函数后,可得到梯度下降所需的具体偏导数。记

J(w,b)=12mi=1m(wx(i)+by(i))2J(w,b)=\frac{1}{2m}\sum_{i=1}^{m}\left(wx^{(i)}+b-y^{(i)}\right)^2

则有

wJ(w,b)=1mi=1m(fw,b(x(i))y(i))x(i)\frac{\partial}{\partial w}J(w,b)=\frac{1}{m}\sum_{i=1}^{m}\left(f_{w,b}(x^{(i)})-y^{(i)}\right)x^{(i)}bJ(w,b)=1mi=1m(fw,b(x(i))y(i))\frac{\partial}{\partial b}J(w,b)=\frac{1}{m}\sum_{i=1}^{m}\left(f_{w,b}(x^{(i)})-y^{(i)}\right)

代回更新式后,线性回归的梯度下降形式为

repeat until convergence {w=wα1mi=1m(fw,b(x(i))y(i))x(i)b=bα1mi=1m(fw,b(x(i))y(i))\text{repeat until convergence } \left\{ \begin{aligned} w &= w-\alpha \cdot \frac{1}{m}\sum_{i=1}^{m}\left(f_{w,b}(x^{(i)})-y^{(i)}\right)x^{(i)} \\\\ b &= b-\alpha \cdot \frac{1}{m}\sum_{i=1}^{m}\left(f_{w,b}(x^{(i)})-y^{(i)}\right) \end{aligned} \right.

每一步更新都使用全部训练样本,因此这里对应的是 Batch Gradient Descent。这一点在本阶段主要是计算方式上的确认:参数更新基于整批数据,而不是部分样本。

这一部分最容易出错的地方并不在推导,而在更新顺序。理论表达要求 wwbb 在同一轮中基于旧参数同时更新,因此实现时应先计算临时量,再统一赋值。

参数空间中的下降过程、数据空间中的拟合直线变化以及代价函数值的下降,本质上是同一过程在不同表示下的对应。在线性回归的平方误差代价函数场景中,目标函数呈碗形(bowl shape)并具有凸性(convexity),因此优化过程的几何结构相对清晰,这也使它成为理解梯度下降的合适起点。

Gradient descent intuition and learning rate effects

多类特征线性回归

向量化

当输入不再是单一特征 xx,而是一组特征 x1,,xnx_1,\dots,x_n 时,训练样本写作 (x(i),y(i))(\vec{x}^{(i)}, y^{(i)}),其中 x(i)=[x1(i),x2(i),,xn(i)]\vec{x}^{(i)}=[x_1^{(i)},x_2^{(i)},\dots,x_n^{(i)}]。对应的线性回归模型为

fw,b(x)=w1x1+w2x2++wnxn+bf_{\vec{w},b}(\vec{x}) = w_1x_1+w_2x_2+\cdots+w_nx_n+b

也常写为点积形式

fw,b(x)=wx+bf_{\vec{w},b}(\vec{x}) = \vec{w}\cdot \vec{x} + b

这里 w=[w1,,wn]\vec{w}=[w_1,\dots,w_n]。该设定属于 multiple linear regression(多个输入特征),与“多个输出”的 multivariate regression 区分。

在多特征场景中,向量化(vectorization)主要用于把“逐维求和/逐维更新”写成向量运算,从而使预测与参数更新都能以统一形式表达。对单个样本的预测可以写为 y^(i)=fw,b(x(i))\hat y^{(i)}=f_{\vec{w},b}(\vec{x}^{(i)}),在代码中常对应 dot(w, x) + b。数学记号通常以 j=1,,nj=1,\dots,n 标记特征维度;实现时数组多从 00 开始计数,需要保持索引对齐。

多特征下的平方误差代价函数保持同一结构,只是把模型替换为 fw,bf_{\vec{w},b}

J(w,b)=12mi=1m(fw,b(x(i))y(i))2J(\vec{w},b)=\frac{1}{2m}\sum_{i=1}^{m}\left(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)}\right)^2

训练目标写作

minw,bJ(w,b)\min_{\vec{w},b} J(\vec{w},b)

多元线性回归的梯度下降

梯度下降从单变量的 (w,b)(w,b) 扩展为 (w1,,wn,b)(w_1,\dots,w_n,b)。更新骨架为

repeat until convergence {wj=wjαwjJ(w,b)(j=1,,n)b=bαbJ(w,b)\text{repeat until convergence } \left\{ \begin{aligned} w_j &= w_j-\alpha \frac{\partial}{\partial w_j}J(\vec{w},b)\quad (j=1,\dots,n) \\\\ b &= b-\alpha \frac{\partial}{\partial b}J(\vec{w},b) \end{aligned} \right.

其中 α\alpha 为学习率(learning rate)。对平方误差代价函数,偏导数为

wjJ(w,b)=1mi=1m(fw,b(x(i))y(i))xj(i)\frac{\partial}{\partial w_j}J(\vec{w},b)=\frac{1}{m}\sum_{i=1}^{m}\left(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)}\right)x_j^{(i)}bJ(w,b)=1mi=1m(fw,b(x(i))y(i))\frac{\partial}{\partial b}J(\vec{w},b)=\frac{1}{m}\sum_{i=1}^{m}\left(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)}\right)

代回后得到显式更新式:

repeat until convergence {wj=wjα1mi=1m(fw,b(x(i))y(i))xj(i)b=bα1mi=1m(fw,b(x(i))y(i))\text{repeat until convergence } \left\{ \begin{aligned} w_j &= w_j-\alpha \cdot \frac{1}{m}\sum_{i=1}^{m}\left(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)}\right)x_j^{(i)} \\\\ b &= b-\alpha \cdot \frac{1}{m}\sum_{i=1}^{m}\left(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)}\right) \end{aligned} \right.

每一步更新都遍历所有训练样本,因此对应 Batch Gradient Descent。实现时需要 simultaneously update:同一轮迭代中先基于旧的参数计算所有 wjw_jbb 的新值,再统一赋回;避免“先更新部分参数再用于其他参数”的顺序污染。

参数更新也可以写成向量形式:若记梯度向量 d=[w1J,,wnJ]\vec{d}=[\frac{\partial}{\partial w_1}J,\dots,\frac{\partial}{\partial w_n}J],则

w:=wαd\vec{w} := \vec{w}-\alpha \vec{d}

这对应实现中用向量运算替代逐维循环更新。

特征缩放

多特征回归中,特征尺度差异会直接影响梯度下降的迭代表现。常见目标是把各特征调整到相近范围(例如接近 [1,1][-1,1][3,3][-3,3] 一类尺度),以便梯度下降在各维度上的更新更均衡。常用缩放方式包括:

Mean normalization:

xj,scaled=xjμjxj,maxxj,minx_{j,\text{scaled}}=\frac{x_j-\mu_j}{x_{j,\max}-x_{j,\min}}

Z-score normalization:

xj,scaled=xjμjσjx_{j,\text{scaled}}=\frac{x_j-\mu_j}{\sigma_j}

其中 μj\mu_j 为第 jj 个特征均值,σj\sigma_j 为其标准差。多项式或其他非线性变换产生的新特征往往会进一步放大尺度差异,因此缩放在这些情况下更是训练的前置条件。

检查收敛与学习率选择

梯度下降的常用收敛检查方式是观察 J(w,b)J(\vec{w},b) 随迭代次数的变化:在合理设置下应持续下降。也可以设定阈值 ε\varepsilon,当某次迭代带来的代价下降幅度不超过 ε\varepsilon 时,作为进入收敛区间的判据。

学习率 α\alpha 的选择与收敛曲线直接对应:若 J(w,b)J(\vec{w},b) 震荡或上升,通常说明 α\alpha 过大(同时应核对更新方向为“减号”);若下降但很慢,则 α\alpha 可能过小。实际尝试中常用按倍数递增的一组候选值:

,0.001,0.003,0.01,0.03,0.1,0.3,1,\dots,\,0.001,\,0.003,\,0.01,\,0.03,\,0.1,\,0.3,\,1,\,\dots

在多特征场景下,特征缩放往往决定了“可用学习率区间”的宽窄:未缩放时即使取很小的 α\alpha 仍可能表现不理想,缩放后通常更容易得到稳定下降的曲线。

特征工程与多项式回归

在保持线性回归训练框架(代价函数 + 梯度下降)不变的前提下,扩展模型表达能力通常通过构造新特征完成。典型的特征工程包括构造交互项,例如

x3=x1x2x_3=x_1x_2

将模型扩展为 fw,b(x)=w1x1+w2x2+w3x3+bf_{\vec{w},b}(\vec{x})=w_1x_1+w_2x_2+w_3x_3+b

多项式回归可以视为把单一变量 xx 映射为一组多项式特征(如 x,x2,x3x,x^2,x^3),仍然是线性模型在更高维特征空间中的形式:

fw,b(x)=w1x+w2x2+w3x3+bf_{\vec{w},b}(x)=w_1x+w_2x^2+w_3x^3+b

由于高阶项会显著改变数值范围,多项式特征通常需要配合特征缩放,以保证梯度下降在更新时数值稳定、收敛过程可控。

到这里,多特征线性回归的训练流程可以被固定为一组一致的要素:以 x\vec{x}表示输入、以 fw,bf_{\vec{w},b} 定义预测、以 J(w,b)J(\vec{w},b) 定义目标、以多维梯度下降更新参数,并通过特征缩放、收敛曲线与学习率选择把训练过程保持在可诊断与可复现的范围内;特征工程与多项式特征则提供了在同一训练框架下扩展输入表示的方式。

Logistic 回归

前面线性回归的目标是预测连续值;当任务切换到二分类时,标签 y{0,1}y\in\{0,1\},模型输出需要落在 [0,1][0,1] 区间,并能与“预测为 1 的概率”对齐。逻辑回归沿用前文的参数与特征记号(x,w,b\vec{x},\vec{w},b),保留线性组合结构,只在输出层引入 sigmoid(logistic)函数完成映射。

先定义线性部分

z=wx+bz=\vec{w}\cdot\vec{x}+b

sigmoid 函数为

g(z)=11+ezg(z)=\frac{1}{1+e^{-z}}

逻辑回归模型写作

fw,b(x)=g(wx+b)=11+e(wx+b)f_{\vec{w},b}(\vec{x})=g(\vec{w}\cdot\vec{x}+b) =\frac{1}{1+e^{-(\vec{w}\cdot\vec{x}+b)}}

并记作

fw,b(x)=P(y=1x;w,b),P(y=0x;w,b)=1fw,b(x)f_{\vec{w},b}(\vec{x}) = P(y=1\mid \vec{x};\vec{w},b),\qquad P(y=0\mid \vec{x};\vec{w},b)=1-f_{\vec{w},b}(\vec{x})

在预测规则上,常用阈值 0.50.5 将概率映射为类别:若 fw,b(x)0.5f_{\vec{w},b}(\vec{x})\ge 0.5y^=1\hat y=1,否则 y^=0\hat y=0。由于 g(z)g(z) 单调递增,

fw,b(x)0.5z0wx+b0f_{\vec{w},b}(\vec{x})\ge 0.5 \Longleftrightarrow z\ge 0 \Longleftrightarrow \vec{w}\cdot\vec{x}+b\ge 0

因此决策边界(decision boundary)由

wx+b=0\vec{w}\cdot\vec{x}+b=0

给出。需要强调的是:决策边界由 z=0z=0 决定,而不是由 sigmoid 的“形状”决定;当输入特征已经包含平方项、交互项等变换特征时,边界在原始输入空间中可以表现为非线性,但写法仍然是 z=0z=0

逻辑回归的代价函数

逻辑回归的训练依旧写成最小化代价函数 JJ,但此处不再沿用平方误差,而采用对数损失来刻画分类误差。对单个样本 (x(i),y(i))(\vec{x}^{(i)},y^{(i)}),定义

L(fw,b(x(i)),y(i))={log(fw,b(x(i))),y(i)=1log(1fw,b(x(i))),y(i)=0L\big(f_{\vec{w},b}(\vec{x}^{(i)}),y^{(i)}\big)= \begin{cases} -\log\big(f_{\vec{w},b}(\vec{x}^{(i)})\big), & y^{(i)}=1\\[4pt] -\log\big(1-f_{\vec{w},b}(\vec{x}^{(i)})\big), & y^{(i)}=0 \end{cases}

常用的合并写法为

L(fw,b(x(i)),y(i))=y(i)log(fw,b(x(i)))(1y(i))log(1fw,b(x(i)))L\big(f_{\vec{w},b}(\vec{x}^{(i)}),y^{(i)}\big) = -\,y^{(i)}\log\big(f_{\vec{w},b}(\vec{x}^{(i)})\big) -\big(1-y^{(i)}\big)\log\big(1-f_{\vec{w},b}(\vec{x}^{(i)})\big)

总体代价函数取平均:

J(w,b)=1mi=1mL(fw,b(x(i)),y(i))J(\vec{w},b)=\frac{1}{m}\sum_{i=1}^{m}L\big(f_{\vec{w},b}(\vec{x}^{(i)}),y^{(i)}\big)

至此可以看到,分类并没有改变“训练范式”:仍然是通过选择 ffJJ 来定义学习问题,再通过最小化 JJ 求解参数。实现上梯度下降的结构与线性回归一致,尤其仍然要求 simultaneously update(同一轮中基于旧参数先算出新参数再统一赋回),这一点在编码时依旧是最容易踩坑的细节之一。

正则化

当特征数量增多,或引入更复杂的特征(例如高次项、交互项)时,模型容易出现过拟合(overfitting / high variance):训练集拟合很好,但泛化变差。常见的处理路径包括增加训练样本、特征选择与正则化。这里正则化的写法非常“干净”:不改变模型形式,而是在代价函数里加入对参数规模的惩罚项,从而让学习过程倾向于较小的参数。

常用 L2L2 正则项为(通常不惩罚 bb):

λ2mj=1nwj2\frac{\lambda}{2m}\sum_{j=1}^{n}w_j^2

其中 λ\lambda 为正则化参数(regularization parameter)。

正则化代价函数

线性回归的正则化代价函数写作

J(w,b)=12mi=1m(fw,b(x(i))y(i))2+λ2mj=1nwj2J(\vec{w},b)=\frac{1}{2m}\sum_{i=1}^{m}\big(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)}\big)^2 +\frac{\lambda}{2m}\sum_{j=1}^{n}w_j^2

逻辑回归的正则化代价函数为

J(w,b)=1mi=1m[y(i)log(fw,b(x(i)))+(1y(i))log(1fw,b(x(i)))]+λ2mj=1nwj2J(\vec{w},b)= -\frac{1}{m}\sum_{i=1}^{m}\left[ y^{(i)}\log\big(f_{\vec{w},b}(\vec{x}^{(i)})\big) +\big(1-y^{(i)}\big)\log\big(1-f_{\vec{w},b}(\vec{x}^{(i)})\big) \right] +\frac{\lambda}{2m}\sum_{j=1}^{n}w_j^2

梯度下降更新

在梯度下降中,以线性回归为例,正则化项直接进入 wjw_j 的更新。对每个 j=1,,nj=1,\dots,n

wj:=wjα[1mi=1m(fw,b(x(i))y(i))xj(i)+λmwj]w_j := w_j-\alpha\left[\frac{1}{m}\sum_{i=1}^{m}\big(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)}\big)x_j^{(i)}+\frac{\lambda}{m}w_j\right]

bb 的更新保持为

b:=bα1mi=1m(fw,b(x(i))y(i))b := b-\alpha\cdot \frac{1}{m}\sum_{i=1}^{m}\big(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)}\big)

逻辑回归的正则化训练可用同一思路理解:目标函数从未正则化的 J(w,b)J(\vec{w},b) 改为包含 λ\lambda 项的 J(w,b)J(\vec{w},b),并由此在参数更新中体现对 wjw_j 的额外收缩项。

总结

这一部分内容最终可以整理为同一套写法在不同任务上的复用:回归与分类的差异集中体现在 ff 的输出形式与 JJ 的定义;多特征、特征变换使输入表达更丰富,但训练仍落在“最小化 JJ”的框架内;当模型复杂度影响泛化时,正则化将复杂度控制写入 JJ,从而把“拟合能力”与“泛化表现”放在同一个目标函数里统一处理。


Thanks for reading!

监督式机器学习 | Supervised Machine Learning Course Notes

周三 3月 04 2026
3123 字 · 13 分钟