☰
CS229机器学习复习主线:从监督学习到SVM与EM的推导链
2026/11/2 11:24:16 网站建设 项目流程

简介:CS229 全课程资料包面向希望系统学习机器学习的学习者与复习备考者,汇集 Andrew Ng 课程讲义、作业及配套讲解,可帮助读者从线性回归、逻辑回归、生成学习、支持向量机、学习理论、EM 与聚类、PCA、因子分析到强化学习等主题建立完整知识框架。包内共 47 个文件,以 30 个 PDF 讲义与解答文档为主,另有 7 个 ZIP 数据与代码压缩包、6 个 m 脚本和 4 个 dat 数据文件,整体约 9.22MB,便于按讲义阅读、编程练习与结果核对分模块使用。已有 1322 人学习,说明其在机器学习自学者中具有一定参考价值。资料既覆盖课程核心推导,也包含作业答案与复习笔记,适合边读讲义边完成练习、再对照解答排查思路,尤其便于梳理公式推导、算法实现和模型评估中的易错点。

1. 一张机器学习地图:CS229 的四条主线怎么串

把 CS229 的讲义目录平铺开来看,会发现它更像四条主线彼此关联,并非一份算法清单:监督学习、生成式与判别式模型、学习理论、无监督与强化学习。很多人第一次翻的时候会陷进公式里,以为这份材料的门槛在数学;真正系统重刷一遍才会发现,门槛其实在“知道每个公式在为哪个问题服务”。线性回归的最小二乘是在给高斯噪声做最大似然,逻辑回归的 sigmoid 是从伯努利分布里长出来的,SVM 的对偶式是在把内积换成核——这些连接点才是复习时要抓的东西。这份笔记按讲义推进顺序把主线拆成模块,再补上作业里反复出现的推导套路和几个一错再错的地方,适合已经学过一遍想系统重刷的人,也适合正准备把讲义和作业串起来过一遍的人。

2. 监督学习主线:从最小二乘到广义线性模型的推导链

监督学习这一块是整份材料的骨架,后面的生成式模型、学习理论都在反复引用这里的结论。复习时不要满足于“会背公式”,要能沿着“假设 → 损失 → 求导 → 更新式”这条链自己推一遍。作业一基本就压在条链上,推导错一步,后面全崩。

2.1 线性回归与正规方程:那个 1/2 不是随手写的

线性回归的假设是 $h_\theta(x)=\theta^\top x$,损失写成 $J(\theta)=\frac{1}{2}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2$。前面这个 $\frac{1}{2}$ 常被当成记号的习惯,其实它是为了让求导时平方项掉下来的 2 正好被抵消,梯度才干净地写成 $(h_\theta(x)-y)x_j$。批量梯度下降的更新式是 $\theta_j:=\theta_j+\alpha(y^{(i)}-h_\theta(x^{(i)}))x_j^{(i)}$,注意这里是“加”不是“减”,因为对损失是下降、对似然是上升,两种写法混着记最容易把符号搞反。

正规方程 $\theta=(X^\top X)^{-1}X^\top y$ 是把梯度设为零直接解出来的闭式解,它的价值不在于“一步到位”,而在于让你看清最小二乘的几何含义:$X\theta$ 是 $y$ 在 $X$ 列空间上的正交投影。$X^\top X$ 不可逆时(特征共线、特征数大于样本数)要么加正则,要么用伪逆,这一点在作业里出过变体。

概率解释是这一节的重点:假设 $y^{(i)}\mid x^{(i)};\theta\sim\mathcal{N}(\theta^\top x^{(i)},\sigma^2)$,写出对数似然后会发现,最大化似然等价于最小化平方误差,$\sigma^2$ 只影响常数项、不影响最优 $\theta$。这条“高斯噪声 → 最小二乘”的对应关系,是后面理解 GLM 的入口。局部加权回归(LWR)则是在这条线上开的一个岔口:它不学一组全局参数,而是对每个查询点重新拟合,权重 $w^{(i)}=\exp(-\frac{(x^{(i)}-x)^2}{2\tau^2})$ 里的带宽 $\tau$ 越小,模型越“记住”局部,越容易过拟合。

2.2 逻辑回归与牛顿法:为什么不能拿平方损失硬套

逻辑回归的假设是 $h_\theta(x)=g(\theta^\top x)$,其中 $g(z)=1/(1+e^{-z})$。这个 sigmoid 不是拍脑袋选的,它是指数族里伯努利分布的自然参数变换结果,这一点在 2.3 节会再收一次。损失用对数似然(交叉熵)$\ell(\theta)=\sum y\log h+(1-y)\log(1-h)$,梯度上升的更新式是 $\theta:=\theta+\alpha(y-h_\theta(x))x$,形式和线性回归几乎一样,区别只在 $h_\theta$ 换了。

一个高频易错点是:如果把平方损失套在 sigmoid 上,损失函数对 $\theta$ 是非凸的,梯度里会多出 $g'(z)$ 这个因子,当预测严重错误时 $g'(z)\to 0$,梯度反而消失,训练会卡住。交叉熵损失配 sigmoid 的梯度里恰好把这个因子约掉了,这才是“逻辑回归必须用交叉熵”的真正原因,而不是“分类任务就该用交叉熵”这种结论式记忆。

牛顿法在这里是一个值得单独记的点:$\theta:=\theta-H^{-1}\nabla_\theta\ell(\theta)$,$H$ 是海森矩阵。它用二次曲面逼近目标函数,收敛是二次的,迭代次数远少于梯度下降,但每次要算 $n\times n$ 的 $H$ 并求逆,特征维度高时成本压不住。逻辑回归的海森矩阵可以写成 $H=X^\top D X$,其中 $D$ 是对角矩阵、元素为 $h_\theta(x^{(i)})(1-h_\theta(x^{(i)}))$,这个形式也叫迭代重加权最小二乘(IRLS),作业里让你手推一遍,就是为了让你看清“牛顿法在逻辑回归上等价于加权最小二乘”。

2.3 指数族与 GLM:三个假设推出一整族模型

广义线性模型建立在三个假设上:第一,$y\mid x;\theta$ 服从某个指数族分布;第二,自然参数 $\eta=\theta^\top x$;第三,测试时输出 $T(y)$ 的条件期望。指数族的标准写法是 $p(y;\eta)=b(y)\exp(\eta^\top T(y)-a(\eta))$,其中 $a(\eta)$ 是对数配分函数,它的导数正好给出充分统计量的期望,这个性质是推导 GLM 输出层的钥匙。

按这三个假设走一遍:假设 $y$ 是高斯分布,得到线性回归,输出 $\eta$;假设 $y$ 是伯努利分布,得到逻辑回归,输出 $1/(1+e^{-\eta})$;假设 $y$ 是多项分布,得到 softmax 回归,输出 $e^{\eta_k}/\sum_j e^{\eta_j}$。softmax 里有一个容易忽略的细节:参数存在冗余,把某一类的参数向量整体置零不影响预测,这也是为什么它的海森矩阵是奇异的、牛顿法要额外处理。

复习到这里要能回答一个自检问题:给定一个新的分布假设(比如泊松),能不能在十分钟内写出它的 GLM 形式、链接函数和更新式。作业里出现过这类“照着三假设推一遍”的题,背结论没用,得把 $\eta$ 和期望的关系走通。

2.4 作业里反复出现的向量化写法

讲义给的是标量形式,作业要求的是能跑的实现,中间差的正是向量化。以 softmax 回归为例,把打分、归一化、梯度三件事一次写清:

import numpy as np def softmax(z): # 每行减去最大值,避免 exp 溢出;结果是 (m, k) 的概率矩阵 z = z - z.max(axis=1, keepdims=True) e = np.exp(z) return e / e.sum(axis=1, keepdims=True) def softmax_loss_grad(X, Y, W): # X: (m, d) 特征矩阵;Y: (m, k) one-hot 标签;W: (d, k) 参数 m = X.shape[0] P = softmax(X @ W) # 每个样本属于各类的概率 loss = -np.sum(Y * np.log(P + 1e-12)) / m g = X.T @ (P - Y) / m # 与逻辑回归 (h - y)x 同构 return loss, g

这段代码里三个参数要盯住:m是样本数,d是特征维度,k是类别数;X @ W是线性打分,P - Y是“预测减真值”,X.T @把每个样本的误差按特征累加回参数。减去行最大值纯粹是数值稳定手段,不改变数学结果,但少了它,exp在特征尺度大时直接溢出成nan,这是实验里最常见的翻车点之一。

配套的梯度下降循环要注意学习率和迭代轮数的关系:softmax 的损失曲面在特征未标准化时非常扁,学习率稍大就震荡、稍小就爬不动,作业里通常要求你先做特征标准化再调参。讲义里的公式是理想情况,作业里的数据会逼你把“数值稳定”和“特征缩放”当成推导的一部分来对待。

3. 生成式与最大间隔:GDA、朴素贝叶斯和 SVM 的分界

这一块是整份材料里最容易“概念混着记”的部分。生成式和判别式解决的是同一类分类问题,但建模对象不同、假设强度不同、数据量需求不同。复习时先把这条分界线画清楚,再去看 SVM 的间隔和对偶,思路会顺很多。

3.1 高斯判别分析与朴素贝叶斯:建模联合分布的两条路

高斯判别分析(GDA)建模的是 $p(x\mid y)$ 和 $p(y)$:假设两类数据各自服从高斯分布且共享同一个协方差矩阵 $\Sigma$,参数是 $\phi=p(y=1)$、$\mu_0$、$\mu_1$、$\Sigma$。写出对数似然并对四个参数求导置零,能得到闭式解。它的决策边界 $p(y=1\mid x)=0.5$ 化简后是 $\theta^\top x=0$ 的线性形式——这是第一个反直觉点:生成式模型假设了高斯,判别边界却是线性的。

GDA 和逻辑回归的关系值得单独记一笔:GDA 的假设更强(高斯 + 共享协方差),在假设成立时用更少的数据就能达到更好的效果;逻辑回归假设更弱、更鲁棒,假设不成立时反而活得更好。这是一组“强假设换样本效率”的经典权衡,作业里常让你用同一份数据分别跑两者、比较小样本下的表现。

朴素贝叶斯走的是另一条路:假设在给定类别的前提下,各个特征条件独立,于是 $p(x\mid y)=\prod_j p(x_j\mid y)$。这个假设在文本分类里明显不成立(词之间有关联),但模型仍然好用,原因是分类只需要比较后验的相对大小,不需要概率估计得准。实践里必须加拉普拉斯平滑,否则某个词在某一类里没出现,整个连乘直接归零,这是朴素贝叶斯实验里最经典的血泪经验。

3.2 最大间隔与拉格朗日对偶:从几何直觉到 KKT

SVM 的出发点不是概率,而是几何间隔。函数间隔 $\hat\gamma^{(i)}=y^{(i)}(w^\top x^{(i)}+b)$ 可以随 $w$ 等比缩放,没有比较意义;几何间隔 $\gamma^{(i)}=\hat\gamma^{(i)}/|w|$ 才是点到超平面的真实距离。由于缩放不变性,可以固定函数间隔为 1,把“最大化几何间隔”转成“最小化 $\frac{1}{2}|w|^2$”的凸二次规划,约束是 $y^{(i)}(w^\top x^{(i)}+b)\ge 1$。

接下来是整章推导量最大的一段:写拉格朗日函数 $L(w,b,\alpha)=\frac{1}{2}|w|^2-\sum_i\alpha_i[y^{(i)}(w^\top x^{(i)}+b)-1]$,对 $w$ 和 $b$ 求偏导置零,得到 $w=\sum_i\alpha_i y^{(i)}x^{(i)}$ 和 $\sum_i\alpha_i y^{(i)}=0$,代回得到对偶问题:最大化 $\sum_i\alpha_i-\frac{1}{2}\sum_{i,j}\alpha_i\alpha_j y^{(i)}y^{(j)}\langle x^{(i)},x^{(j)}\rangle$,约束 $\alpha_i\ge 0$、$\sum_i\alpha_i y^{(i)}=0$。

KKT 条件里最有信息量的一条是互补松弛:$\alpha_i[y^{(i)}(w^\top x^{(i)}+b)-1]=0$。它说明只有落在间隔边界上的点才有 $\alpha_i>0$,这些点就是支持向量,其余样本对 $w$ 没有贡献。这条性质直接解释了两个现象:SVM 的解只由少数样本决定,以及为什么它可以用核函数——对偶式里只出现内积。

3.3 核方法与软间隔:把内积换掉就行

核技巧的核心只有一句话:对偶式里 $x$ 只以内积 $\langle x^{(i)},x^{(j)}\rangle$ 的形式出现,那么把内积替换成核函数 $K(x^{(i)},x^{(j)})=\langle\phi(x^{(i)}),\phi(x^{(j)})\rangle$,就等于在隐式的高维空间里做 SVM,而不需要真的算出 $\phi(x)$。多项式核 $K(x,z)=(x^\top z+c)^d$ 对应有限维特征映射;高斯核 $K(x,z)=\exp(-|x-z|^2/(2\sigma^2))$ 对应无穷维,$\sigma$ 越小,单个样本的影响范围越窄,越容易过拟合。

软间隔是为噪声和线性不可分准备的:约束放宽成 $y^{(i)}(w^\top x^{(i)}+b)\ge 1-\xi_i$,目标加上 $C\sum_i\xi_i$。对偶形式里约束从 $\alpha_i\ge 0$ 变成 $0\le\alpha_i\le C$,$C$ 扮演正则化系数的角色:$C$ 大,对误分类惩罚重,间隔窄、方差大;$C$ 小,允许更多越界,间隔宽、偏差大。这个对应关系要能和 4.2 节的 $\lambda$ 对上——$C$ 和 $\lambda$ 是同一枚硬币的两面。

3.4 一张对比表把边界定住

维度生成式(GDA / 朴素贝叶斯)判别式(逻辑回归 / SVM)
建模对象$p(x,y)=p(y)p(x\mid y)$$p(y\mid x)$ 或直接学决策边界
假设强度强,依赖分布形式与独立性弱,只假设边界形式
小样本表现假设成立时更好通常更稳
计算复杂度闭式解,一次算完迭代优化
典型失败场景分布假设明显不成立特征与边界关系高度非线性
维度硬间隔 SVM软间隔 SVM
约束$y^{(i)}(w^\top x^{(i)}+b)\ge 1$允许 $\xi_i$ 越界
对偶约束$\alpha_i\ge 0$$0\le\alpha_i\le C$
适用严格线性可分有噪声或近似可分
风险一个异常点就能让问题无解$C$ 过大时仍会过拟合

提示:复习 SVM 时不要只背对偶式,先能手推“固定函数间隔为 1”这一步,再推 KKT 互补松弛,最后才看核替换。顺序反了,公式就变成一堆没有来处的符号。

4. 学习理论与无监督:偏差方差、EM、PCA 与值迭代

前半段是“模型为什么会错”,后半段是“没有标签时怎么找结构”。这两块在作业三、作业四里各占一半,复习时可以先分开推,最后用“目标函数 + 迭代方式”这个统一视角把它们串起来。

4.1 偏差方差与学习曲线:先诊断再动手

偏差衡量模型对数据真实规律的拟合能力,方差衡量模型对训练集扰动的敏感程度。高偏差表现为训练误差和验证误差都高、两者接近;高方差表现为训练误差很低但验证误差明显更高、中间有一道沟。这个判断不是学术分类,它直接决定你下一步该做什么:高偏差就加特征、加多项式项、减小正则强度;高方差就加数据、减特征、增大正则强度。

学习曲线是把这件事可视化的工具:横轴是训练样本数 $m$,纵轴是误差,画训练误差和验证误差两条线。高偏差时两条线很快靠拢在一个较高的水平;高方差时两条线之间始终有较大间隙,且验证误差还在下降。作业里通常让你先画曲线再下结论,避免“凭感觉调参”。

注意:不要在同一次调参里同时改特征和正则系数,否则误差变了也说不清是谁的功劳。先定模型复杂度,再调正则,这是最省时间的顺序。

4.2 正则化与模型选择:$\lambda$ 和 $C$ 是一回事

L2 正则把目标改成 $J(\theta)+\lambda|\theta|^2$,效果是把参数往零压但不压到零;L1 正则 $+\lambda|\theta|_1$ 会把一部分参数精确压成零,自带特征选择效果。贝叶斯视角下,L2 对应高斯先验,L1 对应拉普拉斯先验,这个解释在考试里经常以“从最大后验角度说明正则项来源”的形式出现。

模型选择的标准做法是交叉验证:把训练集切成 $k$ 折,轮流留一折做验证,取平均误差最小的超参数。留一法($k=m$)是它的极端形式,偏差小但方差大、计算贵。作业里让你手写一遍 $k$ 折划分,目的不是让你重复造轮子,而是让你意识到“验证集参与了模型选择”这件事本身会让验证误差偏乐观,所以最终评估必须留一份独立的测试集。

4.3 EM 与 GMM:E 步和 M 步到底在优化什么

EM 解决的是含隐变量 $z$ 时的最大似然问题。直接优化 $\log p(x;\theta)=\log\sum_z p(x,z;\theta)$ 时,对数里有求和,求导下不去手。EM 的做法是先用 Jensen 不等式构造一个下界(ELBO),再交替做两件事:E 步在固定 $\theta$ 下求隐变量的后验 $Q_i(z^{(i)})=p(z^{(i)}\mid x^{(i)};\theta)$,M 步在固定 $Q$ 下最大化下界、更新 $\theta$。两个步骤都在让似然单调不降,这是 EM 最重要的性质,也是判断实现对不对的试金石。

高斯混合模型是 EM 的标准实例:E 步算每个样本属于第 $k$ 个高斯的责任度 $w_k^{(i)}$,M 步用责任度加权更新均值 $\mu_k$、协方差 $\Sigma_k$、混合系数 $\phi_k$。K-means 可以看成 GMM 的硬分配特例——责任度只取 0 或 1,协方差固定为各向同性。理解这个退化关系,比分别背两套更新式省力得多。

4.4 PCA 与值迭代:两个“求特征结构”的问题

PCA 的目标是找一组正交方向,让投影后的方差最大。做法是对协方差矩阵 $\Sigma=\frac{1}{m}\sum_i x^{(i)}x^{(i)\top}$ 做特征分解,取最大的 $k$ 个特征值对应的特征向量作为主成分,投影后的坐标是 $x^\top u$。保留多少维看累计方差贡献率 $\sum_{i\le k}\lambda_i/\sum_i\lambda_i$,实践中常取 95% 或 99%。一个常被忽略的前置步骤是中心化:没减均值就做特征分解,第一主成分会被均值方向带偏。

强化学习部分的核心是马尔可夫决策过程五元组 $(S,A,{P_{sa}},\gamma,R)$,以及两个交替出现的操作:策略评估和策略改进。值迭代直接对价值函数做贝尔曼备份 $V(s):=R(s)+\gamma\max_a\sum_{s'}P_{sa}(s')V(s')$,反复迭代直到收敛;策略迭代则先解线性方程评估当前策略,再贪心改进,通常迭代轮数更少但每轮更贵。两者都会收敛到同一个最优价值函数,区别只在收敛速度和每轮成本。

5. 易漏点:六个反复翻车的推导与实验细节

这一章列的都是“看答案觉得懂了、自己动手就错”的地方。每条按“错在哪 → 为什么会漏 → 怎么补”写,复习时可以直接当成自检清单用。

5.1 推导与假设类的三个坑

易漏点一:把 $\frac{1}{2}$ 当成可有可无的系数。为什么漏:很多教材直接写平方损失,不解释系数来源,抄公式时顺手就丢了。怎么补:自己从高斯对数似然推一遍,看 $\sigma^2$ 和常数项怎么被约掉,再看梯度里那个 2 是怎么消的;推完在笔记上写一句“系数服务于求导”,下次就不会当成装饰。

易漏点二:GLM 三个假设记不全,推 softmax 时卡住。为什么漏:线性回归和逻辑回归的结论太熟,跳过了假设直接背结果,一换分布就断链。怎么补:把三个假设写成固定模板——分布属于指数族、$\eta=\theta^\top x$、输出 $T(y)$ 的期望——每遇到一个新分布就套模板走一遍,重点盯 $a(\eta)$ 的导数如何给出期望。

易漏点三:把 GDA 的线性边界理解成“线性模型才线性”。为什么漏:见过逻辑回归的线性边界,就以为生成式模型只要是高斯的也线性,但没想过为什么。怎么补:手推 $p(y=1\mid x)$ 的比值,看二次项如何因为共享协方差而相消;再对比两类协方差不同时边界变成二次曲面,这个反例能一次记牢。

5.2 实验与作业类的三个坑

易漏点四:梯度上升和梯度下降的符号混用。为什么漏:损失最小化和似然最大化是同一个问题的两种写法,切换时符号容易飘。怎么补:在每段代码开头写死一句注释“这里优化的是似然,符号取加”,并且用一个小数据集验证一次损失是否单调下降,不单调就先查符号。

易漏点五:核矩阵没做缩放,SVM 直接跑不动。为什么漏:高斯核对特征尺度极其敏感,量纲差一个数量级,核值就退化成 0 或 1 的硬阈值。怎么补:进模型前先做标准化,再对 $\sigma$ 和 $C$ 做网格搜索;如果核矩阵的条件数肉眼可见地大,先回去查特征尺度而不是换核。

易漏点六:EM 的似然不单调,多半是责任度没归一化。为什么漏:E 步公式看着简单,实现时容易漏掉按样本对 $k$ 求和归一化这一步。怎么补:在 E 步后加一句断言,检查每个样本的责任度之和是否为 1;再打印每轮的对数似然,理论上必须单调不降,一旦下降就说明 E 步或 M 步有一个写错了。

提示:这六条里前三条靠手推解决,后三条靠断言和打印解决。复习时不要只盯着“看懂”,要给自己留一个能自动报警的检查点。

6. 复习清单:把讲义、作业与讲解对上的自检顺序

复习到后期,最怕的是“每章都眼熟、合上书就串不起来”。我的做法是给自己列一张对照表,按模块横向走一遍,每个模块只问三个问题:假设是什么、目标函数是什么、更新式长什么样。三个问题答不流畅,就说明这一块只是看过、没有推过。

模块必须能默写的推导自检问题
线性回归正规方程、高斯噪声到最小二乘为什么 $X^\top X$ 会不可逆
逻辑回归交叉熵梯度、牛顿法更新式平方损失配 sigmoid 为什么不行
GLM三假设、softmax 的 $\eta$ 与期望换泊松分布能不能现推
GDA / 朴素贝叶斯参数闭式解、拉普拉斯平滑生成式何时优于判别式
SVM对偶推导、KKT 互补松弛支持向量为什么只有少数
学习理论偏差方差判断、学习曲线形状高方差该加数据还是加特征
EM / GMMELBO、E 步 M 步、责任度似然为什么不降反升
PCA / MDP特征分解、贝尔曼备份中心化漏了会怎样

具体执行顺序可以这样排:先花两天把作业一到作业四的题目按模块归类,不看答案,只标出“这题考的是哪个假设”;然后合上讲义,对着上表默写更新式和关键推导,写不出来的地方做记号;最后再翻作业讲解,重点看自己标记的那几处,而不是从头到尾读一遍。讲解的价值在于对照思路,不在于再学一遍——同一道题看第二遍时,你要找的是“我卡住的那一步,答案用了什么替换”。

我自己的教训是:第一遍复习时图快,把 SVM 的对偶式背下来了,但没推过“固定函数间隔为 1”那一步,结果作业里换了个约束形式就完全不会。从那以后我每次复习都强制自己先合上讲义默一遍推导链,再翻答案对,哪怕慢一点。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询