吴恩达机器学习(新版):第一门课 · 监督机器学习——回归与分类

本电子书由视频课程重构而成(个人学习用)。 课程视频、字幕与讲义版权归 DeepLearning.AI / Stanford 所有。本电子书仅为个人学习所做的中文书面重构,未获授权、不得用于任何商业用途或公开传播。 书中截图均取自对应分P视频画面;引用处标注了「分P号 @ 时间」,方便回源核对。

原课程 Machine Learning Specialization(DeepLearning.AI / Stanford Online,2022 新版),讲师 Andrew Ng(吴恩达)
视频来源 Bilibili 搬运合集 BV16jyuBBEom(共 142 个分P,本册为第一门课,p1–p41)
官方配套 DeepLearning.AI 课程主页
参考笔记(2014 版课程,用于术语与章节校准) fengdu78/Coursera-ML-AndrewNg-Notes

制作模型:deepseek-flash(coding-agent / pi;据 ~/.pi/agent/settings.json)


本册导读

本册对应新版专项的第一门课《Supervised Machine Learning: Regression and Classification》,共 10 个模块、41 个视频,覆盖:

  1. 欢迎与机器学习的应用(模块 1)
  2. 什么是机器学习:监督学习、无监督学习(模块 2)
  3. 线性回归与代价函数(模块 3)
  4. 梯度下降(模块 4)
  5. 多元线性回归与向量化(模块 5)
  6. 特征缩放、学习率与特征工程(模块 6)
  7. 逻辑回归与决策边界(模块 7)
  8. 逻辑回归的代价函数(模块 8)
  9. 逻辑回归的梯度下降实现(模块 9)
  10. 过拟合与正则化(模块 10)

易错点索引(M1–M14,整理自个人学习记录):本册正文已在对应位置用 > 易错点 M# 标出。

编号 易错点 一句话纠正 位置
M1 把 clustering 当 classification 范式 / 任务 / 算法要分层 §2.4
M2 因「数值通常不同」才区分 $y,\hat y$ 二者角色本就不同 §3.2
M3 认为 cost 小 = 符合真实需求 cost 只对应 optimization objective §3.4
M4 把等高线上的 $(w,b)$ 当成 cost 点=参数位置,$J$=函数值 §3.6
M5 以为 gradient 是最速下降方向 gradient 最速上升,取负才下降 §4.3
M6 以为不能越过 minimum 可振荡跨越,振幅递减即可收敛 §4.4
M7 以为凸 ⇒ 唯一解 凸只保证局部=全局;唯一要满秩/正定 §4.5
M8 以为不缩放不影响 GD 缩放改善 conditioning §6.1
M9 以为 test 自己重算 $\mu,\sigma$ 更准 只在 train 上 fit,之后统一 transform §6.1
M10 把 $p_i$ 当「真实 $y_i$ 的概率」 $p_i$ 恒为 class 1 概率 §7.2
M11 以为 batch 越大越 noisy 平均会降方差,batch 大更稳 §4.6
M13 把 Ridge「降 variance」当直接偏好 直接偏好是 small $\lVert w\rVert_2$ §10.3
M14 以为 $\lambda$ 小更易欠拟合 $\lambda$ 大→欠拟合,$\lambda$ 小→过拟合 §10.3

第一章 欢迎来到机器学习

(对应模块 1,视频 p1–p2)

1.1 机器学习就在你身边

(p1)

你大概每天都在用好几次机器学习,却未必意识到。比如:

机器学习就在身边:搜索排序、照片打标、语音助手等

📷 机器学习就在身边:搜索排序、照片打标、语音助手等
回到原视频 (00:00:20)

1.2 什么是机器学习

(p1)

课程给出的通俗定义是:

机器学习是一门"让计算机无需被显式编程就能学习"的科学。

机器学习的定义:让计算机无需显式编程就能学习

📷 机器学习的定义:让计算机无需显式编程就能学习
回到原视频 (00:02:11)

在消费级应用之外,机器学习也迅速进入大公司与工业场景:例如优化风力发电机的发电量以应对气候变化、进入医院帮助医生做出准确诊断、以及在工厂里做计算机视觉质检——检查流水线上刚下线的产品是否有缺陷。吴恩达本人在 Landing AI 就做过大量制造业质检的工作。

1.3 为什么现在学机器学习

(p2)

机器学习是人工智能(AI)的一个子领域。人们想造出智能机器,而其中一些基本任务(比如 GPS 里"从 A 到 B 的最短路径")可以用明确的程序写出来;但更多真正有趣的任务——网络搜索、识别人类语音、从 X 光片诊断疾病、造自动驾驶汽车——我们根本不知道如何手写显式程序。唯一可行的办法,就是让机器自己从数据中学习。

由于各个行业都存在大量尚未开发的机会,今天对这项技能的需求巨大且远未被满足。麦肯锡的一项研究估计,AI 与机器学习到 2030 年每年将额外创造约 13 万亿美元的价值。

AI 与机器学习的经济价值:到 2030 年每年约 13 万亿美元

📷 AI 与机器学习的经济价值:到 2030 年每年约 13 万亿美元
回到原视频 (00:03:04)

关于长远的"通用人工智能(AGI)",课程态度是清醒的:AGI 目前被过度炒作了,我们离那个目标还很远——不知道是 50 年、500 年还是更久;但多数 AI 研究者相信,用学习算法(也许从人脑的工作原理中汲取一些灵感)是接近这一目标的最好路径。

这门课的目标有两层:既要学最重要的机器学习算法(其中一些正是当今大公司正在使用的),也要学让它们真正跑起来的实用技巧——因为"给你一套最先进的工具"和"让你能用这套工具造出一栋三层楼",是完全不同的两件事。


第二章 机器学习的两种主要类型

(对应模块 2,视频 p3–p8)

2.1 塞缪尔的跳棋程序

(p3)

机器学习最经典的定义出自 Arthur Samuel:

机器学习是"让计算机在不被明确编程的前提下获得学习能力"的研究领域。

塞缪尔在 20 世纪 50 年代写过一个跳棋程序。有意思的是,塞缪尔本人并不是一个很好的跳棋手。他做的是让计算机跟自己对弈成千上万局,通过观察"哪些棋盘局面倾向于赢、哪些倾向于输",程序逐渐学会了什么是好局面、什么是坏局面,并通过追求好局面、避开坏局面,越下越好。因为计算机有耐心陪自己对弈数万局,它积累的经验最终让这个程序比塞缪尔本人还要强。

Arthur Samuel 的跳棋程序:通过自我对弈学会下棋

📷 Arthur Samuel 的跳棋程序:通过自我对弈学会下棋
回到原视频 (00:00:24)

由此得到一条朴素而重要的规律:你给一个学习算法越多的学习机会,它的表现通常就越好。

2.2 监督学习 vs 无监督学习

机器学习有两大类:

此外还有强化学习(reinforcement learning),本课程会简要提及。本专项共三门课:第一、二门讲监督学习,第三门讲无监督学习。

2.3 监督学习:从 x 到 y 的映射

(p4)

监督学习的定义:学习从输入 x 到输出 y 的映射。关键特征是给算法提供带"正确答案"(标签 y)的例子;算法通过观察"输入 x 与正确标签 y"的配对,最终学会只凭输入 x 就给出相当准确的预测。

可以说,今天机器学习创造的经济价值中约 99% 来自监督学习。典型例子:

输入 x 输出 y 应用
一封邮件 是否垃圾邮件 垃圾邮件过滤
一段音频 文本转录 语音识别
英语文本 目标语言文本 机器翻译
广告信息 + 你的信息 你是否会点击 在线广告(最赚钱)
图像 + 雷达等传感数据 其他车辆的位置 自动驾驶
产品照片 是否有划痕/凹痕 制造质检(视觉检测)
监督学习的标准例子:垃圾邮件过滤、语音识别等

📷 监督学习的标准例子:垃圾邮件过滤、语音识别等
回到原视频 (00:01:05)

例:房价预测——回归问题

设想用房屋面积(平方英尺)预测房价(千美元)。数据画出来后是一条条小叉。一位朋友想知道 750 平方英尺的房子能卖多少:

这里之所以是监督学习,是因为每一栋房子都给了"正确答案 y"(真实售价),算法的任务是对新房子给出更多这样的正确答案。课程后面会讲如何让算法系统地选出最合适的直线/曲线,而不是凭手感挑一个"让朋友卖得最高"的。

用房屋面积预测房价:拟合直线或曲线

📷 用房屋面积预测房价:拟合直线或曲线
回到原视频 (00:03:44)

这种"从无限多个可能数字中预测一个数字"的监督学习,称为回归(regression)——房价可以是 15 万、7 万、18.3 万,或其间任何数。

例:乳腺癌检测——分类问题

(p5)

用患者的医疗记录判断一个肿瘤(肿块)是恶性(癌性、危险)还是良性。把良性记为 0、恶性记为 1,画在图上(横轴肿瘤大小,纵轴只有 0/1 两个值)。

与回归不同:这里可能的输出只有很少几个(类别)。只有两个可能输出,就构成一个分类(classification)问题。也可以用两个不同符号画在同一条数轴上:圆圈 O 表示良性,叉号 × 表示恶性。

乳腺癌检测:良性/恶性二分类

📷 乳腺癌检测:良性/恶性二分类
回到原视频 (00:00:28)

分类也可以有多于两个类别:若肿瘤是恶性,还可以预测是类型 1 还是类型 2 的癌症——于是有三种可能的输出类别。注意术语:输出"类(class)"与"类别(category)"可以互换使用。

分类与回归的分界:分类预测的是一个小的、有限的可能输出集合(如 0、1、2),而不是其间所有可能数字(如 0.5、1.7);类别不一定非得是数字(例如判断图片是猫还是狗)。

用多个输入做分类

(p5)

除了肿瘤大小,若还知道患者年龄,数据集就有了两个输入。医生测量肿瘤大小、记录年龄后,学习算法要找出一条边界,把恶性肿瘤和良性肿瘤分开,从而帮助诊断。

在更真实的乳腺癌检测中,朋友们的模型其实用了很多额外输入:肿瘤团块厚度、细胞大小一致性、细胞形状一致性等等。

用肿瘤大小与患者年龄两个输入,学习一条分类边界

📷 用肿瘤大小与患者年龄两个输入,学习一条分类边界
回到原视频 (00:02:47)

小结

2.4 无监督学习:让算法自己找结构

易错点 M1(层级混淆):不要把它归到 classification。分层要清楚——学习范式(监督 / 无监督 / 强化)、任务(分类 / 回归 / 聚类)、算法(K-means 是聚类算法,逻辑回归是分类模型)。「自动把数据分成若干组」是 clustering(聚类,任务),属于无监督范式。

(p6)

在监督学习里,每个样本都带有输出标签 Y(如良性/恶性);而在无监督学习里,数据不与任何标签 Y 关联。例如只给你"肿瘤大小 + 患者年龄",却不告诉肿瘤是良性还是恶性。

这时任务不是"诊断",而是找出数据中的某种结构或模式。之所以叫"无监督",是因为我们不试图监督算法为每个输入给出所谓的正确答案,而是让算法自己发现数据中有什么有趣的模式或结构。

对这个数据集,无监督算法可能把数据分成两个簇(cluster)——这就是聚类算法(clustering algorithm)。

无监督学习:把未标注数据聚成簇

📷 无监督学习:把未标注数据聚成簇
回到原视频 (00:00:41)

例:Google News 的新闻聚类

Google News 每天扫描互联网上成千上万篇新闻,把相关报道分组。以"大熊猫在日本最古老的动物园产下罕见双胞胎幼崽"为例,下方相关的文章里反复出现 panda(熊猫)、twin(双胞胎)、zoo(动物园)。

关键在于:没有编辑在指挥算法"去找含熊猫/双胞胎/动物园的文章"——新闻话题每天都在变、数量巨大,不可能靠人力。算法必须自己判断当天新闻里有哪些聚类。这正是它是无监督学习的原因。

Google News:聚类算法自动把相关新闻分到一组

📷 Google News:聚类算法自动把相关新闻分到一组
回到原视频 (00:02:17)

例:DNA 微阵列与市场细分

根据客户数据自动发现市场细分

📷 根据客户数据自动发现市场细分
回到原视频 (00:06:41)

无监督学习的其他类型

(p7)

在监督学习中,数据同时包含输入 x 和输出标签 y;在无监督学习中,数据只有输入 x,算法要在其中找出结构、模式或有意思的东西。

聚类之外,本专项还会讲两种无监督学习:

无监督学习的另外两类:异常检测与降维

📷 无监督学习的另外两类:异常检测与降维
回到原视频 (00:00:53)

2.5 工具:Jupyter Notebook

(p8)

课程会大量使用 Jupyter Notebook——这是当今机器学习与数据科学从业者最广泛使用的环境,很多人把它当作写代码、做实验的默认工具。它也是许多大公司开发者正在用的同一套工具。你可以直接在浏览器里运行代码,亲手验证课程里的想法。

Notebook 里主要有两类"单元格(cell)":

课程有两种实验:可选实验(optional lab)——基本不用自己写代码,打开、逐行运行即可;以及练习实验(practice lab)——让你亲手写代码。建议你在可选实验里先预测代码会做什么,再运行对照,甚至改改代码看会发生什么。熟悉 Jupyter 会对你之后的学习很有帮助。

课程使用的 Jupyter Notebook 环境

📷 课程使用的 Jupyter Notebook 环境
回到原视频 (00:02:21)


第三章 线性回归与代价函数

(对应模块 3,视频 p9–p14)

3.1 从房价预测认识线性回归

(p9)

线性回归(linear regression)就是把一条直线拟合到数据上,它可能是今天世界上使用最广泛的学习算法。先看一个具体问题:根据房屋面积预测房价。

用波特兰的房价数据集,横轴是房屋面积(平方英尺),纵轴是价格(千美元),每个小叉是一栋已售出的房子。假设你是房产经纪人,客户要卖一套 1250 平方英尺的房子,你能估多少钱?

做法是从数据建立一个线性回归模型,拟合出一条直线;在 1250 处与直线相交,向上/向左读数,得到大约 22 万美元。

这是监督学习:因为训练时给出了每套房子的正确答案(价格 y);模型输出是数字,所以它是回归模型。作为对照,分类模型预测的是"类别或离散类别"(如猫/狗、有无某种疾病)——分类的输出是有限几个,回归的输出可以是无限多个数。

用房屋面积预测房价:线性回归拟合一条直线

📷 用房屋面积预测房价:线性回归拟合一条直线
回到原视频 (00:01:32)

用数据表看同一件事

同样的数据也可以看成一张表:输入列是房子面积,输出列是价格。图上的横纵轴就对应这两列;表里 47 行就有图上 47 个点。例如第一行:2104 平方英尺、售价 40 万美元。

3.2 机器学习的标准符号

易错点 M2:区分 $y$ 与 $\hat y$ 不是因为它们通常数值不同,而是角色不同:$y$ 是真实标签(ground truth),$\hat y$ 是模型预测。哪怕某次 $\hat y=y$,角色依然不同。

(p9)

这是本专项会反复用到的符号体系(现在记不住也没关系,用多了自然熟悉):

符号 含义
x(输入变量,也叫特征) 特征;房价例子里 x = 房子面积
y(输出变量,也叫目标变量) 要预测的量;例子里 y = 房价
m 训练样本总数(此例 m = 47)
(x, y) 单个训练样本
(x⁽ⁱ⁾, y⁽ⁱ⁾) 第 i 个训练样本(上标 i 是索引,不是幂!)

用来训练模型的数据集叫训练集(training set);客户那套还没卖的房子不在训练集里——没人知道它的价格,模型就是要预测它。

训练集与标准符号:输入 x、目标 y、样本数 m、第 i 个样本

📷 训练集与标准符号:输入 x、目标 y、样本数 m、第 i 个样本
回到原视频 (00:08:03)

3.3 监督学习的工作流程与模型 f

(p10)

监督学习的流程是:把训练集(含输入特征与输出目标)交给学习算法,算法产出一个函数 f(历史上叫"假设 hypothesis",本课就叫函数 f)。f 接收新的输入 x,输出估计/预测 ŷ(读作"y-hat")。

约定:y 是训练集里的真实目标值;ŷ 是模型的估计值,它可能不等于真实值。

怎么表示 f?先假设它是直线

$$f_{w,b}(x) = w\,x + b \qquad f(x) = w\,x + b$$

其中 w、b 是数字(参数)。选择不同的 w、b 会得到不同的直线。因为只有一个输入特征 x,这称为单变量线性回归(univariate linear regression)(uni = 一,variate = 变量)。

为什么先用直线?因为它简单、好处理,而且能作为基础,最终帮你实现更复杂的非线性模型(如拟合曲线)。

把预测写清楚

对第 i 个训练样本,模型预测为 ŷ⁽ⁱ⁾ = f(x⁽ⁱ⁾);我们希望 ŷ⁽ⁱ⁾ 尽量接近真实目标 y⁽ⁱ⁾。要衡量"一条线拟合得好不好",就得构造代价函数。

监督学习流程与模型 f_{w,b}(x)=wx+b、预测值 ŷ

📷 监督学习流程与模型 f_{w,b}(x)=wx+b、预测值 ŷ
回到原视频 (00:02:47)

3.4 代价函数:衡量"线拟合得好不好"

易错点 M3:$J$ 变小只说明模型更符合当前定义的训练目标与训练数据,不自动意味着泛化更好、或更符合真实业务目标。请记住两条线:optimization objective ≠ real-world objective。

(p11)

为了引入术语:w 和 b 是模型的参数(parameters)——训练中可以调整、用来改进模型的变量;它们有时也被叫做系数、权重。

不同的 w、b 会得到不同的直线。为了衡量某组 (w, b) 与训练数据契合得多好,我们定义代价函数 J。做法是:

  1. 对每个训练样本,取预测值与真实值之差 ŷ − y(叫误差);
  2. 把误差平方;
  3. 对所有 m 个样本求和;
  4. 求平均(除以 m),得到"平均平方误差";
  5. 按惯例再除以 2,即 1/(2m)——这一步只是让后面的公式更整洁。

于是:

$$\begin{aligned}

J(w,b) &= \frac{1}{2m}\sum_{i=1}^{m}\big(\hat{y}^{(i)} - y^{(i)}\big)^2 \ &= \frac{1}{2m}\sum_{i=1}^{m}\big(f_{w,b}(x^{(i)}) - y^{(i)}\big)^2

\end{aligned}$$

这就是平方误差代价函数(squared error cost function)——它是线性回归(以及各类回归问题)中最常用的代价函数。线性回归的目标,就是找到让 J(w, b) 最小的 w 和 b。

平方误差代价函数 J(w,b) 的定义

📷 平方误差代价函数 J(w,b) 的定义
回到原视频 (00:07:20)

3.5 代价函数的直观理解

(p12)

为了看清楚代价函数在做什么,先简化模型:令 b = 0,于是 f_w(x) = w·x,代价函数只剩一个参数 w。

设训练集是三个点 (1,1)、(2,2)、(3,3)。把左图(f 的图)和右图(J 的图)并排看:

试几个 w:

把这些点描出来,就得到 J(w) 的曲线(开口向上的 U 形/碗形)。每个 w 对应左边一条拟合直线,也对应右边 J 图上的一个点;让 J(w) 最小的 w,就是最佳拟合——在这个例子里选 w = 1。

w 不同取值对应的拟合直线与代价 J:w=1 时 J=0 最优

📷 w 不同取值对应的拟合直线与代价 J:w=1 时 J=0 最优
回到原视频 (00:06:37)

3.6 可视化代价函数:3D 碗形与等高线

易错点 M4:等高线图上,一个点 $(w,b)$ 是一组参数(一个模型)的位置,不是 cost;该点对应的 $J(w,b)$ 才是 cost。记法:在参数空间里移动 $(w,b)$,用函数值 $J$ 判好坏。

(p13)

回到完整模型(同时有 w 和 b)。若选 w = 0.06、b = 50,直线 f(x) = 0.06x + 50 明显低估房价,是个很差的模型。

只有 w 时,代价函数是一条 U 形曲线(像"汤碗");而有两个参数 w、b 时,代价函数是一个三维的碗形/吊床形曲面。曲面上的任意一点,都对应一组 (w, b) 的选择,其高度就是 J(w, b)。

另一种非常有用的画法是等高线图(contour plot)——就像地形图上的等高线是"同一高度的水平切片"。它把三维曲面压到二维:横轴是 w、纵轴是 b,每个椭圆代表代价 J 相同的一组 (w, b)。越靠近最小椭圆中心的点,代价越小(中心处 J 取最小值)。

代价函数的三维碗形曲面与等高线图(同一函数两种画法)

📷 代价函数的三维碗形曲面与等高线图(同一函数两种画法)
回到原视频 (00:05:24)

3.7 把参数选择"画"出来

(p14)

看四个例子,把等高线图上的点与左边的拟合直线对应起来:

(w, b) 大致取值 拟合效果 在等高线图上的位置
w ≈ −0.15, b ≈ 800 很差(斜率是负的) 离中心很远,代价高
w = 0, b ≈ 360 一般(水平线) 稍近一些
另一组 更差 更远
较好的一组 很好地拟合数据 非常接近最小椭圆的中心

要点:拟合越好的直线,对应 J 图上越接近最小值的点。 但"手动读等高线图找最优 (w, b)"不是好办法,而且在更复杂的模型上根本行不通——我们需要一个用代码自动找最优参数的高效算法,这就是下一章的梯度下降。

四组 (w,b) 的拟合直线与其在代价函数上的位置

📷 四组 (w,b) 的拟合直线与其在代价函数上的位置
回到原视频 (00:02:43)


第四章 梯度下降

(对应模块 4,视频 p15–p20)

4.1 下山:梯度下降的直觉

(p15)

梯度下降(gradient descent)是机器学习中最重要的算法之一:它不仅能训练线性回归,还能训练当今最大、最复杂的 AI 模型(包括第二门课要讲的深度学习模型)。而且它可以用来最小化任意函数,不限于线性回归的代价函数。

算法流程:先给参数一个初始猜测(线性回归里常令 w = 0, b = 0),然后反复地、每次稍微调整 w 和 b,努力减小 J,直到 J 收敛到一个最小值。

用"下山"来理解:俯视代价曲面就像看一片有高低起伏的公园,你的目标是尽快走到某个山谷底部。每一步你环顾 360°,问自己"朝哪个方向迈一小步下坡最快?"——数学上这是最陡下降的方向。迈一步,站定,再环顾,再迈……直到到达谷底。

一个有趣的性质:从不同起点出发,可能到达不同的局部最小值(local minimum)。比如从左边出发停在第一个谷底,从稍右边出发会停在另一个谷底。

梯度下降的

📷 梯度下降的"下山"直观:每一步朝最陡下降方向迈一小步
回到原视频 (00:04:00)

4.2 算法与"同时更新"

(p16)

梯度下降的更新规则是:

$$\begin{aligned}

w &:= w - \alpha\,\frac{\partial}{\partial w}\, J(w,b) \ b &:= b - \alpha\,\frac{\partial}{\partial b}\, J(w,b)

\end{aligned}$$

要点:

关键细节:要同时更新 w 和 b。 正确做法是先把两边的右侧都算好,存进临时变量,再一起赋值:

tmp_w = w - alpha * dJ_dw
tmp_b = b - alpha * dJ_db
w = tmp_w
b = tmp_b

而错误做法是"更新完 w 再算 b",此时 b 的表达式里已经用到了新的 w,得到的是另一种算法。它不是同一个梯度下降,虽然有时也能"差不多工作",但不应采用。

梯度下降的更新公式与

📷 梯度下降的更新公式与"同时更新"的正确/错误实现
回到原视频 (00:05:26)

4.3 导数项为什么合理

易错点 M5:$\nabla J$ 是最速上升方向;梯度下降走的是 $-\nabla J$(最速下降)。求导项的符号决定 $w$ 往哪边挪。

(p17)

先把问题简化到只有一个参数 w,看二维图(横轴 w、纵轴 J(w)):

两种情况下梯度下降都在朝最小值走。

切线斜率即导数:导数为正时 w 左移、为负时 w 右移,都在减小 J

📷 切线斜率即导数:导数为正时 w 左移、为负时 w 右移,都在减小 J
回到原视频 (00:02:51)

4.4 学习率 α 的选择

易错点 M6:梯度下降可以越过最低点并来回振荡,只要振幅越来越小,仍会收敛(例如 $4\to-2\to1\to-0.5\to\cdots$)。$\alpha$ 太小 → 太慢;$\alpha$ 太大 → 振荡甚至发散。

(p18)

另一个漂亮的性质:即使 α 固定,随着接近局部最小值,导数会自动变小,因而每一步也自动变小——所以梯度下降会自然"缓步收敛",不需要手动调小学习率。

学习率太大导致越过最小值甚至发散

📷 学习率太大导致越过最小值甚至发散
回到原视频 (00:02:20)

4.5 线性回归的梯度下降

(p19)

把线性回归模型、平方误差代价函数、梯度下降三者合起来,可以推导出两个偏导数:

$$\begin{aligned}

\frac{\partial J}{\partial w} &= \frac{1}{m}\sum_{i=1}^{m}\big(f(x^{(i)}) - y^{(i)}\big)\, x^{(i)} \ \frac{\partial J}{\partial b} &= \frac{1}{m}\sum_{i=1}^{m}\big(f(x^{(i)}) - y^{(i)}\big)

\end{aligned}$$

(推导用到一点微积分;不熟悉微积分完全可以跳过,直接使用这两个公式即可。之所以之前代价函数要除以 2,正是为了让这里的导数更简洁——它把求导时产生的 2 抵消掉了。)

于是线性回归的梯度下降就是反复同时更新:

$$\begin{aligned}

w &:= w - \alpha\,\frac{1}{m}\sum_{i=1}^{m}\big(f(x^{(i)}) - y^{(i)}\big)\, x^{(i)} \ b &:= b - \alpha\,\frac{1}{m}\sum_{i=1}^{m}\big(f(x^{(i)}) - y^{(i)}\big)

\end{aligned}$$

线性回归梯度下降的导数公式与更新规则

📷 线性回归梯度下降的导数公式与更新规则
回到原视频 (00:00:42)

好消息:代价函数是凸的

易错点 M7:凸 ≠ 唯一解。凸保证「局部最小 = 全局最小」;唯一性还要看 $X^\top X$ 是否满秩 / 正定(特征是否相关)。一维判据是 $f''(x)\ge0$;

数学角落:线性回归的 $J(w)=\frac{1}{2m}\lVert Xw-y\rVert^2$ 有二阶导 $\nabla^2 J=\frac1m X^\top X$。因为对任意 $v$ 有 $\lVert Xv\rVert^2\ge0$,所以 $X^\top X\succeq0$(半正定)⇒ $J$ 是凸的。当 $X$ 满列秩时 $X^\top X\succ0$(正定),此时严格凸,最优解唯一。

之前担心"梯度下降可能停在局部最小值",但对线性回归 + 平方误差代价函数来说,代价函数是一个凸函数(convex function)——只有一个全局最小值,不可能有别的局部最小值。因此在凸函数上用梯度下降,只要学习率合适,总会收敛到全局最小值。

平方误差代价函数是凸函数:只有唯一全局最小值

📷 平方误差代价函数是凸函数:只有唯一全局最小值
回到原视频 (00:05:42)

4.6 运行梯度下降(批量梯度下降)

易错点 M11:mini-batch 梯度是样本梯度的平均,batch 越大,随机扰动越容易相互抵消($\mathrm{Var}(\hat g)\propto 1/B$),梯度通常更不 noisy;batch 太小才更抖。

(p20)

以 w = −0.1、b = 900 为起点运行:每更新一步,代价就下降一点,参数 (w, b) 沿一条轨迹前进;左边对应的拟合直线越来越好,直到到达全局最小值——那条拟合相当不错的直线。之后就可以用它预测客户房价(例如 1250 平方英尺 → 约 25 万美元)。

梯度下降的运行轨迹:每次更新代价下降,拟合直线越来越好

📷 梯度下降的运行轨迹:每次更新代价下降,拟合直线越来越好
回到原视频 (00:00:08)

这个过程叫批量梯度下降(batch gradient descent):"批量"指的是每一步都用到全部训练样本(在算导数时对 i = 1..m 求和),而不是只用其中一个子集。名字不算直观,但这就是机器学习界的叫法。

至此,你已经完成了第一个机器学习模型——单变量线性回归。


第五章 多元线性回归与向量化

(对应模块 5,视频 p21–p24)

5.1 从单特征到多特征

(p21)

原版线性回归只有一个特征(房子面积)。但若同时知道卧室数量、楼层数、房龄,显然能得到更好的预测。

引入新符号:用 x₁, x₂, …, xₙ 表示 n 个特征,n 是特征总数(此例 n = 4)。第 i 个训练样本记为 x⁽ⁱ⁾,它是一个包含 n 个数字的向量(也叫行向量);其中第 j 个特征记为 x⁽ⁱ⁾_j(例如 x⁽²⁾₃ 表示第 2 个样本的第 3 个特征,即楼层数 = 2)。

模型则从 wx + b 扩展为:

$$f_{w,b}(x) = w_1 x_1 + w_2 x_2 + w_3 x_3 + w_4 x_4 + b$$

以一个房价模型为例:0.1·x₁ + 4·x₂ + 10·x₃ − 2·x₄ + 80(价格单位千美元)。可以这样解读参数:b = 80 是"没有面积、没有卧室/楼层/房龄"时的基础价 8 万美元;w₁ = 0.1 表示每多 1 平方英尺加 $100;每多一个浴室加 $4,000;每多一层加 $10,000;房龄每多一年减 $2,000。

多元线性回归:用多个特征预测房价

📷 多元线性回归:用多个特征预测房价
回到原视频 (00:04:02)

用向量写得更简洁

把所有 w 收进一个向量 w = [w₁, w₂, …, wₙ],把 x 也写成向量,则模型就是:

$$f_{w,b}(x) = w \cdot x + b \qquad \big(w \cdot x = w_1 x_1 + w_2 x_2 + \cdots + w_n x_n\big)$$

这种"多个输入特征"的线性回归称为多元线性回归(multiple linear regression),以区别于单变量回归。(注意别叫它"多变量回归",那个词在别处另有所指。)

用向量点积简洁地写出多元线性回归模型

📷 用向量点积简洁地写出多元线性回归模型
回到原视频 (00:07:42)

5.2 向量化:让代码更短、更快

(p22)

向量化(vectorization)在实现学习算法时既让代码更简洁,也让运行更高效,还能让你用上现代数值线性代数库甚至 GPU。

设 n = 3,w = [w₁,w₂,w₃]、x = [x₁,x₂,x₃]。三种写法对比:

# 1) 逐项硬写(n 大时不可用)
f = w[0]*x[0] + w[1]*x[1] + w[2]*x[2] + b

# 2) for 循环(比 1 好,但仍未向量化)
f = 0
for j in range(n):
    f += w[j] * x[j]
f += b

# 3) 向量化(一行)
f = np.dot(w, x) + b

(注意 Python/NumPy 索引从 0 开始,而数学记号从 1 开始。)向量化有两个好处:代码更简洁;运行快得多——因为 np.dot 在底层能利用并行硬件(CPU 或 GPU),而不是一个接一个地做加乘。

向量化:np.dot 一行代替 for 循环

📷 向量化:np.dot 一行代替 for 循环
回到原视频 (00:02:45)

5.3 向量化为什么快

(p23)

看一个 for j in range(15) 的循环:它一个时间步算一个——t0 算索引 0,下一步算索引 1……串行执行。

而 NumPy 的向量化函数依靠硬件并行:计算机可以一步取出 w 与 x 的全部值,并行地把每对相乘,再用专用硬件把这 16 个数快速求和,而不是一个接一个地加起来。所以向量化代码在更短时间内完成同样的计算。

当数据很大、模型很大(机器学习里很常见)时,这个区别可能是"一两分钟"对"很多很多小时"。

for 循环逐步串行 vs 向量化一步并行

📷 for 循环逐步串行 vs 向量化一步并行
回到原视频 (00:01:20)

同样的技巧也用在参数更新上:若要把 w₁…w₁₆ 都按 w_j := w_j − 0.1·d_j 更新,向量化写法就是一行 w = w − 0.1 * d,底层并行完成 16 次计算。

5.4 多元线性回归的梯度下降

(p24)

把 w₁…wₙ 收进向量 w 后,模型为 f_w,b(x) = w·x + b,代价函数为 J(w, b)。梯度下降对每个 w_j 更新:

$$\begin{aligned}

w_j &:= w_j - \alpha\,\frac{\partial J}{\partial w_j} \qquad (j = 1,\dots,n) \ b &:= b - \alpha\,\frac{\partial J}{\partial b}

\end{aligned}$$

其中(与单特征情形形式相同,只是把标量换成了向量分量):

$$\begin{aligned}

\frac{\partial J}{\partial w_j} &= \frac{1}{m}\sum_{i=1}^{m}\big(f(x^{(i)}) - y^{(i)}\big)\, x^{(i)}j \ \frac{\partial J}{\partial b} &= \frac{1}{m}\sum{i=1}^{m}\big(f(x^{(i)}) - y^{(i)}\big)

\end{aligned}$$

多元线性回归的梯度下降更新规则

📷 多元线性回归的梯度下降更新规则
回到原视频 (00:02:53)

旁注:正规方程(normal equation) 线性回归还有另一种解法——正规方程:用高级线性代数库一次性解出 w 和 b,不需要迭代。它的缺点是可不推广到逻辑回归、神经网络等其他算法,且当特征数 n 很大时很慢。几乎没有从业者会自己实现它;但如果你调用成熟的库做线性回归,底层可能就是在用正规方程。对本课而言,梯度下降通常是更好的选择。


第六章 让梯度下降更有效

(对应模块 6,视频 p25–p30)

6.1 特征缩放:让取值范围可比

易错点 M8:不缩放通常不改变模型的表达能力,但会影响优化——量纲差异大时,等高线被拉成狭长的「峡谷」,梯度下降 zig-zag、收敛慢、对 $\alpha$ 更敏感。缩放改善的是 conditioning(条件数),不是模型本身。

易错点 M9:预处理($\mu,\sigma$)只在训练集上 fit,然后用同一组训练统计量 transform 验证集 / 测试集 / 线上新数据。让测试集自己重算 $\mu,\sigma$ 数值上也许看着「更准」,但会破坏特征坐标系的一致性,并造成 data leakage。

(p25)

先看特征大小与参数大小的关系。用两个特征预测房价:x₁ = 面积(300–2000 平方英尺),x₂ = 卧室数(0–5)。对一套 2000 平方英尺、5 卧室、售价 50 万美元的房子:

规律是:特征取值范围大 → 合理的参数值小;取值范围小 → 合理的参数值大。

再看散点图:x₁ 的尺度远大于 x₂。这会让代价函数的等高线变成又高又瘦的椭圆(横轴范围窄、纵轴范围大)。若直接在这个数据上跑梯度下降,它会来回反弹很久才到达全局最小值。

特征缩放就是把各特征变换到相近的范围(例如都落在 0–1 附近)。缩放后等高线更接近圆形,梯度下降能走一条更直接的路径到全局最小值,快得多。

特征范围差异导致瘦长的等高线,梯度下降来回震荡

📷 特征范围差异导致瘦长的等高线,梯度下降来回震荡
回到原视频 (00:03:30)

6.2 三种常见的缩放方法

(p26)

  1. 除以最大值:如 x₁ 除以 2000 → 落在 0.15–1;x₂ 除以 5 → 落在 0–1。
  2. 均值归一化:x := (x − μ) / (最大值 − 最小值),使数据以 0 为中心(如 x₁ → −0.18~0.82,x₂ → −0.46~0.54)。
  3. Z 分数归一化(z-score):x := (x − μ) / σ,μ 是均值、σ 是标准差(例如 x₁ → −0.67~3.1,x₂ → −1.6~1.9)。
均值归一化:先减均值,再除以范围

📷 均值归一化:先减均值,再除以范围
回到原视频 (00:01:01)

经验法则:让每个特征大致落在 −1 到 +1 附近即可,不必严格。范围在 −3~3 或 −0.3~0.3 都可以接受;但若是 −100~100,或 −0.001~0.001,或像"体温 98.6~105"这种整体偏大的量,就该缩放。做特征缩放几乎没有坏处——拿不准就做。

6.3 判断梯度下降是否收敛

(p27)

实用做法:画学习曲线——横轴是迭代次数,纵轴是每次迭代后在训练集上算出的代价 J。

也有自动收敛测试:若某次迭代 J 的下降量小于阈值 ε(如 0.001)就宣布收敛。但选 ε 很困难,吴恩达更倾向直接看图。

学习曲线:横轴迭代次数、纵轴代价 J

📷 学习曲线:横轴迭代次数、纵轴代价 J
回到原视频 (00:01:07)

6.4 选择学习率 α

(p28)

调试技巧:把 α 设成非常小,看 J 是否每次迭代都下降。如果连很小的 α 都不能让 J 稳定下降,那多半是代码有 bug。

实用策略:试一系列 α(如 0.001 → 0.003 → 0.01 → 0.03 → 0.1,每次约 3 倍),画出各自的 J-迭代曲线;先找到一个太小、再找到一个太大,然后取略小于最大合理值的那个。

α 太大导致代价上升/震荡

📷 α 太大导致代价上升/震荡
回到原视频 (00:00:38)

6.5 特征工程

(p29)

特征选择/设计对算法性能影响巨大,在很多实际应用里,选对特征是让算法跑好的关键。

例子:预测房价,只有两个特征——地块临街宽度 x₁、地块深度 x₂。你可能会意识到土地面积 = 宽度 × 深度更能预测价格,于是定义新特征 x₃ = x₁ × x₂。这时模型 w₁x₁ + w₂x₂ + w₃x₃ + b 可以让数据自己决定究竟"宽度、深度、还是面积"最重要。

这种"用对问题的理解/直觉,通过变换或组合原始特征来设计新特征、让算法更容易做准确预测"的做法,就叫特征工程(feature engineering)。

特征工程:用

📷 特征工程:用"宽度×深度"造出更有预测力的"面积"特征
回到原视频 (00:00:56)

6.6 多项式回归:拟合曲线

(p30)

把多元线性回归与特征工程结合,就能拟合曲线——多项式回归(polynomial regression)。

对"面积 vs 房价"的数据,直线拟合并不好。可以尝试:

重要提醒:一旦构造出高次幂特征,特征缩放变得更重要——若面积 1–1000,则 x² 是 1–10⁶、x³ 是 1–10⁹,取值范围天差地别,必须缩放。

至于"到底该选哪些特征/哪种模型",第二门课会给出系统的方法与评估流程。

多项式回归:用 x、x²、x³ 拟合曲线

📷 多项式回归:用 x、x²、x³ 拟合曲线
回到原视频 (00:00:34)

工具旁注:Scikit-learn 是极其广泛使用的开源机器学习库。虽然本课强调"自己实现"才能扎实理解,但在真实工作中,你很可能用 Scikit-learn 等库几行代码就训练出模型。


第七章 逻辑回归与决策边界

(对应模块 7,视频 p31–p33)

7.1 为什么线性回归不适合分类

(p31)

分类(classification)问题中,输出 y 只取少数几个可能值(而非任意数值)。常见例子:

只有两个可能输出的分类叫二元分类(binary classification)。约定用 0/1 表示两个类别(0 = 假/否,1 = 真/是),也常叫 负类(negative) 与 正类(positive)——注意"正/负"只表示"存在/不存在"(如"是否垃圾"的"是/否"),不含好坏褒贬,两个方向怎么指派是任意的。

先试试用线性回归做分类(画肿瘤大小 vs y∈{0,1},再取阈值 0.5):看起来还凑合。但只要在最右边加一个训练样本,最佳拟合线就被拉过去,0.5 对应的决策边界(decision boundary)向右移动,分类结果就变差了——而那个新样本本不该改变我们的结论。

所以线性回归不是分类的好算法:它的输出可以 <0 或 >1,还会被极端样本带偏。我们需要一个新算法 逻辑回归(logistic regression)——尽管名字里有"回归",它其实是分类算法(历史命名),输出总在 0 和 1 之间。

线性回归做分类:加一个极端样本就会把决策边界带偏

📷 线性回归做分类:加一个极端样本就会把决策边界带偏
回到原视频 (00:06:42)

7.2 Sigmoid 函数与逻辑回归模型

易错点 M10:$p_i=\sigma(w^\top x_i+b)$ 永远表示「类别 1 的概率」 $P(y_i=1\mid x_i)$,不是「真实标签发生的概率」。因此 $y_i=1$ 时,真实类别概率 = $p_i$;$y_i=0$ 时,真实类别概率 = $1-p_i$。

(p32)

逻辑回归用到 Sigmoid 函数(也叫逻辑函数)g(z):

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

性质:z 很大时 g(z) ≈ 1;z 很小时 g(z) ≈ 0;z = 0 时 g(z) = 0.5。因此它就是一条把实数映射到 (0,1) 的 S 形曲线。

Sigmoid 函数:输出总在 0 与 1 之间,z=0 时取 0.5

📷 Sigmoid 函数:输出总在 0 与 1 之间,z=0 时取 0.5
回到原视频 (00:02:26)

逻辑回归模型分两步:

$$\begin{aligned}

z &= w \cdot x + b \ f(x) &= g(z) = \frac{1}{1 + e^{-(w \cdot x + b)}}

\end{aligned}$$

逻辑回归模型 = Sigmoid(w·x + b)

📷 逻辑回归模型 = Sigmoid(w·x + b)
回到原视频 (00:05:12)

如何解释输出

把 f(x) 解释为:在给定输入 x 时,y = 1 的概率。例如模型输出 0.7,表示"这个肿瘤有 70% 的概率是恶性的"。由于 y 只能是 0 或 1,两个概率之和为 1:若 P(y=1) = 0.7,则 P(y=0) = 0.3。

(论文里可能写成 f(x) = P(y=1 | x; w, b),分号表示 w、b 是影响该计算的参数;本课不需要记这些记号。)

有趣的历史:很长一段时间里,很多互联网广告其实是由略微变形的逻辑回归驱动的——它决定了在大型网站上给你看哪些广告,价值巨大。

7.3 决策边界

(p33)

要从概率变成 0/1 预测,通常取阈值 0.5:f(x) ≥ 0.5 → ŷ = 1,否则 ŷ = 0。

由 Sigmoid 的性质可推出:f(x) ≥ 0.5 当且仅当 z = w·x + b ≥ 0。因此:

使 w·x + b = 0 的那条线,就叫决策边界(decision boundary)——它是你对"y=0 还是 y=1"恰好中立的地方。

例(线性边界):两个特征 x₁、x₂,取 w₁ = w₂ = 1、b = −3,则决策边界是 x₁ + x₂ = 3(一条直线);在它右侧预测 1,左侧预测 0。参数不同,边界就是另一条线。

决策边界:x₁ + x₂ = 3 把平面分成预测 1 / 预测 0 两半

📷 决策边界:x₁ + x₂ = 3 把平面分成预测 1 / 预测 0 两半
回到原视频 (00:05:13)

例(非线性边界):加入多项式特征,令 z = w₁x₁² + w₂x₂² + b。取 w₁ = w₂ = 1、b = −1,则决策边界是 x₁² + x₂² = 1(一个圆):圆外预测 1,圆内预测 0。用更高阶的多项式项还能得到椭圆乃至更复杂的形状。

用多项式特征得到圆形等非线性决策边界

📷 用多项式特征得到圆形等非线性决策边界
回到原视频 (00:08:00)

要点:如果只用 x₁、x₂ 等原始特征(不含高阶多项式),逻辑回归的决策边界永远是线性的;加入多项式特征才能得到复杂边界。


第八章 逻辑回归的代价函数

(对应模块 8,视频 p34–p35)

8.1 为什么平方误差不好用

(p34)

训练逻辑回归同样要选 w、b。若沿用线性回归的平方误差代价函数,把 f(x) = 1/(1+e^{−(wx+b)}) 代进去——得到的代价函数会非凸(non-convex),形状崎岖、有很多局部最小值,梯度下降容易陷进去。

所以逻辑回归需要一个新的、能保证凸性的代价函数。

把 Sigmoid 代入平方误差会得到非凸、崎岖的代价曲面

📷 把 Sigmoid 代入平方误差会得到非凸、崎岖的代价曲面
回到原视频 (00:02:18)

8.2 逻辑损失函数

数学角落(Likelihood → NLL → BCE):把每个样本的 Bernoulli 似然乘起来,取对数($\log$ 严格递增,保住 argmax),再取负号($\max f\iff\min(-f)$),就得到负对数似然 NLL,展开正是 二元交叉熵 BCE:$-\big[y\log p+(1-y)\log(1-p)\big]$。语义上:NLL 在惩罚模型「不相信真实发生的那个标签」。

(p34)

把代价定义里的每一项叫单个样本的损失 L(f(x), y)。逻辑回归用对数损失:

$$L\big(f(x), y\big) = \begin{cases} -\log\big(f(x)\big), & y = 1 \\[2pt] -\log\big(1 - f(x)\big), & y = 0 \end{cases}$$

为什么合理? 分两种情况看(注意 f 始终在 (0,1)):

y=1 时的损失 −log(f):预测越接近 1 损失越小

📷 y=1 时的损失 −log(f):预测越接近 1 损失越小
回到原视频 (00:04:39)

y=0 时的损失 −log(1−f):预测越接近 0 损失越小

📷 y=0 时的损失 −log(1−f):预测越接近 0 损失越小
回到原视频 (00:07:43)

这个损失函数是从统计学的最大似然估计(maximum likelihood estimation)推导出来的,并且保证整体代价函数是凸的——因此梯度下降能可靠地找到全局最小值。(凸性的证明超出本课范围。)

8.3 简化写法

(p35)

因为二元分类里 y 只能是 0 或 1,两段式损失可以合并成一行:

$$L\big(f(x), y\big) = -\,y\log\big(f(x)\big) - (1 - y)\log\big(1 - f(x)\big)$$

验证:y = 1 时第二项为 0,只剩 −log(f);y = 0 时第一项为 0,只剩 −log(1−f)。

于是逻辑回归的代价函数(对全体样本取平均):

$$J(w,b) = -\frac{1}{m}\sum_{i=1}^{m}\Big[\, y^{(i)}\log\big(f(x^{(i)})\big) + \big(1 - y^{(i)}\big)\log\big(1 - f(x^{(i)})\big) \Big]$$

逻辑回归损失的简化写法与整体代价函数

📷 逻辑回归损失的简化写法与整体代价函数
回到原视频 (00:00:53)


第九章 逻辑回归的梯度下降实现

(对应模块 9,视频 p36)

(p36)

用梯度下降最小化逻辑回归的代价函数 J(w, b),更新规则是:

$$\begin{aligned}

w_j &:= w_j - \alpha\,\frac{1}{m}\sum_{i=1}^{m}\big(f(x^{(i)}) - y^{(i)}\big)\, x^{(i)}j \ b &:= b - \alpha\,\frac{1}{m}\sum{i=1}^{m}\big(f(x^{(i)}) - y^{(i)}\big)

\end{aligned}$$

一个容易让人困惑的点:这两个公式在形式上和线性回归的梯度下降一模一样!但它们是两个完全不同的算法——因为 f(x) 的定义变了:线性回归里 f(x) = w·x + b,而逻辑回归里 f(x) = g(w·x + b)(Sigmoid)。

其余要点:

逻辑回归的梯度下降:形式与线性回归相同,但 f(x) 不同

📷 逻辑回归的梯度下降:形式与线性回归相同,但 f(x) 不同
回到原视频 (00:02:42)

工具旁注:也可以用 Scikit-learn 几行代码训练逻辑回归分类器——这是产业界很多从业者的日常。


第十章 过拟合与正则化

(对应模块 10,视频 p37–p41)

10.1 欠拟合与过拟合

(p37)

用"房价 vs 面积"的三组拟合来说明:

欠拟合(高偏差):直线拟合弯曲数据

📷 欠拟合(高偏差):直线拟合弯曲数据
回到原视频 (00:01:41)

恰到好处:二次拟合既贴合又泛化

📷 恰到好处:二次拟合既贴合又泛化
回到原视频 (00:03:52)

过拟合(高方差):四阶多项式穿过所有点但剧烈波动

📷 过拟合(高方差):四阶多项式穿过所有点但剧烈波动
回到原视频 (00:04:45)

术语提醒:机器学习里"过拟合 = 高方差"、"欠拟合 = 高偏差"常被当作同义词使用。另外,"偏差"在机器学习中还有社会公平层面的含义(对某性别/种族的偏见)——这个同样至关重要,但和这里的"高偏差"是两回事。

分类问题同样会欠拟合/过拟合:用简单线性边界 → 欠拟合;用合适的多项式(如椭圆边界)→ 恰好;用非常高的阶数去完美分割每个训练点 → 过拟合。

金发姑娘(Goldilocks)比喻:粥太冷不行、太热也不行,不冷不热刚刚好。机器学习的目标,就是找到一个既不过拟合、也不欠拟合的模型——既没有高偏差、也没有高方差。

10.2 三种对付过拟合的方法

(p38)

  1. 收集更多训练数据:数据越多,算法越不容易去拟合噪声,即使仍用高阶多项式也能表现不错。很有效,但往往不可行(比如当地只有那么多房子)。
  2. 减少特征(特征选择 feature selection):只保留最相关的特征子集。缺点是会丢掉信息——被丢掉的特征可能本来有用。(第二门课会讲自动选特征的算法。)
  3. 正则化(regularization):保留所有特征,但缩小参数值。这是本课重点,也是吴恩达最常用的技术。

正则化的直觉:过拟合模型的参数往往很大;把某个特征对应的参数设为 0,等价于删掉该特征。而正则化是一种更温和的做法——不删特征,只是"压制"它们的影响,让参数都变小。经验上,只要能让高阶多项式模型用较小的参数,就能得到更平滑、更好泛化、不易过拟合的曲线。

(按惯例,通常只正则化 w₁…wₙ,不正则化 b——是否正则化 b 差别很小。)

正则化:把参数

📷 正则化:把参数"压制"得更小,而不是直接删特征
回到原视频 (00:03:46)

10.3 正则化的代价函数

易错点 M13:Ridge 的直接 inductive bias 是「偏好小的 $\lVert w\rVert_2$」;「方差下降、稳定性上升、偏差上升」是它的统计后果——不要把「降低 variance」当成正则化本身的偏好。

易错点 M14:$\lambda$ 大 → 约束强 → 高 bias → 欠拟合;$\lambda$ 小 → 约束弱 → 高 variance → 过拟合。别记反。

(p39)

若已知该惩罚哪些特征,可以在代价里给它们加大权重(如 1000·w₃² + 1000·w₄²),迫使 w₃、w₄ 趋近于 0。但实际中特征很多、往往不知道该惩罚谁,于是对所有 w_j 一起惩罚:

$$J(w,b) = \underbrace{\frac{1}{2m}\sum_{i=1}^{m}\big(f(x^{(i)}) - y^{(i)}\big)^2}_{\text{平方误差项}} + \underbrace{\frac{\lambda}{2m}\sum_{j=1}^{n} w_j^2}_{\text{正则化项}}$$

λ 的两种极端:

所以要选一个介于两者之间的 λ,平衡"拟合数据"与"保持参数小"。(模型选择那一部分会讲如何选 λ。)

正则化代价函数:平方误差项 + λ·参数平方项

📷 正则化代价函数:平方误差项 + λ·参数平方项
回到原视频 (00:03:58)

λ 过大导致所有参数被压到接近 0,模型欠拟合

📷 λ 过大导致所有参数被压到接近 0,模型欠拟合
回到原视频 (00:07:11)

10.4 正则化线性回归

数学角落:Ridge 的闭式解 $(X^\top X+\lambda I)^{-1}X^\top y$ 相当于把 $X^\top X$ 的特征值整体上移:$\mu_i\to\mu_i+\lambda$。于是原本很小的方向不再被求逆时疯狂放大——这就是 Ridge 改善共线性 / ill-conditioning(小特征值放大噪声)的机制。

(p40)

对正则化后的代价函数求导,唯一的变化是 w_j 的导数多了一项 (λ/m)·w_j(b 的导数不变,因为不正则化 b)。于是更新规则为:

$$\begin{aligned}

w_j &:= w_j - \alpha\left[\, \frac{1}{m}\sum_{i=1}^{m}\big(f(x^{(i)}) - y^{(i)}\big)\, x^{(i)}j + \frac{\lambda}{m} w_j \right] \ b &:= b - \alpha\,\frac{1}{m}\sum{i=1}^{m}\big(f(x^{(i)}) - y^{(i)}\big)

\end{aligned}$$

把 w_j 的更新式整理一下,可以更清楚地看到正则化的作用:

$$w_j := \underbrace{w_j\Big(1 - \alpha\frac{\lambda}{m}\Big)}_{\text{略小于 }1} - \alpha\,\frac{1}{m}\sum_{i=1}^{m}\big(f(x^{(i)}) - y^{(i)}\big)\, x^{(i)}_j$$

即:每次迭代先把 w_j 乘以一个略小于 1 的数(把它"缩小一点点"),再做常规的梯度更新。这就是"正则化在每一步都稍微收缩参数"的含义。

正则化线性回归的梯度下降更新规则

📷 正则化线性回归的梯度下降更新规则
回到原视频 (00:02:24)

10.5 正则化逻辑回归

(p41)

思路完全相同:在逻辑回归的代价函数后加上同样的正则项

$$\frac{\lambda}{2m}\sum_{j=1}^{n} w_j^2$$

于是梯度下降的更新式与正则化线性回归形式上一致——唯一区别仍是 f(x) 的定义不同(逻辑回归用的是 Sigmoid):

$$\begin{aligned}

w_j &:= w_j - \alpha\left[\, \frac{1}{m}\sum_{i=1}^{m}\big(f(x^{(i)}) - y^{(i)}\big)\, x^{(i)}j + \frac{\lambda}{m} w_j \right] \ b &:= b - \alpha\,\frac{1}{m}\sum{i=1}^{m}\big(f(x^{(i)}) - y^{(i)}\big)

\end{aligned}$$

效果是:即使使用了大量的高阶多项式特征,也能得到更合理、能泛化的决策边界,而不是去完美地穿过每个训练点。

正则化逻辑回归:即使特征很多也能得到合理的决策边界

📷 正则化逻辑回归:即使特征很多也能得到合理的决策边界
回到原视频 (00:01:13)


自测与思考题(进阶)

按你的反馈,这里刻意不做「二选一 / 定义复述」题,而是反例、推导、错误诊断、参数变化、迁移类型。

  1. 诊断收敛:A 的 $J$ 从 2.3 单调降到 0.5 后几乎不动;B 的 $J$ 在 $0.9\leftrightarrow1.3$ 之间来回跳。分别更像 $\alpha$ 太小、合适、还是太大?
  2. 构造反例:给一组线性回归数据,使最优参数不唯一;并说明此时 $X^\top X$ 有什么性质。
  3. 推导:说明 $\nabla^2 J=\frac1m X^\top X\succeq0$,并指出何时是正定(严格凸)。
  4. 迁移 / 参数变化:把特征单位从「米」换成「厘米」($\times100$)。最优 $\hat y$ 会变吗?$J$ 的等高线形状会变吗?梯度下降更难还是更容易?为什么?
  5. 纠错:有人说「测试集自己重算 $\mu,\sigma$ 更准,所以 train/test 应各算各的」。指出其中的两个错误。
  6. 参数变化:Ridge 中令 $\lambda\to\infty$,$\hat y$ 会变成什么?偏差 / 方差各如何变化?
  7. 对比:逻辑回归里 $(y=0,p=0.9)$ 与 $(y=1,p=0.9)$,哪个 NLL 更大?为什么?
  8. 几何连接:为什么 feature scaling 后等高线从狭长椭圆趋向圆?把它和 condition number 联系起来。

参考答案要点

  1. A 更像 $\alpha$ 合适但收敛后趋平(或偏小、很慢);B 在最小值两侧振荡,更像 $\alpha$ 偏大(接近 $2/\lambda_{\max}$ 的上限)。关键是看是否发散与振幅是否递减。
  2. 例如 $x_2=x_1$、$y=4x_1$:任意 $w_1+w_2=4$ 都给出完全相同的预测,数据无法分辨 $w_1,w_2$。此时 $X$ 列相关,$X^\top X$ 奇异(有零特征值),不是正定。
  3. $J$ 的梯度是 $\frac1m X^\top(Xw-y)$,再求导得 $\frac1m X^\top X$;$v^\top X^\top Xv=\lVert Xv\rVert^2\ge0$ ⇒ 半正定。当 $X$ 满列秩时 $Xv=0\Rightarrow v=0$,故正定、严格凸、解唯一。
  4. $\hat y$(预测)不变(只是参数坐标缩放:$w_1$ 变为原来的 $1/100$)。但等高线形状会变:未缩放时该方向被拉伸,等高线更狭长、condition number 更差、GD 更慢、对 $\alpha$ 更敏感;缩放让各方向尺度可比,$\kappa$ 下降,GD 更容易。
  5. 错误一:破坏了训练时假设的特征坐标系(模型学到的是 train 的 $\mu,\sigma$);错误二:用了测试集信息 → data leakage,测试结果不再可信。
  6. $w\to0$,$\hat y\to b$(近似常数预测器,$b\approx\bar y$);偏差 ↑、方差 ↓,最终欠拟合。
  7. $(y=0,p=0.9)$ 的 NLL 更大:$-\log(1-0.9)=-\log0.1\approx2.30$,而 $(y=1,p=0.9)$ 为 $-\log0.9\approx0.105$。模型「越不相信真实标签」,惩罚越大。
  8. 缩放把各特征方向的尺度拉齐,$X^\top X$ 的特征值比值 $\lambda_{\max}/\lambda_{\min}$ 变小(condition number 下降),等高线椭圆的长短轴之比随之变小、趋向圆;GD 在圆上各方向步长一致,收敛更快。

结语

恭喜你完成了本册——《吴恩达机器学习(新版)》第一门课的全部内容。你已经掌握:

吴恩达在结尾鼓励道:理解并能应用线性回归与逻辑回归,已经足以做出一些非常有价值的产品——而在实战中知道何时、如何减少过拟合,同样是一项宝贵的能力。

下一门课预告:本专项第二门课将进入神经网络(深度学习)。它的构建会大量复用你已经学到的东西——代价函数、梯度下降、Sigmoid 函数。


附:来源与参考

版权说明:课程视频、字幕与讲义版权归 DeepLearning.AI / Stanford 所有。本电子书为个人学习所做的中文书面重构,未获授权,不得用于任何商业用途或公开传播。书中截图取自对应分P视频画面,并在图旁标注了「分P号 @ 时间」以便回源核对。