AI基石 | 概率统计三剑客:从“神箭手”到“老侦探”,AI 如何看透不确定的世界?

前言 在上一期,我们通过矩阵和特征值分解,学会了如何处理确定的数据结构。但在真实世界里,确定性是奢侈的,不确定性才是常态。

  • 自动驾驶摄像头在雾天看到一个轮廓,它凭什么判断是人而不是树?
  • ChatGPT 生成下一个字时,为什么选“快乐”而不是“开心”?
  • 模型参数成千上万,如何保证它们不会死记硬背(过拟合)?
  • 股票明天是涨是跌?

为了应对不确定性,AI 需要建立一套完整的概率世界观。这一阶段的数学基础,主要由三个部分组成:

  1. 分布模型 (Distribution Models):用来描述数据的形状。
  2. 极大似然估计 (MLE):用来根据数据反推模型的参数。
  3. 贝叶斯公式 (Bayes):用来结合经验和数据,做出更稳健的推断。

今天,我们就来彻底搞懂这概率统计的“三驾马车”。


一、 分布模型:给数据的“混乱”画像

如果我给你一堆杂乱无章的数据,AI 是无法理解的。AI 第一步要做的事,就是假设这些数据符合某种数学模型。这就叫“分布模型”。

在 AI 中,最重要、最无处不在的分布模型只有一个:高斯分布(Gaussian Distribution),也叫正态分布

1. 为什么是高斯分布?

你有没有发现,自然界中几乎所有的事情都呈现“中间多、两头少”的规律?

  • 人的身高:大部分人是中等身高,特别高和特别矮的很少。
  • 考试成绩:大部分人集中在平均分附近,满分和零分很少。
  • 传感器的噪音:大部分噪音在 0 附近波动。

中心极限定理 (Central Limit Theorem) 告诉我们:只要影响因素足够多且独立,最终的结果都会趋向于高斯分布。

高斯分布曲线图像

对于 AI 来说,初始化神经网络的参数扩散模型(Diffusion Model)的加噪过程,本质上都是在玩高斯分布。

  • 公式外观

    f(x)=1σ2πe−(x−μ)22σ2 f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}} f(x)=σ2π 1e2σ2(xμ)2

    别被公式吓到,你只需要关注两个核心参数:

    • μ (均值):决定了钟形曲线的中心位置(峰值在哪)。
    • σ (标准差):决定了钟形曲线的胖瘦程度(数据有多离散)。

AI 的任务: 所谓的“训练模型”,很多时候就是在猜这堆数据背后的 μ 和 σ 是多少。


二、 MLE(极大似然估计):相信“眼见为实”的神箭手

既然假设数据服从某种分布(比如高斯分布),那我们怎么知道 μ 和 σ 具体是多少呢?

这就轮到 MLE (Maximum Likelihood Estimation) 出场了。它的核心思想极其简单粗暴:眼见为实

🏹 场景:神箭手的靶子

假设墙上有几个弹孔(数据),主要集中在 10 环附近。

  • 假设 A:射手瞄准的是 10 环(μ=10)。那么射出这些弹孔的概率(似然度)很高。
  • 假设 B:射手瞄准的是 5 环(μ=5)。那么他偏离这么远射中 10 环的概率极低。

MLE 说:既然事情已经发生了,我就认为那个让这件事发生概率最大的参数,就是真实参数。

在深度学习中,Loss Function(损失函数) 的推导大多基于 MLE。 比如训练一个猫狗分类器,本质上就是调整参数,使得模型“看到这张图预测它是猫”的概率最大化。


三、 贝叶斯与 MAP:兼听则明的“老侦探”

MLE 有一个致命弱点:它太轻信数据了。如果数据太少,它会产生极端偏差。

比如抛硬币,只抛了一次,是正面。

  • MLE(神箭手)会说:“数据告诉我,这枚硬币出现正面的概率是 100%。”
  • 贝叶斯(老侦探)会说:“慢着!根据我的经验,硬币通常是均匀的。这一次正面可能是巧合。”

为了让大家深刻理解为什么我们需要贝叶斯,我们来看一个经典的医疗侦探难题

🕵️‍♂️ 侦探难题:你真的生病了吗?

假设有一种罕见的病毒“X 病毒”,在人群中的感染率是 0.1%(即 1000 人里有 1 人感染)。

现在的检测技术非常先进,准确率高达 99%:

  • 如果真的感染了,检测结果 99% 是阳性。
  • 如果没感染,检测结果 99% 是阴性。

现在,你去做了检测,结果显示“阳性”。请问,你真正感染病毒的概率有多大?

  • A. 99%
  • B. 90%
  • C. 不到 10%

直觉告诉我们是 A,但贝叶斯告诉我们,答案是 C(不到 9%)。

💡 贝叶斯公式的解密

P(观点∣事实)=P(事实∣观点)⋅P(观点)P(事实) P(\text{观点}|\text{事实}) = \frac{P(\text{事实}|\text{观点}) \cdot P(\text{观点})}{P(\text{事实})} P(观点事实)=P(事实)P(事实观点)P(观点)

在这个案例中:

  1. 似然 (Likelihood):得了病测出阳性的概率是 99%。
  2. 先验 (Prior):但在茫茫人海中,你得病的概率本身只有 0.1%。

事实是: 假阳性的人数(999 个健康人 × 1%误诊率 ≈ 10 人)远远多于真阳性的人数(1 个病人)。所以即使你是阳性,你更有可能属于那 10 个被误诊的倒霉蛋。

🚀 进阶:MAP (最大后验估计)

MAP (Maximum A Posteriori) 就是贝叶斯思维在 AI 中的数学实现。

MAP≈MLE (似然)×Prior (先验) \text{MAP} \approx \text{MLE (似然)} \times \text{Prior (先验)} MAPMLE (似然)×Prior (先验)

  • MLE 只在乎拟合数据。
  • MAP 在拟合数据的同时,会被“先验”拉回来一点。

高能结论:

在深度学习中,我们常用的 L2 正则化(Weight Decay),本质上就是 MAP 估计!

  • 我们假设参数 www 服从高斯分布(先验:参数不要太大)。

  • 训练时,一边让 Loss 变小(MLE),一边限制 www 不要太大(Prior)。

    这就是为了防止 AI 因为死记硬背数据(过拟合)而走火入魔。


四、 代码实战:高斯朴素贝叶斯分类器

为了一次性把**分布模型(高斯)、MLE(参数估计)、贝叶斯(分类推理)**全部讲清楚,我们手写一个 高斯朴素贝叶斯分类器 (Gaussian Naive Bayes)

任务:根据身高和体重数据,判断一个人是“男”还是“女”。 假设:男生的身高体重服从一个高斯分布,女生的也服从另一个高斯分布。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm


class GaussianNaiveBayes:
    def __init__(self):
        self.classes = None
        self.parameters = {}  # 存储每个类别的 mu 和 sigma

    def fit(self, X, y):
        """
        训练阶段 (MLE 过程):
        通过数据,计算出每个类别下,特征的高斯分布参数 (均值和标准差)
        """
        self.classes = np.unique(y)

        for c in self.classes:
            # 选出该类别的数据
            X_c = X[y == c]

            # MLE 核心:直接用数据的均值和标准差作为分布的参数
            # axis=0 表示对每一列(身高、体重)分别计算
            self.parameters[c] = {
                'mean': X_c.mean(axis=0),
                'std': X_c.std(axis=0)
            }

    def _calculate_likelihood(self, class_idx, x):
        """
        计算似然 (Likelihood):
        给定一个数据点 x,计算它在当前类别的分布模型中出现的概率密度
        这里使用了高斯分布公式 (Distribution Model)
        """
        mean = self.parameters[class_idx]['mean']
        std = self.parameters[class_idx]['std']

        # 使用高斯概率密度函数
        # 假设特征之间独立,概率相乘
        probability = norm.pdf(x, mean, std)
        return np.prod(probability)

    def predict(self, X):
        """
        预测阶段 (Bayes 过程):
        结合先验 (Prior) 和 似然 (Likelihood) 计算后验。
        比较 P(男|数据) 和 P(女|数据),谁大选谁
        """
        y_pred = []
        for x in X:
            posteriors = []

            for c in self.classes:
                # 1. 先验概率 (Prior):简单起见,假设男女概率相等 P(c)=0.5
                prior = 0.5

                # 2. 似然概率 (Likelihood): 代入高斯分布公式
                # 问:如果他是男生,长成 x 这样的概率大吗?
                likelihood = self._calculate_likelihood(c, x)

                # 3. 后验概率 (Posterior) ∝ Prior * Likelihood
                # 谁的后验概率大,就判给谁
                posteriors.append(prior * likelihood)

            # 选择后验概率最大的类别
            y_pred.append(self.classes[np.argmax(posteriors)])

        return np.array(y_pred)


# --- 数据生成与测试 ---
if __name__ == "__main__":
    # 1. 生成模拟数据 (真实分布)
    # 男生:身高均值175,体重均值70
    male_data = np.random.normal([175, 70], [5, 10], size=(100, 2))
    male_labels = np.zeros(100)  # 0 代表男

    # 女生:身高均值160,体重均值50
    female_data = np.random.normal([160, 50], [5, 8], size=(100, 2))
    female_labels = np.ones(100)  # 1 代表女

    # 合并数据
    X_train = np.vstack((male_data, female_data))
    y_train = np.hstack((male_labels, female_labels))

    # 2. 训练模型 (MLE 估计参数)
    model = GaussianNaiveBayes()
    model.fit(X_train, y_train)

    # 3. 打印模型“学”到的参数
    print("模型学习到的高斯分布参数 (MLE结果):")
    print(f"男生 (Class 0) - 均值: {model.parameters[0]['mean']}, 标准差: {model.parameters[0]['std']}")
    # 男生 (Class 0) - 均值: [175.06363251  69.47691559], 标准差: [ 4.96265361 10.59187553]
    print(f"女生 (Class 1) - 均值: {model.parameters[1]['mean']}, 标准差: {model.parameters[1]['std']}")
    # 女生 (Class 1) - 均值: [160.35175948  49.86145698], 标准差: [4.95257209 8.0124332 ]

    # 4. 预测新数据 (Bayes 推理)
    new_person = np.array([[162, 53]])  # 身高162,体重53
    prediction = model.predict(new_person)
    label = "女生" if prediction[0] == 1 else "男生"

    print(f"\n新数据 {new_person} 预测结果: {label}")
    # 新数据 [[162  53]] 预测结果: 女生
代码背后的数学逻辑
  1. fit 函数:做了 MLE 的工作。它不关心别的,只统计训练数据中男生的平均身高、体重的标准差。它在构建分布模型
  2. _calculate_likelihood 函数:使用了 高斯分布公式。它计算的是“假如你是男生,你长成这样的概率有多大”。
  3. predict 函数:做了 贝叶斯 的工作。它结合了先验(这里简化为 0.5)和似然,计算出属于哪个类别的可能性更大。

五、 总结与升华:AI 的不确定性哲学

通过这三个概念,我们终于构建起了 AI 的概率基石:

  1. 分布模型是 AI 的世界地图,它告诉 AI 数据应该长什么样(比如正态分布)。
  2. MLE 是绘制地图的测量工具,它通过有限的观测数据,画出了地图的具体轮廓(求出 μ,σ)。
  3. 贝叶斯 是 AI 的导航指南,它在地图(似然)的基础上,结合了出发前的常识(先验),防止 AI 在数据稀缺时迷路。

理解了这些,你就理解了为什么大模型在输出时会有 Temperature(温度)这个参数——本质上它是在调整输出概率分布的平滑程度,控制 AI 是该严谨地遵循 MLE(低温度),还是该更有创造性地进行随机采样(高温度)。

下一阶段预告 现在,我们的 AI 已经有了确定的骨架(线性代数)和处理不确定的智慧(概率统计)。 但是,它还是静止的。它不知道如何“变好”,不知道如何通过错误修正自己。 下一篇,我们将进入微积分的世界,探讨梯度下降与链式法则——赋予 AI 能够自我进化的“动力引擎”。这一次,我们将真正看到神经网络是如何“跑”起来的。


📚 参考资料(中文推荐)

  1. 《机器学习》(西瓜书) - 周志华 著
    • 推荐理由: 第 7 章“贝叶斯分类器”对 MLE 和 MAP 有非常通俗且严谨的中文推导。
  2. 《深度学习》(花书) - Ian Goodfellow 等 著(赵申剑等 译)
    • 推荐理由: 第 5 章“机器学习基础”详细阐述了 MLE 与 MAP 在深度学习中的本质区别。
  3. 《统计学习方法》 - 李航 著
    • 推荐理由: 国内统计机器学习领域的“圣经”,公式推导极其详尽。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐