2.3 节我们讲了逻辑回归,它的样子你肯定记得:先把特征线性组合一下得到 z=w⊤x+b,再套一个 sigmoid 把 z 压成 (0,1) 之间的概率 y^=σ(z)。当时我大概是这么交代的——"因为分类问题想要个概率,而 sigmoid 正好能把实数压成概率"。
这个解释没错,但它留了个让人不舒服的疑问:为什么偏偏是 sigmoid? 世界上能把实数压到 (0,1) 的函数多得很,比如 y^=z2/(1+z2) 也行,y^=∣z∣/(1+∣z∣) 也行,凭什么大家偏偏都用 sigmoid,还用得这么理直气壮?
这一节就来回答这个问题,而且答案会带出一个更漂亮的东西——广义线性模型(Generalized Linear Model,习惯上简称 GLM)。它会告诉你:逻辑回归不是个拍脑袋的特例,它和线性回归、泊松回归、Softmax 一样,都是同一套理论框架下的不同成员。理解了 GLM,你就把"输出层到底该套什么函数、配什么损失"这件事,从经验直觉升级成了有原理可循的判断。
为了看出门道,我们把三个看似不同的任务并排放着。
线性回归:预测房价这种连续值。假设真实房价 y 服从一个高斯分布,均值是 μ=w⊤x+b,模型直接输出这个均值。
逻辑回归:预测"是否违约"这种 0/1 二分类。假设标签 y∈{0,1} 服从伯努利分布,正类概率 p=σ(w⊤x+b),模型输出这个概率。
泊松回归:预测"一条微博今天被转发多少次"这种计数。假设转发数 y∈{0,1,2,…} 服从泊松分布,到达率 λ 是正的,得想办法让 λ=g−1(w⊤x+b),模型输出这个 λ。
你看,三件事的结构出奇地一致:
- 都先做一次线性组合 η=w⊤x+b,我们管 η 叫线性预测子(linear predictor)。
- 标签 y 都服从某种概率分布,而这个分布的参数(均值 μ、概率 p、到达率 λ)都由 η 通过某个函数算出来。
- 那个"把 η 映射成分布参数"的函数,三个任务各不相同:高斯用恒等,伯努利用 sigmoid(的逆,也就是 logit),泊松用指数。
GLM 做的事情,就是把这三件事形式化、一般化。它由三个要素组成:指数族分布 + 线性预测子 + 链接函数。下面一个一个推。
GLM 要求标签 y 服从指数族分布。这个族很大,高斯、伯努利、泊松、二项、Gamma、多项式……一大票常用分布都是它的成员。它的标准形式长这样:
p(y;η)=b(y)exp(η⊤T(y)−a(η))
我挨个解释符号。y 是观测到的标签;η 叫自然参数(natural parameter),也叫规范参数;T(y) 叫充分统计量(sufficient statistic),通常就是 y 本身;b(y) 是一个只和 y 有关的归一化因子;a(η) 叫对数配分函数(log-partition function),它保证概率密度积分为 1。
这式子看着抽象,但它干的事情很朴素:把任何能写成"某东西 × 充分统计量,减去一个修正项"这种形状的分布,都收编成同一家人。光说没用,我们拿三个老朋友挨个验一下。
高斯分布。设 y∼N(μ,σ2),为了推导干净,先取 σ2=1(方差是常数,不影响结论)。它的密度是:
p(y;μ)=2π1exp(−2(y−μ)2)
把平方展开 (y−μ)2=y2−2μy+μ2,代回去整理:
p(y;μ)=2π1exp(−2y2)⋅exp(μy−2μ2)
对照标准形式就出来了:η=μ,T(y)=y,b(y)=2π1exp(−y2/2),a(η)=μ2/2=η2/2。高斯分布的均值 μ 恰好等于自然参数 η。
伯努利分布。设 y∈{0,1},正类概率 ϕ,则 p(y;ϕ)=ϕy(1−ϕ)1−y。把它写成指数形式:
p(y;ϕ)=exp(ylogϕ+(1−y)log(1−ϕ))=exp(ylog1−ϕϕ+log(1−ϕ))
对照标准形式:η=log1−ϕϕ(这就是 logit!),T(y)=y,a(η)=−log(1−ϕ)。这里自然参数 η 不直接是概率 ϕ,而是概率的 logit。把 η=log1−ϕϕ 反解出 ϕ:
ϕ=1+e−η1=σ(η)
sigmoid 就这么自然地冒出来了——它是伯努利分布从自然参数还原成概率的那个反函数。 这就回答了开头那个疑问:逻辑回归用 sigmoid 不是拍脑袋,而是因为标签服从伯努利分布,而伯努利的均值(概率)作为自然参数的函数,恰好是 sigmoid。
泊松分布。设 y∈{0,1,2,…},到达率 λ,则 p(y;λ)=y!e−λλy=y!1exp(ylogλ−λ)。对照标准形式:η=logλ,T(y)=y,a(η)=λ=eη。所以 λ=eη——泊松的到达率是自然参数的指数。
把三个例子汇总成一张表,规律一目了然:
| 分布 |
标签类型 |
η 与参数的关系 |
均值 μ= |
| 高斯 |
连续值 |
η=μ |
η |
| 伯努利 |
0/1 |
η=log1−μμ |
σ(η)=1+e−η1 |
| 泊松 |
计数 |
η=logμ |
eη |
指数族给了我们"标签服从什么分布",线性预测子 η=w⊤x+b 给了我们"怎么用特征算出一个数"。现在要把两者接起来。
接法的关键,是这个等式:
η=g(μ)
其中 μ=E[Y] 是标签分布的均值,g(⋅) 叫链接函数(link function),它的逆 g−1 把线性预测子映回均值:μ=g−1(η)。
最自然的选择,是让链接函数就等于上面那三种"自然参数与均值的关系",即 g(μ)=η。这种链接有个专门的名字,叫规范链接(canonical link)。把三个例子代入:
- 高斯:η=μ,规范链接是恒等函数 g(μ)=μ,所以 μ=w⊤x+b,模型直接输出线性组合——这就是线性回归。
- 伯努利:η=log1−μμ,规范链接是 logit,反函数是 sigmoid,所以 μ=σ(w⊤x+b)——这就是逻辑回归。
- 泊松:η=logμ,规范链接是对数,反函数是指数,所以 μ=ew⊤x+b——这就是泊松回归。
到这里,GLM 的全貌就清楚了。它由三要素定义:
- 标签 y 服从指数族分布 p(y;η)。
- 预测子是线性的:η=w⊤x+b。
- 均值通过规范链接由 η 决定:μ=g−1(η),即 g(μ)=η。
换一个分布,就自动换一个规范链接、换一个输出函数、换一个任务类型。线性回归、逻辑回归、泊松回归,全是同一张图纸盖出来的不同房子。这就是 GLM 的漂亮之处:它把"输出层到底该套什么"这件事,从"凭感觉选激活函数"变成了"由标签分布唯一确定"。
至于 Softmax(多项式分布,多分类版伯努利),它也是 GLM 的成员。多项式分布的自然参数是 ηk=logpKpk(以最后一类为基准),反解出来就是熟悉的 Softmax 公式 pk=∑jeηjeηk。所以 2.3 节那个多分类 Softmax,本质上是逻辑回归的 GLM 推广。
理论搭好了,接下来是工程问题:给定一堆数据 (xi,yi),怎么把参数 w,b 学出来。
GLM 的训练目标很统一,就是最大似然估计(MLE,1.4 节讲过)。设每个样本独立,似然是:
L(w,b)=i=1∏np(yi;ηi)=i=1∏nb(yi)exp(ηiT(yi)−a(ηi)),ηi=w⊤xi+b
取负对数似然当损失:
J(w,b)=−logL=i=1∑n[a(ηi)−ηiT(yi)−logb(yi)]
最后一项 logb(yi) 只和数据有关、跟参数无关,优化时可以扔掉。剩下的是关于 ηi=w⊤xi+b 的函数。线性回归时这一项退化成 (yi−μi)2/2(平方损失),逻辑回归时退化成交叉熵——GLM 用一个统一框架把它们都涵盖了。
这个损失对线性预测子 ηi 的梯度,有一个特别漂亮的结果。利用指数族的一条性质——dηda=E[T(Y)]=μ(对数配分函数的导数恰好等于均值的充分统计量,这一条可以自己验一下三个例子都成立),算梯度:
∂ηi∂J=μi−T(yi)=μi−yi
也就是预测均值减去真实标签。这个形式干净得让人感动,无论哪种 GLM 都一样。再往 w 上传,注意 μi=g−1(ηi) 且 ∂w∂ηi=xi:
∇wJ=i=1∑n(μi−yi)xi
这正好就是线性回归、逻辑回归里你见过的那个梯度形式(2.2、2.3 节),现在它被推广到了任意 GLM。
有了梯度,最朴素的做法是梯度下降。但 GLM 还有个更高效的经典解法,叫 IRLS(Iteratively Reweighted Least Squares,迭代重加权最小二乘),它其实是牛顿法在 GLM 上的特化。这里给个直觉:牛顿法每一步要算海森矩阵,而对 GLM 来说,海森矩阵恰好能写成"一个加权的设计矩阵乘积" ∑isixixi⊤(权重 si 跟当前预测的方差有关),于是每一步牛顿更新等价于解一个加权最小二乘问题,下一轮再根据新预测重新算权重,迭代几轮就收敛。这就是为什么统计软件里 glm() 默认都用 IRLS——它比梯度下降快得多,而且对指数族这一类凸问题能保证收敛。
线性回归是 IRLS 的最平凡特例:高斯分布的方差是常数,权重 si 全是 1,于是 IRLS 一步到位,退化成 2.2 节那个闭式解 w^=(X⊤X)−1X⊤y。逻辑回归时权重 si=μi(1−μi),每轮变化,所以要多迭代几轮。
理论讲完了,落到选型上,关键就一句话:看你的标签长什么样。
- 标签是任意实数(房价、温度、销量)→ 高斯 → 线性回归,输出直接是 η。
- 标签是 0/1(违约/不违约、患病/健康)→ 伯努利 → 逻辑回归,输出是 σ(η)。
- 标签是非负整数(某路口一小时事故数、某帖子转发数)→ 泊松 → 泊松回归,输出是 eη。
- 标签是多个类别之一(手写数字 0–9)→ 多项式 → Softmax 回归。
- 标签是正的连续值但方差随均值增长(保险索赔金额、寿命)→ Gamma 或逆高斯,对应各自的规范链接。
举个真实场景。小明去医院实习,医生要他根据病人的人口学特征预测"下一年门诊就诊次数"。这个次数是计数型(0,1,2,…),如果硬上线性回归,模型可能预测出负的次数,荒唐;硬上逻辑回归也不对,那是 0/1 二分类。正确的做法是泊松回归,输出 eη 天然非负,正好匹配计数数据的脾气。再比如预测"某件商品的评价星级(1–5)",这是个有序的多分类,用顺序逻辑回归(ordinal logistic,GLM 的一个变体)就比普通 Softmax 更贴切。
判断流程其实就两步:先认出标签的取值范围和分布形态,再套对应的指数族成员。这套判断力,比死记"分类用逻辑回归、回归用线性回归"要靠谱得多,因为它背后有原理撑着。
Q1. 为什么逻辑回归用 sigmoid 而不是别的把实数压到 (0,1) 的函数?用 GLM 的语言回答。
因为逻辑回归假设标签服从伯努利分布,而伯努利分布的均值(即正类概率)作为自然参数 η 的函数是 ϕ=1+e−η1=σ(η)。sigmoid 是伯努利分布的规范链接的逆函数,由分布唯一决定,不是随便挑的。
Q2. 把伯努利分布 p(y;ϕ)=ϕy(1−ϕ)1−y 写成指数族标准形式,并指出 η、T(y)、a(η) 分别是什么。
p(y;ϕ)=exp(ylog1−ϕϕ+log(1−ϕ))。对照 b(y)exp(ηT(y)−a(η)):η=log1−ϕϕ(logit),T(y)=y,a(η)=−log(1−ϕ)(用 ϕ=σ(η) 还可以写成 a(η)=log(1+eη)),b(y)=1。
Q3. 泊松回归的规范链接是什么?为什么预测转发次数要用泊松回归而不是线性回归?
规范链接是对数 η=logλ,逆函数 λ=eη 保证到达率恒正。转发次数是非负整数且常呈右偏分布,方差往往随均值增大——泊松分布正好匹配这些特征;线性回归可能预测出负数,且其常数方差的假设也不符。
Q4.(大厂面试题) 请说明 GLM 中"对数配分函数 a(η) 的导数等于均值的充分统计量",即 dηda=E[T(Y)],为什么成立,并解释它对训练的意义。
因为 ∫p(y;η)dy=1,两边对 η 求导:0=∫∂η∂[b(y)eηT(y)−a(η)]dy=∫p(T(y)−a′(η))dy=E[T(Y)]−a′(η),所以 a′(η)=E[T(Y)]。对大多数分布 T(y)=y,于是 a′(η)=μ。训练上,它让负对数似然对 η 的梯度变成简洁的 μ−y,所有 GLM 梯度形式统一,也支撑了 IRLS 把每步更新化成加权最小二乘——这是 GLM 可用牛顿法高效求解的数学根基。
这一节我们从"sigmoid 凭什么"出发,一路推出了 GLM。三句话记住它:标签服从指数族分布,预测子是线性的,均值通过规范链接由预测子决定。换分布就自动换链接、换输出、换任务——线性回归、逻辑回归、泊松回归、Softmax,都是这套框架的特例。
下一节我们要换个工具箱,去看看怎么度量样本之间的"距离",K 近邻和聚类都指望它。到时见。