← 全部章节

P15 · 第 15 讲

逻辑回归

1:07:13

本章目录(13 节)
  1. 1. 本节要解决什么问题
  2. 2. 直观:为什么是 sigmoid
  3. 3. 符号与维度
  4. 4. 从最大似然到交叉熵
  5. 5. 梯度:为什么恰好是 \(p-y\)
  6. 6. 为什么不用平方误差
  7. 7. 多分类:softmax 与交叉熵
  8. 8. 判别式 vs 生成式:同一个模型,不同的解
  9. 9. 局限:一条直线切不开 XOR
  10. 10. 讲义原例(有页码才称课堂例)
  11. 11. 易错对照
  12. 12. 自测(先自己写,再展开)
  13. 13. 30 秒速记

分P:P15 · BV1ou411N7X3?p=15 · 时长 1:07:13 · cid 1250615504 官方源:ML Lecture 5: Logistic Regression(YouTube hSXFuypLukA,2017-01-28 上传,4034 s,与 B 站时长差 1 s) 课程版本:2016/17 台大 ML Lecture 系列(旧课),不是 2021 版 讲义:Logistic Regression (v3).pdf,31 页;下文页码一律指 PDF 物理页 依据与边界:B 站匿名 player/v2 返回 subtitle.list=[] 且 need_login_subtitle=true,YouTube 官方源亦无 captionTracks。因此本笔记没有看视频画面、没有逐字稿,所有内容由讲义文字层 + 公式重推得到;凡称"讲义原例"处均给出页码,凡我自己补的例子均标【补充】。


1. 本节要解决什么问题

讲义 p16–p21 先摆出**生成式(generative)**路线做对照:先假设 \(P(x\mid C_i)\) 是高斯,估出 \(\mu,\Sigma\),再用贝叶斯公式反推 \(P(C_1\mid x)\)。这条路要先猜一个分布,猜错就全错。

P15 换**判别式(discriminative)**路线:不关心 \(x\) 是怎么生成的,直接假设后验概率有某个参数形式,用训练数据把参数"拧"到最像。三个步骤和前面完全同构:

  1. Function set:\(f_{w,b}(x)=P_{w,b}(C_1\mid x)\),形式定为 sigmoid 套线性打分;
  2. Goodness:给一组 \(w,b\),它"生成"这批标注数据的概率多大 → 最大似然;
  3. Find best:梯度下降。

一句话:逻辑回归 = 线性打分 + sigmoid + 交叉熵。名字里有 regression,干的却是分类。


2. 直观:为什么是 sigmoid

线性打分 \(z=w\cdot x+b\) 取值 \((-\infty,+\infty)\),而概率必须落在 \((0,1)\)。sigmoid

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

是一条单调、光滑、值域 \((0,1)\) 的"压缩器",且 \(\sigma(0)=0.5\)、\(\sigma(\pm\infty)\to 1/0\)(讲义 p2–p3)。于是

$$f_{w,b}(x)=\sigma(z)=P_{w,b}(C_1\mid x),\qquad \text{若 } f\ge 0.5 \text{ 判 } C_1,\ \text{否则 } C_2 .$$

几何上,\(f=0.5 \iff z=0 \iff w\cdot x+b=0\),这是一张超平面:\(w\) 是它的法向量,\(b\) 决定它离原点多远。所以逻辑回归的决策边界天生是线性的——这一点决定了它后面所有的局限(见第 7 节)。


3. 符号与维度

符号 含义 维度/取值
\(x\) 一个样本的特征向量 \(\mathbb{R}^{D}\)
\(x_{ni}\) 第 \(n\) 个样本的第 \(i\) 维 \(\mathbb{R}\)
\(w\) 权重 \(\mathbb{R}^{D}\)
\(b\) 偏置 \(\mathbb{R}\)
\(z\) 线性打分 \(w\cdot x+b\) \(\mathbb{R}\)
\(\sigma(\cdot)\) sigmoid \((0,1)\)
\(f_{w,b}(x)\) 预测为 \(C_1\) 的概率 \((0,1)\)
\(\hat y_n\) 标签,\(C_1\!\to\!1\),\(C_2\!\to\!0\) \(\{0,1\}\)
\(N\) 训练样本数 正整数
\(L(w,b)\) 似然(越大越好) \(\mathbb{R}_{>0}\)
\(\eta\) 学习率 \(\mathbb{R}_{>0}\)

二分类时 \(P(C_2\mid x)=1-f_{w,b}(x)\),两个概率自动加和为 1。


4. 从最大似然到交叉熵

似然(讲义 p5–p7)。假定数据由 \(f_{w,b}\) 独立生成:

$$L(w,b)=\prod_{n=1}^{N} f(x_n)^{\hat y_n}\bigl(1-f(x_n)\bigr)^{1-\hat y_n}.$$

\(\hat y_n=1\) 时只剩 \(f(x_n)\),\(\hat y_n=0\) 时只剩 \(1-f(x_n)\)——这个写法只是把两种情况压成一行。取负对数(单调,不改变最优点):

$$-\ln L(w,b)=\sum_{n=1}^{N}-\Bigl[\hat y_n\ln f(x_n)+(1-\hat y_n)\ln\bigl(1-f(x_n)\bigr)\Bigr].$$

右边正是两个伯努利分布 \(p=(\hat y_n,1-\hat y_n)\) 与 \(q=(f_n,1-f_n)\) 的交叉熵 \(H(p,q)=-\sum_x p(x)\ln q(x)\)。所以"最大似然"和"最小交叉熵"是同一件事,不是两种方法。


5. 梯度:为什么恰好是 \(p-y\)

对单个样本,记 \(f=\sigma(z)\),\(z=\sum_i w_i x_i+b\)。先用链式法则:

$$\frac{\partial \ln f}{\partial z}=\frac{1}{\sigma(z)}\sigma(z)\bigl(1-\sigma(z)\bigr)=1-f,$$
$$\frac{\partial \ln (1-f)}{\partial z}=\frac{1}{1-\sigma(z)}\cdot\bigl(-\sigma(z)(1-\sigma(z))\bigr)=-f .$$

关键一步是 \(\sigma'(z)=\sigma(z)(1-\sigma(z))\)(讲义 p9–p10 就是拆这个)。代回:

$$\frac{\partial(-\ln L)}{\partial w_i}=\sum_n\Bigl[-\hat y_n(1-f_n)+(1-\hat y_n)f_n\Bigr]x_{ni}=\sum_n\bigl(f_n-\hat y_n\bigr)x_{ni}.$$

写成更新式:

$$w_i \leftarrow w_i-\eta\sum_{n}\bigl(f(x_n)-\hat y_n\bigr)x_{ni}.$$

三个可直接用的读法:


6. 为什么不用平方误差

若硬用 \(L=\frac12\sum_n(f_n-\hat y_n)^2\),则

$$\frac{\partial L}{\partial w_i}=2(f-\hat y)\,f(1-f)\,x_i .$$

多出来的 \(f(1-f)\) 在 \(f\to 0\) 或 \(f\to 1\) 时趋于 0。最该被纠正的时候(错得很离谱),梯度反而消失了(讲义 p13–p14 用两张图分别画 \(\hat y=1,f=1\) 与 \(\hat y=1,f=0\) 两种情形,标了 "far from target" 却梯度为 0)。

【补充】数值对比(Python 计算,\(\hat y=1\)):

\(f\) 交叉熵梯度 \(\lvert f-\hat y\rvert\) 平方误差梯度 \(\lvert 2(f-\hat y)f(1-f)\rvert\) 倍数
0.98(几乎对) 0.0200 0.000784 25.5×
0.02(几乎全错) 0.9800 0.038416 25.5×

倍数相同是巧合(\(2f(1-f)\) 在 \(f\) 与 \(1-f\) 处对称),但绝对量级说明问题:全错时交叉熵给 0.98 的信号,平方误差只给 0.038。讲义 p15 那张等高线图(引自 Glorot & Bengio 2010)画的是同一结论:平方误差的曲面在大偏差区近乎平台。


7. 多分类:softmax 与交叉熵

\(K\) 类时每类一组参数 \((w_k,b_k)\),先打分再归一化(讲义 p22–p23):

$$z_k=w_k\cdot x+b_k,\qquad y_k=\frac{e^{z_k}}{\sum_{j=1}^{K}e^{z_j}},\qquad \hat y=\text{one-hot}(c),$$
$$L=-\sum_{k=1}^{K}\hat y_k\ln y_k .$$

性质:\(0<y_k<1\)、\(\sum_k y_k=1\),可解释为 \(P(C_k\mid x)\)。softmax 有平移不变性(所有 \(z_k\) 同加常数,输出不变),所以单独一个类的 bias 无法被确定,实际实现常固定一个或靠正则。

【补充】数值(Python):\(z=(3,1,-3)\) → \(e^z=(20.0855,\,2.7183,\,0.0498)\),和 \(22.8536\),输出 \((0.879,\,0.119,\,0.002)\)。讲义 p22 印的是 \(0.88,\,0.12,\,\approx 0\),一致。注意 \(z\) 只差 6,概率就差了 400 倍——softmax 是"赢家通吃"的放大器。

二分类是 \(K=2\) 的特例:可以证明 softmax 两组参数等价于一组参数的 sigmoid,所以不必写两套。


8. 判别式 vs 生成式:同一个模型,不同的解

讲义 p16–p21 讲了一件容易忽略的事:生成式(高斯/朴素贝叶斯)推出的后验也是 \(\sigma(w\cdot x+b)\) 的形状,其中

$$w^{\mathsf T}=(\mu_1-\mu_2)^{\mathsf T}\Sigma^{-1},\qquad b=-\tfrac12\mu_1^{\mathsf T}\Sigma_1^{-1}\mu_1+\tfrac12\mu_2^{\mathsf T}\Sigma_2^{-1}\mu_2+\ln\frac{N_1}{N_2}.$$

也就是说:函数集相同,训练数据相同,但选出的 \(w,b\) 不同——因为生成式多了一个"\(x\) 服从高斯"的假设,这个假设把解往某个方向拉了。讲义 p17 给的实测是 73%(generative)vs 79%(discriminative)。

生成式的三个好处(p21,原文列点):需要的数据更少、对噪声更鲁棒、先验与类条件概率可以来自不同来源。判别式通常在数据充足时更准。两者没有绝对优劣,这是"假设换偏差"的经典案例。


9. 局限:一条直线切不开 XOR

讲义 p24–p25 的四点表:

\(x_1\) \(x_2\) 类别
0 0 C2
0 1 C1
1 0 C1
1 1 C2

无论怎么取 \(w_1,w_2,b\),\(z=w_1x_1+w_2x_2+b\) 都无法让 \((0,1),(1,0)\) 在一侧、\((0,0),(1,1)\) 在另一侧——这是线性分类器的硬限制,不是训练不够。

讲义给的两条出路:

  1. 特征变换(p26):换成"到 \((0,0)\) 的距离"和"到 \((1,1)\) 的距离"两个新特征,点变成 \((0,2),(1,1),(1,1),(2,0)\),此时一条直线就能分开。但讲义自己也写 "Not always easy to find a good transformation"——手工找变换不可扩展。
  2. 级联逻辑回归(p27–p29):前一层若干逻辑回归各输出一个 \(x'_i\),后一层再拿 \(x'\) 做逻辑回归;p29 给出具体数值,如 \((0.27,0.27)\)、\((0.73,0.05)\)、\((0.05,0.73)\) 三点被后层线性分开。p30 直接写下 "Deep Learning!",并给神经元图。

这里必须说清两件事,否则概念会糊:


10. 讲义原例(有页码才称课堂例)

例子 页码 内容 用途
XOR 四点 p24–p27 上表 + 特征变换后的 \((0,2),(1,1),(1,1),(2,0)\) 说明线性边界失效
级联数值 p28–p29 \(x'_1,x'_2\) 取值 \(0.05/0.27/0.73\) 说明级联可解
朴素贝叶斯 13 样本 p18–p20 \(P(C_1)=1/13,\ P(C_2)=12/13\);\(P(x_1=1\mid C_1)=1\),\(P(x_1=1\mid C_2)=1/3\) 生成式在少量数据上的行为
softmax 数值 p22 \(z=(3,1,-3)\to(0.88,0.12,\approx0)\) 说明归一化
判别/生成准确率 p17 73% vs 79% 说明假设的代价

第 6 节的梯度倍数表与第 7 节的精确 softmax 值是【补充】计算,不是讲义原文。


11. 易错对照

常见误区 正确说法
逻辑回归是做回归的 它是分类模型,输出的是类别概率
输出直接就是类别 输出 \(P(C_1\mid x)\in(0,1)\),还要阈值(默认 0.5)才变成类别
逻辑回归 = 深度网络 单层线性分类器;级联/多层才是网络
平方误差也能训,没差 能跑,但 \(f(1-f)\) 让饱和区梯度消失,收敛慢很多
\(\sigma'(z)=\sigma(z)(1+\sigma(z))\) 是 \(\sigma(z)(1-\sigma(z))\),符号错会让梯度方向反
多分类就用 \(K\) 个独立 sigmoid 类别互斥时用 softmax,保证概率和为 1
交叉熵是另一种损失,和似然无关 交叉熵 = 负对数似然,同一个目标
生成式和判别式是两种模型 高斯生成式推出后验后与逻辑回归同形,只是解不同
加正则能救训练 loss 高 不能。正则约束模型,训练 loss 高时加正则会更高(详见 P16)

12. 自测(先自己写,再展开)

Q1. 从 \(L=\prod_n f_n^{\hat y_n}(1-f_n)^{1-\hat y_n}\) 推到 \(\partial(-\ln L)/\partial w_i=\sum_n(f_n-\hat y_n)x_{ni}\),写出关键两步。

参考答案

① 取负对数拆成逐样本和;② 对 \(z\) 求导时用 \(\sigma'(z)=\sigma(1-\sigma)\),得 \(\partial\ln f/\partial z=1-f\)、\(\partial\ln(1-f)/\partial z=-f\);③ 合并 \(-\hat y(1-f)+(1-\hat y)f=f-\hat y\);④ 再乘 \(\partial z/\partial w_i=x_i\)。

Q2. \(\hat y=1\)、\(f=0.02\)。分别算交叉熵与平方误差对 \(z\) 的梯度(不含 \(x\)),并解释差别。

参考答案

交叉熵:\(f-\hat y=-0.98\),绝对值 0.98。平方误差:\(2(f-\hat y)f(1-f)=2(-0.98)(0.02)(0.98)=-0.0384\),绝对值 0.0384。差 25.5 倍。原因:平方误差多乘了 \(f(1-f)\),在饱和区趋 0,正好在最需要学习时失去梯度。

Q3. 为什么逻辑回归分不开 XOR?给出两种补救并说明各自的代价。

参考答案

\(z=w_1x_1+w_2x_2+b\) 的等值线是直线,XOR 正负类不线性可分。补救:① 手工特征变换(如到 \((0,0)\) 与 \((1,1)\) 的距离),代价是要靠人找、不可扩展;② 级联多个逻辑回归,让模型自己学特征,代价是参数量/层数上升、需要反向传播训练——这就是深度网络的起点。

Q4. \(z=(3,1,-3)\),算 softmax 并说明为什么不能把三个输出分别过 sigmoid。

参考答案

\(e^z=(20.0855,2.7183,0.0498)\),和 22.8536,输出 \((0.879,0.119,0.002)\)。三个独立 sigmoid 之和不为 1(\(0.953,0.731,0.047\),和 1.731),不构成概率分布;softmax 的分母强制归一化,适合互斥多类。

Q5. 高斯生成式与逻辑回归的函数形式相同,为什么选出的参数不同?各自什么时候更优?

参考答案

生成式额外假设了 \(P(x\mid C)\) 为高斯(含朴素贝叶斯的条件独立假设),这个先验把解拉向"符合假设"的区域;判别式只看条件似然,不受此约束。数据少/噪声大/先验可信时生成式更稳(讲义 p21 的三条好处);数据充足时判别式通常更准(p17 的 79% vs 73%)。


13. 30 秒速记

线性打分 \(z=wx+b\) → sigmoid 得概率 → 最大似然即交叉熵 → 梯度 \( (p-y)x \),干净得不像话 → 平方误差会因 \(f(1-f)\) 饱和而学不动 → 多类用 softmax + CE → 决策边界是超平面,XOR 切不开 → 级联多个才成网络。它是线性分类器,不是深度网络。

与其他 P 的关系:按课程顺序,P14 的分类内容是本节前置,第 8 节的生成式做法可与那里对照;P12 的反向传播是第 5 节链式法则的规模化版本;P16 会接着讲"训练 loss 高不高"该怎么诊断,正好接第 11 节最后一条;P29 的 CNN 是第 9 节"级联"的现代形态。

来源与说明

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