深度思考——概率论与神经网络训练的关系

概率论基础

期望,均值,方差与KL散度

如果把概率论看作一门"描述不确定性"的语言,那么期望、均值、方差和 KL 散度并不是零散的公式,而是围绕同一个核心问题展开的不同刻画方式:当一个变量不再是确定值,而是一个分布时,我们如何用有限的信息去总结它、比较它、以及衡量它的不确定性。理解这些概念的关键,不在于记住公式本身,而在于把它们放回"随机变量与分布"的统一视角中。

首先需要明确一个前提,当我们说一个随机变量 XXX,本质上是在说"这个量的取值不是固定的,而是按照某种概率分布出现"。这个分布可以是离散的,也可以是连续的。期望的出现,正是为了回答一个最自然的问题:如果这个随机过程重复很多次,结果的平均值会是多少。数学上,期望定义为对所有可能取值按其概率加权的平均:

E[X]=∑xx⋅p(x)或E[X]=∫x⋅p(x) dx \mathbb{E}[X] = \sum_x x \cdot p(x) \quad \text{或} \quad \mathbb{E}[X] = \int x \cdot p(x) \, dx E[X]=x∑x⋅p(x)或E[X]=∫x⋅p(x)dx

这里的形式取决于变量是离散还是连续。期望不是某一次实验的结果,而是分布的一个整体属性,它描述的是"长期平均趋势"。因此它也常被称为均值,两者在绝大多数语境下是同一个概念,只是"期望"更强调从分布定义出发,"均值"更偏向统计直觉。

但是仅有期望是不够的,因为两个分布可能具有相同的均值,却有完全不同的波动情况。例如一个变量总是取 5,另一个变量一半概率取 0,一半概率取 10,它们的期望都是 5,但显然后者的不确定性更大。这种"围绕均值的离散程度"就是方差要刻画的内容。方差的定义是:

Var(X)=E[(X−E[X])2] \mathrm{Var}(X) = \mathbb{E}\big[(X - \mathbb{E}[X])^2\big] Var(X)=E[(X−E[X])2]

它本质上是"偏离均值的平方的期望"。之所以要平方,一方面是避免正负抵消,另一方面是强调偏离越大惩罚越重。方差越大,说明这个分布越"分散",不确定性越强;方差越小,说明变量更集中在均值附近。如果进一步取平方根,就得到标准差,它的量纲与原变量一致,更直观地反映波动大小。

在很多机器学习问题中,高斯分布之所以频繁出现,正是因为它可以用"均值 + 方差"这两个量完全刻画:

X∼N(μ,σ2) X \sim \mathcal{N}(\mu, \sigma^2) X∼N(μ,σ2)

其中 μ\muμ 就是期望,σ2\sigma^2σ2 是方差。均值决定分布中心位置,方差决定分布宽度。这种分布在统计上具有很多良好性质,例如最大熵性质、中心极限定理下的自然出现等,因此成为默认的噪声模型。

如果说期望和方差是在描述"单个分布内部的性质",那么 KL 散度则是在回答另一个问题:两个分布之间差异有多大。给定两个分布 p(x)p(x)p(x) 和 q(x)q(x)q(x),KL 散度定义为:

DKL(p∥q)=∑xp(x)log⁡p(x)q(x)或∫p(x)log⁡p(x)q(x)dx D_{\mathrm{KL}}(p \parallel q) = \sum_x p(x)\log\frac{p(x)}{q(x)} \quad \text{或} \quad \int p(x)\log\frac{p(x)}{q(x)}dx DKL(p∥q)=x∑p(x)logq(x)p(x)或∫p(x)logq(x)p(x)dx

这个量可以理解为:如果真实数据来自分布 ppp,但我们用分布 qqq 去近似,那么平均来说会多付出多少"信息代价"。从信息论角度看,它衡量的是编码效率的损失;从统计角度看,它衡量的是模型分布与真实分布之间的不匹配程度。

KL 散度有几个非常重要的性质。首先它永远非负,且只有当 p=qp=qp=q 时才为零,这意味着它可以作为一种"距离"的度量,但它并不对称,也不满足三角不等式,因此严格来说不是数学意义上的距离。其次它是有方向的,DKL(p∥q)D_{\mathrm{KL}}(p\parallel q)DKL(p∥q) 和 DKL(q∥p)D_{\mathrm{KL}}(q\parallel p)DKL(q∥p) 通常不同,这一点在机器学习中非常关键,因为选择哪一个方向会影响优化行为。

把这些概念串起来,可以看到一个清晰的层次结构。期望是对随机变量的"中心位置"的刻画,方差是对"波动程度"的刻画,它们都属于分布的低阶统计量,是对复杂分布的压缩描述。而 KL 散度则跳到更高一层,它不再关注单个分布内部,而是比较两个分布整体形状的差异。

在机器学习中,这些量并不是孤立使用的,而是形成一条闭环逻辑。以最常见的监督学习为例,我们假设存在一个真实条件分布 pdata(y∣x)p_{\text{data}}(y\mid x)pdata(y∣x),而模型给出一个参数化分布 pθ(y∣x)p_\theta(y\mid x)pθ(y∣x)。训练的目标就是让模型分布尽可能接近真实分布,这可以通过最小化 KL 散度来表达:

min⁡θDKL(pdata∥pθ) \min_\theta D_{\mathrm{KL}}(p_{\text{data}} \parallel p_\theta) θminDKL(pdata∥pθ)

进一步展开可以得到最大似然训练目标,这又在具体分布假设下转化为熟悉的损失函数。例如在高斯假设下,最小化 KL 散度等价于最小化均方误差,这时方差控制误差的尺度;在分类任务中,对应的是交叉熵损失,本质上也是 KL 散度的具体形式。

概率分布与神经网络

从这个角度再回头看,可以把整个概率建模过程理解为:用期望去预测中心趋势,用方差去表达不确定性,用 KL 散度去衡量模型与真实世界之间的差距。神经网络则提供了一个强大的函数逼近工具,使得这些量不再是固定常数,而是可以随着输入 xxx 动态变化,从而刻画复杂的条件分布。

因此,这些概率论概念之所以重要,不在于它们各自的公式,而在于它们共同构成了一套描述不确定性的语言体系。期望告诉我们"平均会发生什么",方差告诉我们"可能偏离多少",KL 散度告诉我们"我们对世界的理解与真实情况差了多少"。一旦把它们放在"用模型逼近真实分布"的框架中,它们就不再是零散记忆点,而是彼此紧密连接的工具链。

这句话的核心其实是在说:训练神经网络时,我们表面上是在最小化某个损失函数,例如 MSE 或交叉熵;但更深一层看,我们是在让模型定义出来的概率分布 pθ(y∣x)p_\theta(y\mid x)pθ(y∣x) 尽量接近真实数据背后的分布 pdata(y∣x)p_{\text{data}}(y\mid x)pdata(y∣x)。KL 散度、最大似然、均方误差、交叉熵之间并不是四个孤立概念,而是从"分布逼近"这一个目标逐步展开得到的不同表达。

先从 KL 散度开始。假设真实世界存在一个条件分布 pdata(y∣x)p_{\text{data}}(y\mid x)pdata(y∣x),它表示给定输入 xxx 时,真实标签或真实输出 yyy 的概率规律。神经网络则给出一个模型分布 pθ(y∣x)p_\theta(y\mid x)pθ(y∣x),其中 θ\thetaθ 表示网络的所有参数,也就是权重和偏置。训练的目标可以写成:让模型分布尽量靠近真实分布。用 KL 散度表示就是:

DKL(pdata(y∣x)∥pθ(y∣x))=Epdata[log⁡pdata(y∣x)pθ(y∣x)] D_{\mathrm{KL}}\big(p_{\text{data}}(y\mid x)\parallel p_\theta(y\mid x)\big)=\mathbb{E}{p{\text{data}}}\left[\log\frac{p_{\text{data}}(y\mid x)}{p_\theta(y\mid x)}\right] DKL(pdata(y∣x)∥pθ(y∣x))=Epdata[logpθ(y∣x)pdata(y∣x)]

把这个式子展开,就会发现关键关系。KL 散度等于:

DKL(pdata∥pθ)=Epdata[log⁡pdata(y∣x)]−Epdata[log⁡pθ(y∣x)] D_{\mathrm{KL}}(p_{\text{data}}\parallel p_\theta) = \mathbb{E}{p{\text{data}}}[\log p_{\text{data}}(y\mid x)] - \mathbb{E}{p{\text{data}}}[\log p_\theta(y\mid x)] DKL(pdata∥pθ)=Epdata[logpdata(y∣x)]−Epdata[logpθ(y∣x)]

这里第一项 Epdata[log⁡pdata(y∣x)]\mathbb{E}{p{\text{data}}}[\log p_{\text{data}}(y\mid x)]Epdata[logpdata(y∣x)] 只和真实数据分布有关,不含模型参数 θ\thetaθ。训练时我们不能改变真实世界的数据分布,只能改变模型参数,所以第一项对优化来说是常数。于是最小化 KL 散度,就等价于最大化第二项:

max⁡θEpdata[log⁡pθ(y∣x)] \max_\theta \mathbb{E}{p{\text{data}}}[\log p_\theta(y\mid x)] θmaxEpdata[logpθ(y∣x)]

这就是最大似然的来源。所谓最大似然,就是让模型给真实观测数据分配尽可能高的概率。换句话说,如果真实样本是 (xi,yi)(x_i,y_i)(xi,yi),那么一个好的模型应该让 pθ(yi∣xi)p_\theta(y_i\mid x_i)pθ(yi∣xi) 尽可能大。训练集中有很多样本时,就希望所有真实样本在模型下的联合概率尽可能大:

max⁡θ∏ipθ(yi∣xi) \max_\theta \prod_i p_\theta(y_i\mid x_i) θmaxi∏pθ(yi∣xi)

为了方便计算,通常取对数,把乘积变成求和:

max⁡θ∑ilog⁡pθ(yi∣xi) \max_\theta \sum_i \log p_\theta(y_i\mid x_i) θmaxi∑logpθ(yi∣xi)

而深度学习里习惯做"最小化损失",所以再取负号,就得到负对数似然:

min⁡θ−∑ilog⁡pθ(yi∣xi) \min_\theta -\sum_i \log p_\theta(y_i\mid x_i) θmin−i∑logpθ(yi∣xi)

这一步非常重要。它说明很多损失函数的本质都是负对数似然,也就是"模型给真实答案的概率越低,惩罚越大;模型给真实答案的概率越高,惩罚越小"。因此,损失函数不是随便设计出来的,而是来自一个概率建模假设:你先假设 y∣xy\mid xy∣x 服从某个分布,然后最大化这个分布对真实数据的似然,最后就得到对应的损失函数。

回归任务中最常见的假设是高斯分布。也就是说,给定输入 xxx,真实输出 yyy 并不是严格等于某个确定值,而是围绕某个均值上下波动:

y∣x∼N(μθ(x),σ2) y\mid x \sim \mathcal{N}(\mu_\theta(x), \sigma^2) y∣x∼N(μθ(x),σ2)

这里 μθ(x)\mu_\theta(x)μθ(x) 是神经网络输出的预测值,表示条件分布的均值;σ2\sigma^2σ2 是噪声方差,表示真实值围绕均值的波动程度。高斯分布的概率密度为:

pθ(y∣x)=12πσ2exp⁡(−(y−μθ(x))22σ2) p_\theta(y\mid x) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y-\mu_\theta(x))^2}{2\sigma^2}\right) pθ(y∣x)=2πσ2 1exp(−2σ2(y−μθ(x))2)

现在对它取负对数,就得到:

−log⁡pθ(y∣x)=(y−μθ(x))22σ2+12log⁡(2πσ2) -\log p_\theta(y\mid x) = \frac{(y-\mu_\theta(x))^2}{2\sigma^2} + \frac{1}{2}\log(2\pi\sigma^2) −logpθ(y∣x)=2σ2(y−μθ(x))2+21log(2πσ2)

如果 σ2\sigma^2σ2 被看作固定常数,那么第二项是常数,第一项前面的 12σ2\frac{1}{2\sigma^2}2σ21 也只是一个固定缩放系数,不改变最优解的位置。于是最小化负对数似然,就等价于最小化:

(y−μθ(x))2 (y-\mu_\theta(x))^2 (y−μθ(x))2

这就是均方误差 MSE 的概率来源。也就是说,当你使用 MSE 训练回归模型时,你实际上是在隐含地假设:真实输出等于模型预测均值加上一个高斯噪声:

y=μθ(x)+ϵ,ϵ∼N(0,σ2) y = \mu_\theta(x) + \epsilon,\qquad \epsilon\sim\mathcal{N}(0,\sigma^2) y=μθ(x)+ϵ,ϵ∼N(0,σ2)

所以 MSE 并不是单纯因为"平方误差看起来合理"才被使用,而是因为它对应了高斯噪声假设下的最大似然估计。预测错得越远,在高斯分布下这个真实样本出现的概率就越低,负对数似然就越大,于是损失越大。

这里"方差控制误差尺度"的意思也可以更具体地理解。如果 σ2\sigma^2σ2 很小,说明我们假设数据噪声很小,真实值应该非常接近模型预测均值。那么同样大小的误差会被惩罚得更重,因为 (y−μθ(x))22σ2\frac{(y-\mu_\theta(x))^2}{2\sigma^2}2σ2(y−μθ(x))2 中分母很小。相反,如果 σ2\sigma^2σ2 很大,说明我们认为数据本身噪声较强,真实值偏离预测均值是可以接受的,于是同样的误差惩罚会变小。在固定方差的普通 MSE 中,这个尺度通常被吸收到学习率或整体损失权重里;但如果模型同时预测方差,方差就会真正参与不确定性建模。

当网络不仅输出均值 μθ(x)\mu_\theta(x)μθ(x),还输出方差 σθ2(x)\sigma_\theta^2(x)σθ2(x) 时,损失会变成:

−log⁡pθ(y∣x)=(y−μθ(x))22σθ2(x)+12log⁡σθ2(x)+constant -\log p_\theta(y\mid x) = \frac{(y-\mu_\theta(x))^2}{2\sigma_\theta^2(x)} + \frac{1}{2}\log\sigma_\theta^2(x) + \text{constant} −logpθ(y∣x)=2σθ2(x)(y−μθ(x))2+21logσθ2(x)+constant

这个式子非常有意思。第一项表示误差越大损失越大,但如果模型认为当前样本不确定性很高,也就是 σθ2(x)\sigma_\theta^2(x)σθ2(x) 很大,那么这个误差会被降权。第二项 12log⁡σθ2(x)\frac{1}{2}\log\sigma_\theta^2(x)21logσθ2(x) 则防止模型无脑把方差预测得无限大。如果没有这一项,模型可以通过把方差调得极大来掩盖所有预测错误。于是这个损失同时驱动模型学习两个东西:一方面让均值预测尽量准确,另一方面让方差预测能够合理反映不确定性。

分类任务的逻辑完全一样,只是分布换了。二分类中,标签 y∈{0,1}y\in\{0,1\}y∈{0,1},最自然的概率模型是伯努利分布。神经网络输出一个 logit zθ(x)z_\theta(x)zθ(x),经过 sigmoid 得到正类概率:

pθ(y=1∣x)=πθ(x)=11+e−zθ(x) p_\theta(y=1\mid x)=\pi_\theta(x)=\frac{1}{1+e^{-z_\theta(x)}} pθ(y=1∣x)=πθ(x)=1+e−zθ(x)1

那么标签 yyy 的概率可以统一写成:

pθ(y∣x)=πθ(x)y(1−πθ(x))1−y p_\theta(y\mid x) = \pi_\theta(x)^y \big(1-\pi_\theta(x)\big)^{1-y} pθ(y∣x)=πθ(x)y(1−πθ(x))1−y

如果真实标签是 1,那么这个式子变成 πθ(x)\pi_\theta(x)πθ(x);如果真实标签是 0,它变成 (1−πθ(x))(1-\pi_\theta(x))(1−πθ(x))。也就是说,模型给真实标签分配的概率越高,似然越大。对它取负对数,就得到:

−log⁡pθ(y∣x)=−[ylog⁡πθ(x)+(1−y)log⁡(1−πθ(x))] -\log p_\theta(y\mid x) = -\big[y\log \pi_\theta(x) + (1-y)\log(1-\pi_\theta(x))\big] −logpθ(y∣x)=−[ylogπθ(x)+(1−y)log(1−πθ(x))]

这就是二分类交叉熵。它的含义非常直接:如果真实标签是 1,那么损失就是 −log⁡πθ(x)-\log \pi_\theta(x)−logπθ(x),模型给正类概率越接近 1,损失越接近 0;如果真实标签是 0,那么损失就是 −log⁡(1−πθ(x))-\log(1-\pi_\theta(x))−log(1−πθ(x)),模型给负类概率越高,损失越小。

多分类任务中,标签 yyy 属于 KKK 个类别之一,对应的概率模型是 categorical 分布,也可以理解为一次试验的多项分布。神经网络输出 KKK 个 logit:

zθ(x)=(z1,z2,...,zK) z_\theta(x) = (z_1,z_2,\dots,z_K) zθ(x)=(z1,z2,...,zK)

然后通过 softmax 变成一个概率分布:

pθ(y=k∣x)=exp⁡(zk)∑j=1Kexp⁡(zj) p_\theta(y=k\mid x) = \frac{\exp(z_k)}{\sum_{j=1}^{K}\exp(z_j)} pθ(y=k∣x)=∑j=1Kexp(zj)exp(zk)

如果真实类别是 ccc,那么最大似然就是希望 pθ(y=c∣x)p_\theta(y=c\mid x)pθ(y=c∣x) 尽可能大。负对数似然就是:

−log⁡pθ(y=c∣x) -\log p_\theta(y=c\mid x) −logpθ(y=c∣x)

这就是多分类交叉熵在 one-hot 标签下的形式。如果把真实标签写成 one-hot 分布 pdata(y=k∣x)p_{\text{data}}(y=k\mid x)pdata(y=k∣x),也就是真实类别位置为 1,其余类别为 0,那么交叉熵可以写成:

H(pdata,pθ)=−∑k=1Kpdata(y=k∣x)log⁡pθ(y=k∣x) H(p_{\text{data}},p_\theta) = -\sum_{k=1}^{K} p_{\text{data}}(y=k\mid x)\log p_\theta(y=k\mid x) H(pdata,pθ)=−k=1∑Kpdata(y=k∣x)logpθ(y=k∣x)

因为 one-hot 标签只有真实类别那一项为 1,所以它最终就退化成:

−log⁡pθ(y=c∣x) -\log p_\theta(y=c\mid x) −logpθ(y=c∣x)

这也解释了为什么分类损失不是直接惩罚"类别编号差多少"。比如猫是类别 2、狗是类别 3,并不意味着狗比车更接近猫。分类任务真正关心的是概率分布:模型有没有把足够高的概率分配给真实类别,同时把其他类别的概率压低。因此交叉熵比平方误差更适合分类,因为它直接对应离散分布的最大似然。

交叉熵与 KL 散度的关系也可以从公式上看清楚。KL 散度展开为:

DKL(pdata∥pθ)=∑ypdata(y∣x)log⁡pdata(y∣x)pθ(y∣x) D_{\mathrm{KL}}(p_{\text{data}}\parallel p_\theta) = \sum_y p_{\text{data}}(y\mid x) \log \frac{p_{\text{data}}(y\mid x)}{p_\theta(y\mid x)} DKL(pdata∥pθ)=y∑pdata(y∣x)logpθ(y∣x)pdata(y∣x)

继续拆开:

DKL(pdata∥pθ)=∑ypdata(y∣x)log⁡pdata(y∣x)−∑ypdata(y∣x)log⁡pθ(y∣x) D_{\mathrm{KL}}(p_{\text{data}}\parallel p_\theta) = \sum_y p_{\text{data}}(y\mid x)\log p_{\text{data}}(y\mid x) - \sum_y p_{\text{data}}(y\mid x)\log p_\theta(y\mid x) DKL(pdata∥pθ)=y∑pdata(y∣x)logpdata(y∣x)−y∑pdata(y∣x)logpθ(y∣x)

其中第二项的负号部分就是交叉熵:

H(pdata,pθ)=−∑ypdata(y∣x)log⁡pθ(y∣x) H(p_{\text{data}},p_\theta) = -\sum_y p_{\text{data}}(y\mid x)\log p_\theta(y\mid x) H(pdata,pθ)=−y∑pdata(y∣x)logpθ(y∣x)

而第一项只和真实分布自己有关,可以写成真实分布熵的负值。于是有:

H(pdata,pθ)=H(pdata)+DKL(pdata∥pθ) H(p_{\text{data}},p_\theta) = H(p_{\text{data}}) + D_{\mathrm{KL}}(p_{\text{data}}\parallel p_\theta) H(pdata,pθ)=H(pdata)+DKL(pdata∥pθ)

因为 H(pdata)H(p_{\text{data}})H(pdata) 不依赖模型参数 θ\thetaθ,所以最小化交叉熵就等价于最小化 KL 散度。换句话说,交叉熵损失表面上是在惩罚分类错误,本质上是在让模型输出的类别分布靠近真实类别分布。

现在可以把整条逻辑完全串起来。我们先承认真实数据来自一个未知分布 pdata(y∣x)p_{\text{data}}(y\mid x)pdata(y∣x),然后用神经网络定义一个可学习分布 pθ(y∣x)p_\theta(y\mid x)pθ(y∣x)。训练目标是让这两个分布尽可能接近,所以自然可以写成最小化 KL 散度。KL 散度展开后,去掉与模型无关的常数项,就变成最大化真实数据在模型下的对数概率,也就是最大似然。最大似然取负号后,就是最小化负对数似然。最后,根据你对 y∣xy\mid xy∣x 选择的分布形式不同,负对数似然就表现为不同的常见损失函数:如果假设连续回归目标服从固定方差高斯分布,就得到 MSE;如果假设二分类标签服从伯努利分布,就得到二分类交叉熵;如果假设多分类标签服从 categorical 分布,就得到 softmax 交叉熵。

所以,MSE 和交叉熵不是两个毫无关系的经验公式,而是同一个概率建模原则在不同输出类型下的结果。回归中的 MSE 来自"真实值围绕预测均值做高斯波动"的假设,分类中的交叉熵来自"真实类别是离散分布采样结果"的假设。神经网络的角色,是把输入 xxx 映射成这些分布的参数:在回归中输出高斯分布的均值或方差,在分类中输出伯努利分布或 categorical 分布的概率。训练过程的本质,则是不断调整网络参数,让模型分布给真实样本分配越来越高的概率,也就是让模型对数据世界的概率解释越来越合理。

相关推荐
莱歌数字1 小时前
AI在寻优计算的应用
人工智能·科技·系统架构·制造·cae
共绩算力2 小时前
2026年4月AI大模型热点速览:DeepSeek V4 与 GPT-5 Turbo 同台
人工智能·gpt·共绩算力
user_admin_god2 小时前
SSE 流式响应 Chunk 被截断问题的排查与修复
java·人工智能·spring boot·spring·maven·mybatis
互联网推荐官2 小时前
大模型应用开发的上下文工程与推理链路深度拆解
大数据·运维·人工智能
CCC:CarCrazeCurator2 小时前
自动驾驶泊车全面解析
人工智能·机器学习·自动驾驶
ZEGO即构2 小时前
AI教育重构教与学:RTC+AI如何赋能全学段教学场景?
人工智能·实时音视频·ai教育
小研说技术2 小时前
结构化输出让Agent返回可预测的格式数据
java·人工智能
Coremail邮件安全2 小时前
邮安实战,攻防有道|2026教育邮件安全实战闭门会在成都举行
人工智能
ECT-OS-JiuHuaShan2 小时前
整体论体系定理,全球开放,无法绕过
人工智能·科技·学习·算法·生活