系列第 1/8 篇 → 下一篇 | 术语表
这个系列一共8篇,建议按顺序看,但如果时间有限:
前置知识:“理论上”高中数学就够了,最好有高数的基础。如果你知道什么是函数、什么是导数,就能读下去。 本篇目标:读完你会理解——什么是过拟合、正则化怎么用、概率论和信息论最核心的概念。
参考书:《深度学习:基础与概念》(2025) - Christopher M. Bishop、Hugh Bishop 著
Chapter 1 深度学习前言:从画线到神经网络
用一条线穿过一堆点
想象你有一堆散点图(比如房屋面积和价格的关系),你想画一条线来描述这个规律。这条线画得好不好,怎么衡量?
误差函数(error function) 就是干这个的:把每个数据点xn的实际值tn和你画的线的预测值y(xn,w)之间的差距(误差)平方一下,全部加起来,再除以2——这样就得到了一个”画得好不好”的分数,分数越小说明画得越好。
用人话说就是:误差函数 = 每个点的”偏离程度”的平方和的一半。
E(w)=21n=1∑N(y(xn,w)−tn)2其中 (y(xn,w)−tn)2 是第 n 个点的预测误差。
其中多项式函数(就是你画的那条线)为:
P(x)=wnxn+wn−1xn−1+⋯+w1x+w0=j=0∑nwjxj误差函数永远≥0(因为是平方和),我们的目标就是找到让这个函数最小的那组参数w,记为w∗。怎么找?对E(w)求导,令导数为0,解出来的w就是w∗。

绿色为误差,红色为预测函数,蓝色为真实值
模型复杂度:太简单和太复杂都不行
选几阶多项式(模型复杂度)是个大学问:
- 欠拟合(underfitting):模型太简单,连数据的基本规律都没学到(比如用一条直线去拟合抛物线形状的数据)
- 过拟合(overfitting):模型太复杂,把数据里的噪声(随机波动)也当规律学进去了,导致在新数据上表现很差(比如用10阶多项式去拟合本来是2阶的数据,曲线会剧烈震荡)
怎么判断是否过拟合?把数据分成训练集(用来拟合模型)和测试集(用来检验模型),用均方根误差(root mean square error) 来评估:
ERMS=N1n=1∑N(y(xn,w∗)−tn)2这个公式做了两件事:除以N让不同大小的数据集可以公平比较,开平方让误差单位和原始数据一致(比如房价用”元”而不是”元²”)。

阶数越大模型越复杂,越容易过拟合;越小越容易欠拟合
直觉上很好理解:阶数越高,曲线越”灵活”,就越容易被数据里的随机噪声带跑偏,系数幅度也会变得很大。同时,数据量越大,越能支撑复杂的模型——这就像考试题目越多,越不容易靠运气蒙对。
简单来说:模型复杂度要和数据量匹配。数据少就用简单模型,数据多才能用复杂模型。
正则化:给模型加个”紧箍咒”
你可能会问:既然过拟合是因为参数w太大导致模型太复杂,那能不能直接限制w的大小?
没错!这就是正则化(regularization) 的思路。做法很简单:在原来的误差函数后面加一个惩罚项,谁的w大就罚谁:
E(w)=21n=1∑N(y(xn,w)−tn)2+2λj=0∑nwj2这个惩罚项也叫权重衰减(weight decay),因为它会让参数w不断”缩小”。从概率论的角度看(后面第2章会详细讲),这相当于给参数w施加了一个均值为0的高斯先验——意思是我们事先假设参数应该比较小。
关键在于λ(lambda,正则化系数)的大小:
- λ越大 → 惩罚越重 → w越小 → 模型越简单 → 越容易欠拟合
- λ越小 → 惩罚越轻 → w越大 → 模型越复杂 → 越容易过拟合
怎么选λ?用验证集试试不同的λ值,看哪个ERMS最小就行了。

验证集的均方根误差与λ
简单来说:正则化就像给模型加了个紧箍咒——参数想变大?先问问λ答不答应。
交叉验证:怎么公平地评估模型?
上面我们说用验证集来选λ,但问题是:验证集怎么划分?划太大训练数据不够,划太小评估不准。
S折交叉验证(S-fold cross-validation) 是一个巧妙的解决方案:
- 把数据随机分成K份(比如K=4)
- 第1轮:用第2、3、4份训练,第1份验证;第2轮:用第1、3、4份训练,第2份验证…依此类推
- 跑完K轮后,对所有验证误差取平均

K=4的S折,红色为验证集
这样每份数据都当过一次验证集,评估结果更可靠。代价是训练次数多了K倍。
特殊情况:当K=N(数据集大小)时,每次只留1个样本验证,叫做留一法(leave-one-out)。
S折交叉验证常用于选择神经网络的超参数(hyperparameter,就是训练前需要人工设定的参数,比如隐藏层节点数、学习率),避免对某一种划分方式的依赖。
习题1
题目背景:假设你有一个包含1000个样例的数据集,正负各半。你想用70%做训练、30%做测试来评估模型。问题是:你能有多少种不同的划分方式?
500*70%=350,即在正例里抽取C500350并在负例里抽取C500350,累计抽取C500350∗C500350
习题2
题目背景:一个非常”偷懒”的分类器——它只看训练集里哪个多就预测哪个,一样多就瞎猜。用这种极端分类器来理解交叉验证和留一法的区别。
假设学习算法所产生的模型按照类别出现的概率进行预测,将新样例预测为训练样例数较多的类别(训练样例数相同时进行随机猜测),考虑在以下两种情况下交叉验证法和留一法的差异。
- 假设数据集包含100个样例,其中正负例各一半。
10折交叉验证:将数据集平均分成大小相同的10个子集,将其中9个作为训练集,1个作为测试集并最终取平均。由于题目已知将新样例预测为训练样例数较多的类别模型且训练样例数相同时进行随机猜测,此时每次训练正负样例数均相同,因此错误率期望为50%。
留一法:若留出样本为正例,训练集中则有50个负例和49个正例,模型会预测为负例;反之留出样本为负例,模型预测为正例,错误率期望为100%。
- 假设数据集包含100个样例,其中正例51个,负例49个。
10折交叉验证:此时10个子集分布不均,即分为9个5正例5负例子集和1个6正例4负例子集。当训练集中有45个正例和45个负例时,此时进行随机猜测,错误率期望为50%∗109=45%;当训练集中有46个正例和44个负例时,此时预测为正例,测试集有5正例5负例,错误率期望为50%∗101=5%;综上,错误率期望为45%+5%=50%
留一法:若留出样本为正例,训练集中则有49个负例和50个正例,模型会预测为正例;反之留出样本为负例,模型预测为正例,错误率期望为0%∗10051+100%∗10049=49%。
神经网络:从一个”开关”开始
当数据关系非常复杂(高度非线性)时,多项式拟合需要很高的阶数,容易过拟合。有没有更好的办法?
神经网络(neural network) 就是答案。它的灵感来自人脑:神经元通过突触连接,接收信号、处理、输出。我们从最简单的”神经元”开始:
一个神经元做三件事:
- 接收输入:把所有输入x1,x2,⋯,xn各自乘上一个权重w1,w2,⋯,wn,加起来——得到预激活(pre-activation,就是加权求和但还没过激活函数的值)
- 激活:把预激活的值通过一个激活函数(activation function) 进行非线性变换
- 输出:得到这个神经元的结果
a=w1x1+w2x2+⋯+wnxn(预激活:加权求和) y=f(a)(激活:过激活函数得到输出)常用的激活函数有sigmoid(S形曲线,把任意值压缩到01之间)、tanh(类似sigmoid但输出范围是-11)、ReLU(负数变0,正数不变,现代深度网络的首选)。
类比:树突接收输入信号 → 细胞体处理(激活) → 轴突输出结果。
最简单的神经网络就是感知机(perceptron)——只有一个神经元,激活函数是一个”开关”:
f(a)={10if a≥0otherwise现代的多层感知机(multi-layer perceptron, MLP) 就是把很多这样的”开关”叠成多层,每一层的输出作为下一层的输入,层层传递,最后得到结果。层数越多,能学到的模式越复杂——这就是”深度学习”中”深度”的由来。
第1章小结
一句话版本:
- 误差函数:衡量模型画的线离数据点有多远,越小越好
- 过拟合:模型太复杂,把噪声当规律;欠拟合:模型太简单,连规律都没学到
- 正则化:给参数加惩罚项,防止模型太复杂
- 交叉验证:把数据分成多份轮流训练和验证,公平评估模型
- 神经网络:一堆简单的”开关”叠成多层,能学到非常复杂的模式
知识地图:
误差函数 → 过拟合/欠拟合 → 正则化 + 交叉验证
下一章我们会学习概率论——它是理解”为什么误差函数长这样”以及”模型怎么做出预测”的数学基础。
Chapter 2 概率:不确定性下的推理
为什么需要概率?因为现实世界充满了不确定性。
不确定性分两种:
- 偶然不确定性(aleatoric uncertainty):数据本身就有噪声,比如测量仪器的误差、人体身高的自然波动——这是无法消除的
- 认知不确定性(epistemic uncertainty):因为我们收集的数据不够多,对规律的认识不完整——数据越多,这种不确定性越小
概率论就是处理不确定性的数学语言。深度学习的很多核心概念(最大似然估计、交叉熵、KL散度)都建立在概率论之上。
前置知识:知道什么是”概率”就够了。
两大学派:概率到底是什么?
从一个硬币说起:正面朝上的概率是0.5——但这句话到底是什么意思?
频率学派(frequentist) 认为:概率就是”反复做很多次实验,某件事发生的频率”。你投1000次硬币,大概500次正面,所以概率是0.5。参数(比如硬币的重量分布)是固定但未知的,我们用数据来估计它。
贝叶斯学派(Bayesian) 认为:概率是”我们对某件事发生的相信程度”。你还没投硬币,但根据经验觉得大概各半,这就是先验信念;投了几次之后,根据结果更新这个信念。
两种观点各有道理,在深度学习中都有应用。频率学派的方法更常见(比如最大似然估计),但贝叶斯思想在正则化和不确定性估计中也很重要。
概率基础:三条铁律
概率法则只有三条,记住它们就够了:
加和法则(sum rule):想知道X=xi的概率,把所有可能的Y值下X=xi的概率加起来:
P(X=xi)=yj∈Y∑P(X=xi,Y=yj)乘积法则(product rule):两个事件同时发生的概率 = 第一个发生的概率 × 第一个发生的条件下第二个发生的概率:
P(X=xi,Y=yj)=P(X=xi)P(Y=yj∣X=xi)贝叶斯定理(Bayes’ theorem):这是最重要的一个——它告诉我们怎么用”结果”反推”原因”:
P(Y∣X)=P(X)P(X∣Y)P(Y)用人话说就是:后验概率 = (似然 × 先验) / 证据
- 先验概率(prior) P(Y):观测X之前,我们对Y的信念
- 后验概率(posterior) P(Y∣X):观测X之后,更新对Y的信念
- 似然(likelihood) P(X∣Y):如果Y是真的,观测到X的可能性
- 证据(evidence) P(X):归一化常数,确保概率总和为1
举个例子:你看到地上是湿的(X),想判断是不是下雨了(Y)。 先验P(Y):根据天气预报,下雨概率30%。 似然P(X∣Y):如果下雨了,地面湿的概率90%。 似然P(X∣¬Y):如果没下雨,地面湿的概率10%(可能是洒水车)。 后验P(Y∣X):看到地面湿了之后,实际下雨的概率是多少?用贝叶斯定理算一下就知道。
独立(independence):如果两个变量X和Y互不影响,P(X,Y)=P(X)P(Y)。
概率密度:连续变量的概率
对于离散变量(比如骰子点数),每个值都有一个确定的概率。但对于连续变量(比如身高、温度),取某个精确值的概率是0——你能恰好是170.000000…厘米吗?不可能。
所以引入概率密度函数(probability density function, PDF) p(x):它表示x落在某个小区间(x,x+δx)内的概率大约是p(x)δx。
x落在区间(a,b)的概率就是密度曲线在这个区间下的面积:
p(x∈(a,b))=∫abp(x)dx概率密度函数必须满足两个条件:
- 非负性:p(x)≥0(概率不能是负数)
- 归一化:∫−∞∞p(x)dx=1(总概率必须是1)
累积分布函数(cumulative distribution function, CDF) P(z)=∫−∞zp(x)dx,表示”x小于等于z的概率”。它的导数就是概率密度:P′(x)=p(x)。
上面的加和法则和乘积法则对连续变量同样适用,只是把求和换成积分:
- 和规则:p(x)=∫p(x,y)dy(对不关心的变量”积分掉”)
- 积规则:p(x,y)=p(y∣x)p(x)
贝叶斯定理同样:
p(y∣x)=p(x)p(x∣y)p(y),其中p(x)=∫p(x∣y)p(y)dy上面的规则同样适用(x,y为两个实数变量,多元多维):
和规则 - 对部分变量感兴趣时,可以通过对其他变量”积分掉”来获得感兴趣变量的分布
p(x)=∫p(x,y)dy将y积分掉积规则 - 需要考虑变量间的依赖关系时,可以将联合分布分解为条件分布和边缘分布的乘积
p(x,y)=p(y∣x)p(x)贝叶斯定理
p(y∣x)=p(x)p(x∣y)p(y)分母(边缘概率)同样可以写成:
p(x)=∫p(x∣y)p(y)dy
常见概率分布
在进入深度学习之前,我们先认识几个最常用的概率分布(probability distribution)。你可以把它们想象成”乐高积木”——很多复杂的概率模型都是由这些基本分布拼装而成的。
均匀分布(uniform distribution):最简单的一种——在有限区间 (c,d) 内概率密度处处相等,就像把水均匀地倒在一个平底容器里:
p(x)=d−c1,x∈(c,d)指数分布(exponential distribution):概率密度从某个起点开始单调递减,常用来建模”等待时间”(比如等公交车要等多久):
p(x∣λ)=λexp(−λx),x>0其中 λ(lambda)越大,下降得越快,说明”很快就能等到”的概率越高。
拉普拉斯分布(Laplace distribution):长得像两个背靠背的指数分布,中心在 μ 处,有一个尖尖的顶。它比高斯分布更”尖”、尾巴更”厚”,对离群点更鲁棒:
p(x∣μ,γ)=2γ1exp(−γ∣x−μ∣)
红色为均匀分布,蓝色为指数分布,绿色为拉普拉斯分布
接下来两个分布比较特殊,它们不是普通的”曲线”,而是在概率论和统计中非常有用的工具:
狄拉克δ函数(Dirac delta function):这不是普通函数,而是一种”广义函数”——你可以把它想象成一根无限细、无限高的”针”,扎在 x=μ 处,但这根针下面的面积刚好是1:
p(x∣μ)=δ(x−μ)除 x=μ 外处处为零,但 ∫p(x∣μ)dx=1。它在物理和概率论中经常出现,用来表示”精确确定在某个位置”。
经验分布(empirical distribution):给你一组真实数据 D={x1,…,xN},经验分布就是用这组数据本身来”近似”真实分布——做法很简单,在每个数据点 xn 处扎一根δ函数的”针”,每根针的高度都是 N1:
p(x∣D)=N1n=1∑Nδ(x−xn)用人话说:你有10个观测数据,经验分布就是说”每个数据出现的概率都是1/10,其他地方概率为0”。它是最朴素的”用数据说话”的方式。
期望和方差
期望(expectation)
用人话说,期望就是”加权平均值”的理论版本。你平时算平均值是把所有数据加起来除以个数,期望则是每个值乘以它出现的概率再求和——考虑了”每个值有多可能出现”。
离散情况:每个值乘以对应概率,求和
E[f]=x∑p(x)f(x)连续情况:把求和换成积分
E[f]=∫p(x)f(x)dx有限样本:当你只有有限个数据点时,用经验分布来近似——就是前面说的”在每个数据点扎一根针”的做法。具体来说,用δ函数的性质(∫δ(x−xn)f(x)dx=f(xn))可以化简为:
E[f]≈N1n=1∑Nf(xn)简单来说:样本平均值是期望的近似。数据越多,近似越准。这正是第十四章-蒙特卡洛近似的核心思想。
推导细节:从经验分布到样本均值
E[f]=∫−∞∞[N1n=1∑Nδ(x−xn)]f(x)dx=N1n=1∑N∫−∞∞δ(x−xn)f(x)dx令 y=x−xn,则 x=y+xn,dx=dy:
∫−∞∞δ(x−xn)f(x)dx=∫−∞∞δ(y)f(y+xn)dy=f(xn)因此 E[f]=N1∑n=1Nf(xn)。
条件期望(conditional expectation):已知某个变量 y 的值之后,f(x) 的期望——结果是 y 的函数:
E[f(x)∣y]=∫p(x∣y)f(x)dx方差(variance)
方差衡量的是”数据围绕期望的分散程度”——简单来说就是”波动有多大”。方差越大,数据越分散;方差越小,数据越集中在均值附近。
var[f]=E[(f(x)−E[f(x)])2]=E[f(x)2]−E[f(x)]2其中 E[f(x)2] 是”平方的期望”,E[f(x)]2 是”期望的平方”——方差就是这两者的差。
变量 x 自身的方差就是 f(x)=x 的特殊情况:
var[x]=E[x2]−E[x]2协方差(covariance)
协方差衡量两个变量”一起变化的趋势”。如果 x 增大时 y 也倾向于增大,协方差为正;一个增大另一个减小,协方差为负;互不影响则为0。
cov[x,y]=E[(x−E[x])(y−E[y])]=E[xy]−E[x]E[y]如果 x 和 y 独立,则 cov[x,y]=0(注意反过来不成立——协方差为0不代表独立,可能有非线性关系)。
向量的协方差:对于向量 x 和 y,协方差是一个矩阵:
cov[x,y]=E[xyT]−E[x]E[y]T,cov[x]≡cov[x,x]向量 x 自身的协方差矩阵描述了各分量之间的相关性——对角线上是方差,非对角线上是协方差。
高斯分布(正态分布)
高斯分布(Gaussian distribution),又叫正态分布(normal distribution),是概率论中最重要的分布,没有之一。它的形状是一条对称的钟形曲线(bell curve)——中间高、两边低,左右对称。
高斯分布 → 最大似然估计 → 线性回归的损失函数推导 → 噪声建模的意义
这条线索贯穿了接下来的几个小节,读的时候可以带着这个问题:为什么高斯分布这么重要?
单变量高斯分布
N(x∣μ,σ2)=2πσ21exp(−2σ2(x−μ)2)看起来公式挺吓人,但其实只有两个参数在控制一切:
- μ(mu,均值):决定钟形曲线的中心位置——曲线最高点在哪里
- σ2(sigma squared,方差):决定钟形曲线的宽度——σ 越大,曲线越”胖”、越”矮”;σ 越小,曲线越”瘦”、越”高”
- σ(标准差):方差的平方根,和方差描述同一件事,只是单位和原始数据一致
- β=1/σ2(精度 precision):方差的倒数,精度越大说明分布越集中
当然,作为概率密度函数,它必须满足:
N(x∣μ,σ2)>0且∫−∞∞N(x∣μ,σ2)dx=1高斯分布的性质
- 期望(一阶矩):E[x]=μ——分布的”重心”就在均值处。有关矩的概念可以看第3章-矩
- 二阶矩:E[x2]=μ2+σ2
- 方差:var[x]=E[x2]−E[x]2=σ2
- 众数(mode,概率密度最大值的位置):对高斯分布来说,众数和均值 μ 重合——最高点就在正中间
线性回归的概率视角
还记得第1章讲的线性回归和误差函数吗?现在我们可以用概率的语言重新理解它。
把回归问题(regression problem)建模为条件概率:目标值 t 是一个随机变量,它服从以预测值 y(x,w) 为中心的高斯分布:
p(t∣x,w,σ2)=N(t∣y(x,w),σ2)其中 y(x,w) 是模型的预测,σ2 是噪声方差。
想象你在预测房价:输入 x 为房子面积,模型预测 y(x,w) 为预测价格。实际价格 t 不会刚好等于预测价格——它会在预测价格附近随机波动(因为还有学区、装修等因素没考虑进去)。
概率观点说:这个波动服从高斯分布。也就是说,房价 t 服从以预测值 y(x,w) 为均值的高斯分布。好处是什么?预测时你可以输出一个区间(比如 y±2σ),而不是一个孤零零的数字——这样就能量化不确定性。
似然函数
什么是似然?
想象你玩一个”猜参数”游戏:我给你一组数据(比如10个人的身高),告诉你这些数据来自一个高斯分布,但不告诉你均值和方差是多少。你的任务是:猜一组参数,使得”这组数据出现的概率”最大。
这个”数据出现的概率”就是似然函数(likelihood function)。给定参数 μ 和 σ2,观察到数据集 x=(x1,…,xN) 的似然是:
p(x∣μ,σ2)=n=1∏NN(xn∣μ,σ2)你可能会问:为什么要连乘?因为我们假设数据是独立同分布(independent and identically distributed, i.i.d.)的——每个数据点都是独立从同一个分布中抽取的,所以联合概率就是各概率的乘积。
对数似然
连乘很麻烦(数值上容易溢出),所以通常取对数,把连乘变成连加:
lnp(x∣μ,σ2)=−2σ21n=1∑N(xn−μ)2−2Nlnσ2−2Nln(2π)最大似然估计(Maximum Likelihood, ML)
最大似然估计(maximum likelihood estimation, MLE) 就是”猜参数”游戏的答案——找到让似然函数最大的那组参数。做法是:对似然函数(或对数似然)求导,令导数为0,解出参数。
对于高斯分布,结果出奇地简洁:
- 均值 μ 的最大似然解:就是样本均值(sample mean) μML=N1n=1∑Nxn
- 方差 σ2 的最大似然解:就是样本方差(sample variance) σML2=N1n=1∑N(xn−μML)2
用人话说:你想知道一群人的平均身高和身高的波动范围?把他们的身高取平均就是 μML,算一下每个人和均值的差距的平方的平均值就是 σML2。
最大似然估计的偏差
这里有一个微妙但重要的问题:最大似然估计的方差是有偏的(biased)。
对于高斯分布:
- E[μML]=μ(均值估计无偏——正好)
- E[σML2]=NN−1σ2(方差估计有偏——系统性地低估了真实方差)
为什么方差会低估?想象你在预测身高:
- 如果你知道真实的平均身高,你可以直接用这个值计算方差
- 但你不知道——你只能用这组数据算出的样本均值 μML 来代替
- 样本均值是从同一组数据算出来的,它天然比真实均值更”贴近”这组数据
- 所以算出来的方差就会偏小——这就像”自己给自己打分”,总比别人打的高一点
修正方法:用 N−1 代替 N 做分母,得到无偏方差估计(unbiased variance estimator):
σ~2=N−11n=1∑N(xn−μML)2简单来说:随着数据量 N 增大,NN−1 越来越接近1,偏差越来越小。但在复杂模型(如神经网络)中,数据相对于参数量往往不够多,最大似然的偏差问题(和过拟合密切相关)会更严重。
最大似然估计 = 最小化平方和误差
还记得第1章的误差函数吗?现在我们可以从概率的角度理解它了。
当我们用高斯分布建模回归问题时,最大化似然函数:
n=1∏NN(tn∣y(xn,w),σ2)取对数后得到 对数似然函数。其中 −2Nln(2πσ2) 这项与 w 无关,所以只需要最大化:
−2σ21n=1∑N(y(xn,w)−tn)2因为 σ2>0 是常数,这等价于最小化平方和误差函数:
21n=1∑N(y(xn,w)−tn)2这就是为什么平方和误差是回归问题的默认损失函数——它不是凭空设计的,而是假设噪声服从高斯分布时,最大似然估计的自然结果。
换句话说:最小二乘法 = 高斯噪声假设下的最大似然估计。
预测分布
有了最大似然估计的参数,我们就可以写出完整的预测分布。噪声方差的最大似然估计为:
σML2=N1n=1∑N(y(xn,wML)−tn)2预测分布就是:
p(t∣x,wML,σML2)=N(t∣y(x,wML),σML2)预测身高的例子:
- 输入:年龄 x=10 岁
- 模型预测:y(10,w)=140 cm
- 最大似然估计的噪声方差:σ2=25(标准差 σ=5 cm)
- 实际身高 t 的分布:p(t∣x=10)=N(t∣140,25)
- 所以我们可以预期实际身高大概在 130~150 cm 之间(均值 ±2 个标准差,覆盖约95%的概率)
变量变换
你可能会问:概率密度在变量变换下会怎么变化?这不是简单地”把 x 换成 y“就完事了——概率密度的变换方式和普通函数不一样。
先从直觉开始:橡皮筋拉伸
想象你在一根橡皮筋上均匀地涂了墨水(概率密度均匀分布)。现在你把橡皮筋拉伸成原来的2倍长——墨水被”稀释”了,密度变成了原来的一半。但总的墨水量(概率)没有变。
简单例子:线性变换 x=2y 在 y 空间中,区间 [0,1] 的长度是1;在 x 空间中变成 [0,2],长度是2。 如果 py(y)=1(在 [0,1] 区间内),那么 px(x) 在对应区间应该是 1/2——这样总概率才守恒: ∫01py(y)dy=∫02px(x)dx=1
非线性变量变换
对于线性变换,缩放因子是常数。但对于非线性变换,“拉伸比例”在每个位置都不一样——这就像橡皮筋不同位置的拉伸程度不同。
考虑一个小区间 [y,y+dy],在 y 空间中的概率是 py(y)dy(还记得概率密度函数吗?)。
经过变换 x=g(y) 后,这个区间变成 [x,x+dx],其中 dx=g′(y)dy。为了保持概率守恒(变换前后的概率必须相等):
py(y)dy=px(x)dx=px(g(y))⋅g′(y)dy因此:
py(y)=px(g(y))⋅dydg取绝对值是因为概率密度必须非负。这里的 dydg 就是雅可比因子(Jacobian factor)——一维时就是导数的绝对值,表示变换前后区间长度的缩放比例。
单变量变换公式
设 x=g(y),则新变量 y 的概率密度为:
py(y)=px(x)⋅dydx=px(g(y))⋅dydg模式位置会变!
模式(mode)就是概率密度函数达到最大值的点(对高斯分布来说就是均值)。这里有一个容易犯的错误:
如果我们简单地认为 py(y)=px(g(y))(忽略雅可比因子),会以为模式只是做了一个坐标变换——px 的模式在 x^,变换后 py 的模式就在满足 x^=g(y^) 的 y^ 处。
但这是错的! 因为公式里多了一个 dydg 项,它的导数会引入额外项,导致模式位置发生偏移。
举个例子:假设 px(x)=N(x∣1,0.52)(模式在 x=1),做非线性变换 x=g(y)=y3:
- 错误的期望:忽略雅可比,认为模式在 y=1(因为 13=1)
- 正确的变换: py(y)=px(y3)⋅dyd(y3)=px(y3)⋅∣3y2∣ 由于额外的 3y2 项,py(y) 的最大值位置会发生偏移,不再满足 x^=g(y^)。
这个结论可以通过采样来验证:对 x 采样后变换到 y,y 的直方图与 py(y) 匹配,而非与 px(g(y)) 匹配。

结果应当为红色曲线,而不是绿色曲线,极大值(模式)是不匹配的
注意:线性变换下,雅可比因子是常数,这个问题就消失了——模式位置的变换符合预期。
多变量分布的变换
设 x=g(y)(x, y 均为 D 维向量),变换公式为:
py(y)=px(x)⋅∣detJ∣其中 J 是雅可比矩阵(Jacobian matrix),元素为 Jij=∂yj∂gi。
∣detJ∣ 是雅可比矩阵的行列式的绝对值——你可以把它理解为”橡皮筋拉伸”的多维版本:原来在 (y1,y2) 空间中有一个小方块,经过变换后在 (x1,x2) 空间中变成了一个不规则的四边形,∣detJ∣ 就是面积(或体积)的缩放因子。
变量变换在深度学习中非常重要——标准化流(normalizing flow)模型的核心思想就是通过一系列可逆变换,把简单的分布(如高斯分布)逐步变换为复杂的分布。每一次变换都需要乘上雅可比因子。
熵
信息量:一个”惊讶度量表”
想象你是一个新闻编辑。下面两条新闻,哪条更”有料”?
- “明天太阳从东边升起”——概率几乎100%,毫无惊喜
- “明天太阳从西边升起”——概率几乎0%,超级震惊
直觉告诉我们:越不可能发生的事情,发生时带来的信息量越大。这就是信息量(information content) 的核心思想。
信息量函数 h(x) 应该满足两个条件:
- 概率越低,信息量越大;概率为1的事件,信息量为0
- 两个独立事件同时发生的信息量 = 各自信息量之和(可加性)
满足这两个条件的函数就是概率的对数(负号确保非负):
h(x)=−log2p(x)底数为2时,单位是比特(bits)。
熵:平均信息量
熵(entropy) H[x] 就是信息量的期望(平均值)——衡量一个随机变量整体上有多”不确定”或多”混乱”:
H[x]=−x∑p(x)log2p(x)当 p(x)=0 时,定义 p(x)lnp(x)=0(因为 limx→0xlnx=0)。
例子:
均匀分布:8个等概率状态,每个概率 1/8。 熵 H[x]=−8×81log281=3 比特。
因为每个状态都同样可能,你完全猜不到下一个会是什么——不确定性最大。
非均匀分布:状态 {a,b,c,d,e,f,g,h} 的概率为 {21,41,81,161,641,641,641,641}。 熵 H[x]=2 比特。
因为 a 出现的概率很高(一半),你比较容易猜对——不确定性更小。
信源编码定理(source coding theorem):熵是无损压缩中平均码长的下限。在第二个例子中,可以通过为高频事件分配短码(比如 a 用 0,b 用 10)来实现平均码长等于熵(2比特)。
后续我们使用自然对数(底数为 e)来定义熵,单位改为纳特(nats)。这是深度学习中的惯例: H[x]=−∑xp(x)lnp(x)
微分熵:连续变量的熵
把熵的概念扩展到连续变量——微分熵(differential entropy)。
思路:把连续变量 x 按宽度 Δ 分箱(binning),每个箱内用一个值 xi 代表,概率约为 p(xi)Δ。先算离散熵,再取 Δ→0 的极限:
HΔ=−i∑p(xi)Δln(p(xi)Δ)=−i∑p(xi)Δlnp(xi)−lnΔ忽略与 p(x) 无关的 −lnΔ,取极限得到微分熵:
H[x]=−∫p(x)lnp(x)dx多变量情况同理:
H[x]=−∫p(x)lnp(x)dx注意:微分熵和离散熵不同,它可以是负数!这是因为连续变量的”分箱”过程引入了 −lnΔ 项,当分布非常集中时(方差很小),微分熵可以小于0。
最大熵分布
离散情况:在所有可能的状态上,熵最大的分布是均匀分布 p(xi)=1/M,此时 H=lnM。直觉很好理解——均匀分布意味着”最不确定”,所以熵最大。
连续情况(有约束):如果没有约束,连续分布的熵可以无限大(想象一个无限宽的均匀分布)。所以通常需要加上约束:
- ∫p(x)dx=1(归一化)
- ∫xp(x)dx=μ(已知均值)
- ∫(x−μ)2p(x)dx=σ2(已知方差)
在给定均值 μ 和方差 σ2 的约束下,高斯分布是使微分熵最大的分布。
推导思路(使用拉格朗日乘子法 + 变分法)
在三个约束条件下最大化 H[x]=−∫p(x)lnp(x)dx。构造拉格朗日函数,对 p(x) 求变分导数并令其为零,可以得到 p(x) 必须是 x 的二次函数的指数形式——这正是高斯分布的形式。具体推导需要用到变分法(calculus of variations),这超出了本章范围。
高斯分布的微分熵
高斯分布的微分熵有一个漂亮的闭式解:
H[x]=21{1+ln(2πσ2)}熵随方差 σ2 增大而增大——分布越”胖”(方差越大),不确定性越大,熵越高。当 σ2<1/(2πe) 时,微分熵为负——这在离散熵中是不可能的。
KL散度
两个分布有多”不同”?
想象你有两份天气预报:一份是真实天气数据 p(x),另一份是你的模型预测 q(x)。你想知道:你的预测和真实情况差多少?
Kullback-Leibler 散度(KL divergence),也叫相对熵(relative entropy),就是衡量两个概率分布之间”距离”的指标。用人话说:如果你用分布 q(x) 来代替真实分布 p(x) 做编码,平均需要多花多少信息量。
KL(p∥q)=−∫p(x)lnq(x)dx−(−∫p(x)lnp(x)dx)=−∫p(x)ln{p(x)q(x)}dx第一项是”用 q 编码的平均信息量”,第二项是”用 p 编码的平均信息量(即熵)“——KL散度就是两者的差。
KL散度的两条重要性质
- 非负性:KL(p∥q)≥0,当且仅当 p(x)=q(x) 时等号成立。这很好理解——如果两个分布完全一样,“差异”就是0。
- 不对称性:KL(p∥q)=KL(q∥p)。从 p 到 q 的距离和从 q 到 p 的距离不一样!所以严格来说,KL散度不是真正的”距离”。
非负性证明(使用Jensen不等式)
凸函数(convex function):函数 f(x) 是凸的,如果其任意弦都在函数图像之上,即 f(λa+(1−λ)b)≤λf(a)+(1−λ)f(b)。
Jensen不等式:对于凸函数 f 和概率分布 p(x): f(∫xp(x)dx)≤∫f(x)p(x)dx 用人话说就是:函数的期望值 ≥ 期望的函数值(对于凸函数)。
−lnx 是严格凸函数。令 f(x)=−lnx,则:
KL(p∥q)=−∫p(x)ln{p(x)q(x)}dx≥−ln(∫q(x)dx)=−ln(1)=0KL散度与最大似然估计的关系
最小化KL散度等价于最大化似然函数——这是连接概率论和机器学习的关键桥梁。
理论上:
KL(p∥q)=−∫p(x)lnq(x)dx+∫p(x)lnp(x)dx实际中,我们有来自真实分布 p(x) 的样本 {x1,x2,…,xN},可以近似为:
KL(p∥q)≈N1n=1∑N−lnq(xn∣θ)+N1n=1∑Nlnp(xn)第二项是常数(因为 p(x) 是真实分布,不依赖于模型参数 θ),所以最小化KL散度等价于最小化第一项——也就是最大化 ∑n=1Nlnq(xn∣θ)——也就是最大化似然函数。
简单来说:训练模型时最小化KL散度,就是在做最大似然估计。这解释了为什么最大似然估计是如此自然和普遍的方法。
条件熵
条件熵(conditional entropy) H[y∣x] 衡量的是:已知变量 x 之后,描述变量 y 还需要多少平均信息量。
H[y∣x]=−∬p(y,x)lnp(y∣x)dydx天气预报的例子:
- x:今天的天气(晴天/雨天)
- y:明天的天气
- H[y](无条件熵):不看今天天气,预测明天天气有多不确定
- H[y∣x](条件熵):看了今天天气之后,预测明天天气还有多不确定
显然 H[y∣x]≤H[y],因为今天天气提供了有用信息——知道今天下雨会让你更容易预测明天也下雨。
条件熵、联合熵和边缘熵之间有一个优雅的链式法则(chain rule):
H[x,y]=H[x]+H[y∣x]用人话说:x 和 y 的总信息量 = 描述 x 的信息量 + 已知 x 后描述 y 的额外信息量。
互信息
互信息(mutual information) 衡量两个变量之间”共享了多少信息”——或者说,知道一个变量能帮你减少多少对另一个变量的不确定性。
从数学上看,互信息就是联合分布 p(x,y) 与假设它们独立时的分布 p(x)p(y) 之间的KL散度:
I[x,y]=KL(p(x,y)∥p(x)p(y))=−∬p(x,y)ln(p(x,y)p(x)p(y))dxdy- 如果 x 和 y 独立:p(x,y)=p(x)p(y),KL散度为0,互信息为0——知道 x 对预测 y 毫无帮助
- 如果 x 和 y 相关:p(x,y)=p(x)p(y),互信息大于0——知道 x 能帮你更好地预测 y
互信息与熵的关系非常直观:
I[x,y]=H[x]−H[x∣y]=H[y]−H[y∣x]天气预报的例子(续):
- H[x]:预测今天天气的不确定性(比如2比特)
- H[x∣y]:已知明天天气后,预测今天天气的不确定性(比如0.5比特)
- I[x,y]=H[x]−H[x∣y]=2−0.5=1.5 比特
这1.5比特就是今天和明天天气共享的信息量——知道了明天天气,你就”免费”获得了1.5比特关于今天天气的信息。
从贝叶斯角度看,p(x) 是先验分布(观察 y 之前对 x 的认识),p(x∣y) 是后验分布(观察 y 之后对 x 的认识)。互信息 I[x,y]=H[x]−H[x∣y] 正好就是不确定性减少量——观察 y 之后,你对 x 的不确定性减少了多少。
互信息在深度学习中有很多应用,比如特征选择(选那些和目标变量互信息最大的特征)、信息瓶颈理论(information bottleneck)等。
第2章小结
一句话版本:
- 概率论基础:概率论只有三条规则——加和法则、乘积法则、贝叶斯定理。贝叶斯定理告诉我们怎么用观测结果更新信念
- 常见分布:均匀分布、指数分布、拉普拉斯分布是基本构件;狄拉克δ函数和经验分布是特殊工具
- 期望和方差:期望 = 平均值的理论版本,方差 = 波动有多大,协方差 = 两个变量一起变化的趋势
- 高斯分布:最重要的连续分布,钟形曲线,只由均值和方差两个参数决定。假设噪声服从高斯分布时,最大似然估计 = 最小二乘法
- 似然函数:给定参数时数据出现的概率。最大似然估计就是找”最可能产生这组数据”的参数
- 变量变换:概率密度变换时要乘雅可比因子(“橡皮筋拉伸”的缩放比例)
- 熵:不确定性的度量。“惊讶度量表”——概率越低的事件发生时信息量越大
- KL散度:两个分布之间的”差异”。非负、不对称。最小化KL散度 = 最大化似然函数
- 条件熵和互信息:条件熵 = 已知一个变量后剩余的不确定性;互信息 = 两个变量共享的信息量
知识地图:
├── 常见分布(均匀/指数/拉普拉斯/狄拉克δ/经验分布)
│ │ ├── 方差 → 样本方差(有偏 → 无偏修正)
│ │ └── 等价于最小化平方和误差(第1章的误差函数)
├── 变量变换(雅可比因子 → 标准化流的基础)
├── KL散度(分布差异 → 模型训练的理论基础)
下一章我们会学习概率模型的估计方法——怎么用数据来拟合分布、做预测。
深度学习笔记-1:多项式拟合、概率论与信息论基础
周一 9月 01 202510636 字 · 39 分钟