← 全部章节

P01 · 第 1 讲

机器学习基本概念简介

50:00

本章目录(7 节)
  1. 一、本节的问题与直观理解
  2. 二、核心知识:模型、损失、优化
  3. 三、关键推导:线性模型为什么不够,sigmoid 从哪来
  4. 四、易错点
  5. 五、自测
  6. 六、30 秒速记
  7. 七、和其他 P 的关系
项 内容
课程版本 李宏毅《機器學習 2021 Spring》第 1 讲上半:預測本頻道觀看人數(上)
视频分 P https://www.bilibili.com/video/BV1ou411N7X3?p=1 (50:00;搬运合集,UP 主非李宏毅官方账号)
官方讲义 regression (v16).pdf,61 页
材料说明 对应官方讲义整理+必要补充,非视频逐字稿

页码约定:下文「PDF 第 n 页」指 PDF 物理页(封面算第 1 页)。幻灯片页脚自带编号可能与之相差 1–2 页,引用时以物理页为准。B 站匿名接口无字幕、YouTube 官方源也没有 captionTracks,因此本笔记不写任何视频时间戳,也不假装逐句听过讲。P1 与 P2 共用同一份讲义,本文按「线性模型→损失→梯度下降→分段线性与 sigmoid」切分上集主题,P2 从参数集合与优化继续;这是按讲义主题切分,不是对画面的逐段核对。

一、本节的问题与直观理解

本节只问一件事:能不能用昨天的数字猜今天的数字?讲义第 8 页把目标写成 \(y=f(\cdot)\),\(y\) 是 2/26 的观看次数,输入是 2/25 的观看次数;第 2 页把机器学习更一般地定义为 “looking for function”,语音辨识、影像辨识、下围棋都只是形状不同的函数。这个视角的价值在于把「学习」拆成三个可以动手的步骤:写下一个带未知参数的功能模板,定义「这组参数有多差」,再用数据把参数调到最不差。第 3–5 页按输出类型分成三类:输出标量是 regression,从固定选项里选一个是 classification,输出有结构的对象(图像、文件)是 structured learning。本节只做第一类。

直观上 \(y=b+wx_1\) 就是「今天的人数约等于昨天的人数乘一个比例,再加一点底噪」。\(w\) 控制放大或缩小,\(b\) 控制整体抬高或压低。第 9 页特意注明这个式子是 “based on domain knowledge”:模板不是从数据里长出来的,是人先猜的,数据只负责定 \(w,b\)。这句话在整门课里反复出现——模型结构决定「能不能表达」,优化只决定「在能表达的范围内找得多好」。

二、核心知识:模型、损失、优化

模型。 单特征时 \(y=b+wx_1\),\(x_1\) 是 feature,\(w\) 是 weight,\(b\) 是 bias,三者都是标量。多特征时

$$y=b+\sum_{j=1}^{D} w_j x_j,\qquad \mathbf{x}\in\mathbb{R}^{D},\ \mathbf{w}\in\mathbb{R}^{D},\ b\in\mathbb{R}.$$

注意这只是把输入从 1 维换成 \(D\) 维,函数对参数仍然是线性的,表达能力没有质变。

损失。 损失是参数的函数,不是数据的函数。第 12 页并排列出三种误差:

$$L=\frac{1}{N}\sum_{n=1}^{N} e_n,\qquad e_n=\lvert y_n-\hat y_n\rvert\ \text{(MAE)},\qquad e_n=(y_n-\hat y_n)^2\ \text{(MSE)}.$$

若 \(y\) 与 \(\hat y\) 都是概率分布,则用 cross-entropy。除以 \(N\) 只是把「总误差」换成「平均误差」,不改变最优参数,但会改变梯度的尺度,从而改变学习率的合适取值。把 \(L(b,w)\) 画在参数平面上就是第 13 页的 error surface:每个点是一组参数,颜色是损失。

优化。 第 14–15 页的梯度下降:

$$w^{t+1}\leftarrow w^{t}-\eta\left.\frac{\partial L}{\partial w}\right|_{w=w^{t}},$$

\(\eta\) 是 learning rate,第 15 页明确标它为 hyperparameter——它是人设的,不是学出来的。第 16 页画出 local minima 与 global minima,但只是提问 “Does local minima truly cause the problem?”,并没有把局部最优当成结论;对线性回归这种凸问题,P13 第 15 页会明确说没有 local optimal。

讲义跑出来的结果。 用 2017–2020 的数据训练,第 19 页给出 \(w^*=0.97,\ b^*=0.1k\),训练损失 \(L=0.48k\);换成 2021 年的新数据,第 20 页给出 \(L'=0.58k\)。这里的 \(L\) 是平均平方误差(误差以千次为单位),不能直接读成「平均差 480 次观看」;若要换成误差量级,应开根号,\(\sqrt{0.48}\approx0.69\),约七百次。第 22 页把特征从 1 个加到 2 个、3 个,训练/测试损失从 \(0.48/0.58\) 降到 \(0.38/0.49\) 再到 \(0.33/0.46\)(单位 k);7 特征那组 \(b=0.05k\),训练 0.32k、测试 0.46k。收益在递减,但方向是对的。

三、关键推导:线性模型为什么不够,sigmoid 从哪来

第 23 页先指出硬限制:\(y=b+wx_1\) 对 \(x_1\) 单调,\(w>0\) 一路升、\(w<0\) 一路降,画不出「先升后降再升」。这不是优化没做好,而是模型本身表达不了,属于 model bias。

第 24–26 页给出补救的几何直觉:任何分段线性曲线都可以写成「一个常数 + 一堆折线(hard sigmoid)」。折线越多,越能逼近一条连续曲线。问题只剩「折线怎么写进可微的式子里」。第 27 页用 sigmoid 代替 hard sigmoid:

$$\sigma(z)=\frac{1}{1+e^{-z}},\qquad y=c\,\sigma(b+wx_1).$$

三个参数分工很清楚:\(c\) 改高度,\(b\) 左右平移,\(w\) 改陡峭程度与方向(第 28 页)。单个 sigmoid 是一条平滑的 S 形,两个方向相反的 sigmoid 相减就得到一个「凸起」,多个凸起相加再加常数,就能拼出任意分段线性的形状(第 29 页):

$$y=b+\sum_{i=1}^{K}c_i\,\sigma\!\left(b_i+\sum_{j=1}^{D}w_{ij}x_j\right).$$

写成矩阵就是后续所有网络的原型(第 32–37 页):

$$\mathbf{r}=W\mathbf{x}+\mathbf{b},\quad \mathbf{a}=\sigma(\mathbf{r}),\quad y=\mathbf{c}^{\top}\mathbf{a}+b,$$

其中 \(\mathbf{x}\in\mathbb{R}^{D}\)、\(W\in\mathbb{R}^{K\times D}\)、\(\mathbf{b}\in\mathbb{R}^{K}\)、\(\mathbf{r},\mathbf{a}\in\mathbb{R}^{K}\)、\(\mathbf{c}\in\mathbb{R}^{K}\)。\(K\) 是 sigmoid 的个数,也是「隐藏层神经元数」。这一串维度要能背下来:输入维数决定 \(W\) 的列数,神经元数决定 \(W\) 的行数。

局部导数(复习补充,自编小例)。 取 \(x=(1.0,-0.5)\)、\(w=(0.8,-0.3)\)、\(b=0.1\)、\(c=1.5\),则 \(z=1.05\)、\(a=\sigma(z)=0.740775\)、\(y=ca=1.111162\)。对三个参数分别求偏导:

$$\frac{\partial y}{\partial c}=a=0.740775,\qquad \frac{\partial y}{\partial b}=c\,a(1-a)=0.288041,\qquad \frac{\partial y}{\partial \mathbf{w}}=c\,a(1-a)\,\mathbf{x}=(0.288041,\,-0.144021).$$

用中心差分 \((f(w+\epsilon)-f(w-\epsilon))/2\epsilon\) 复核,两个分量分别是 \(0.288041\) 与 \(-0.144021\),与解析值一致到 \(10^{-10}\)。这个例子说明一件事:sigmoid 的导数 \(a(1-a)\) 会同时缩放所有上游梯度,\(a\) 接近 0 或 1 时梯度几乎消失——这是后面深层网络难训的根源之一,本节只是埋下伏笔。

复习补充:梯度下降确实会走到最小二乘解。 取三个点 \((1,2),(2,4),(3,5)\),用 \(L=\frac1N\sum(y-\hat y)^2\)、\(\eta=0.05\)、从 \(b=w=0\) 迭代 200 步,得到 \(b=0.666158\)、\(w=1.500224\),MSE \(=0.055556\);闭式最小二乘解是 \(b=2/3\)、\(w=1.5\),MSE \(=0.055556\)。两者一致,说明在这个凸问题里「优化」不是瓶颈,瓶颈在模型与特征。

四、易错点

  1. MSE 与 MAE 不是同一把尺。 MSE 对大误差惩罚更重、处处可导;MAE 对小误差更宽容,但在 \(e=0\) 处不可导,梯度是符号函数。讲义第 12 页把两者并列,后续实验表格用的是平方误差,比较数字时不要混用。
  2. 训练损失小不等于模型好。 第 22 页 3 特征模型训练 0.33k、测试 0.46k,差距就是泛化 gap;把训练损失继续压低(加特征、加复杂度)不保证测试变好,这一点 P2 的实验表会放大成过拟合。
  3. 学习率不是学出来的。 它出现在更新式里但不在梯度里,是 hyperparameter;调它等于调「每步走多远」,与调模型参数是两类动作。
  4. 「线性模型 + 更多特征」仍然是线性模型。 特征从 1 维加到 7 维只是换了一组基,输出对参数依旧线性;要突破单调性必须换激活函数或换结构。
  5. 第 16 页的 local minima 是提问不是结论。 对线性回归,损失是凸的(P13 第 15 页),梯度下降不会卡在局部最优;把这句话套到深度网络上才是真问题。

五、自测

Q1. 讲义里 \(L=\frac1N\sum e_n\) 的 \(1/N\) 去掉,最优的 \(w,b\) 会变吗?学习率该怎么调?

参考答案

最优参数不变,因为正的常数因子不改变 \(\arg\min\)。但梯度整体放大 \(N\) 倍,同样的 \(\eta\) 相当于步长放大 \(N\) 倍,容易震荡或发散,所以 \(\eta\) 通常要按 \(1/N\) 缩小。工程上除以 \(N\) 主要是让学习率的量级与批量大小解耦。

Q2. 训练集损失 0.48k、2021 年数据 0.58k,这个差距说明优化没做好吗?

参考答案

不是。0.48k 已经接近该模型在训练集上的最优,0.58k 是分布外数据的误差,属于泛化差距。要缩小它得改模型或加有效特征,而不是继续调梯度下降。

Q3. 用 \(K\) 个 sigmoid、\(D\) 个特征,模型有多少个可学参数?

参考答案

每个 sigmoid 有 \(D\) 个 \(w_{ij}\)、1 个 \(b_i\)、1 个 \(c_i\),共 \(K(D+2)\) 个,再加输出偏置 \(b\),总计 \(K(D+2)+1\)。用矩阵看就是 \(W\) 的 \(KD\) 个元素、\(\mathbf{b}\) 的 \(K\) 个、\(\mathbf{c}\) 的 \(K\) 个,加 1。

Q4. 为什么两个方向相反的 sigmoid 能拼出一个「凸起」,而单个 sigmoid 不行?

参考答案

单个 sigmoid 单调,只能从低到高(或反向)走一次。两个相减时,一个先上升、另一个在稍后位置把值拉回去,叠加后形成中间高、两边低的局部凸起;多个凸起平移相加即可逼近任意分段线性曲线。

六、30 秒速记

找函数 → 三类输出(regression / classification / structured)→ 三步(模板、损失、优化)→ \(y=b+wx_1\) 只能单调 → 分段线性 = 常数 + 折线 → 折线用 sigmoid 平滑化 → \(y=b+\sum_i c_i\sigma(b_i+\sum_j w_{ij}x_j)\) → 矩阵 \(\mathbf{r}=W\mathbf{x}+\mathbf{b}\)、\(\mathbf{a}=\sigma(\mathbf{r})\)、\(y=\mathbf{c}^\top\mathbf{a}+b\)。训练 0.48k、测试 0.58k,差距是泛化不是优化。

七、和其他 P 的关系

来源与说明

基于对应官方讲义整理,未取到完整视频字幕;不冒充逐字稿。