[预备知识]4. 概率基础

人工智能

概率基础

本章节介绍深度学习中的概率基础知识,包括基本概念、概率分布和统计推断。

1. 概率基础

1.1 基本概念

  • 随机变量:可以取不同值的变量,其值由随机试验的结果决定
  • 概率分布:描述随机变量取值的可能性分布
  • 条件概率:在给定某事件发生的条件下,另一事件发生的概率

概率基础

本章节介绍深度学习中的概率基础知识,包括基本概念、概率分布和统计推断。

1. 概率基础

1.1 基本概念

概率公理

概率论的基础由以下三条公理构成,这些公理为所有概率计算提供了数学基础:

  1. 非负性
    P ( A ) ≥ 0 P(A) \geq 0 P(A)0
    任何事件的概率都是非负的。例如,抛硬币出现正面的概率不可能是负数。

  2. 规范性
    P ( Ω ) = 1 P(\Omega) = 1 P(Ω)=1
    所有可能事件的概率总和为1。例如,抛硬币(正面或反面)的概率总和必然为1。

  3. 可列可加性
    P ( ⋃ i = 1 ∞ A i ) = ∑ i = 1 ∞ P ( A i ) (当事件  A i  互斥时) P\left(\bigcup_{i=1}^\infty A_i\right) = \sum_{i=1}^\infty P(A_i) \quad \text{(当事件 } A_i \text{ 互斥时)} P(i=1Ai)=i=1P(Ai)(当事件 Ai 互斥时)
    互斥事件(即不同时发生的事件)的并集概率等于各事件概率之和。例如,抛一次骰子出现1点或2点的概率是 1 / 6 + 1 / 6 = 1 / 3 1/6 + 1/6 = 1/3 1/6+1/6=1/3

# 示例:计算骰子概率
dice_outcomes = [1, 2, 3, 4, 5, 6]
prob_even = 3 / 6  # 偶数事件(2,4,6)的概率
print(f"骰子出现偶数的概率: {prob_even}")  # 输出 0.5(符合规范性)

1.2 联合概率与条件概率

联合概率

联合概率 P ( X = x , Y = y ) P(X=x, Y=y) P(X=x,Y=y) 表示两个事件同时发生的概率。例如,同时抛硬币和骰子,硬币为正面且骰子为3的概率。

条件概率

条件概率 P ( Y = y ∣ X = x ) P(Y=y | X=x) P(Y=yX=x) 表示在已知事件 X = x X=x X=x 发生的条件下,事件 Y = y Y=y Y=y 发生的概率。其计算公式为:
P ( Y = y ∣ X = x ) = P ( X = x , Y = y ) P ( X = x ) P(Y=y | X=x) = \frac{P(X=x, Y=y)}{P(X=x)} P(Y=yX=x)=P(X=x)P(X=x,Y=y)

示例:在天气预测中,已知今天下雨的条件下,明天下雨的概率。

# 联合概率表(X: 天气,Y: 是否带伞)
#          带伞(Y=0)  不带伞(Y=1)
# 晴天(X=0)   0.1        0.5
# 雨天(X=1)   0.3        0.1
import matplotlib.pyplot as plt
import seaborn as sns
import torch
joint_probs = torch.tensor([[0.1, 0.5], [0.3, 0.1]])

# 计算边缘概率 P(X=雨天)
p_rain = joint_probs[1, :].sum()  # 0.3 + 0.1 = 0.4

# 计算条件概率 P(带伞 | 雨天)
p_umbrella_given_rain = joint_probs[1, 0] / p_rain  # 0.3 / 0.4 = 0.75
print(f"雨天带伞的条件概率: {p_umbrella_given_rain:.2f}")
plt.figure(figsize=(8,6))
sns.heatmap(joint_probs.numpy(), 
            annot=True, 
            fmt=".2f",
            cmap="YlGnBu",
            xticklabels=['Y=0', 'Y=1'],
            yticklabels=['X=0', 'X=1'])
plt.title("联合概率分布热力图 P(X,Y)", fontsize=14)
plt.xlabel("Y变量", fontsize=12)
plt.ylabel("X变量", fontsize=12)
plt.show()

2. 概率分布

2.1 离散分布

2.1.1 伯努利分布

定义:描述单次二元试验(成功/失败)的概率分布。
概率质量函数(PMF)
P ( X = k ) = { p if  k = 1 ( 成功 ) 1 − p if  k = 0 ( 失败 ) P(X=k) = \begin{cases} p & \text{if } k=1 \quad (\text{成功}) \\ 1-p & \text{if } k=0 \quad (\text{失败}) \end{cases} P(X=k)={p1pif k=1(成功)if k=0(失败)

参数

  • p p p:成功的概率(如抛硬币正面的概率)
p = 0.6  # 成功概率为60%
bern_dist = torch.distributions.Bernoulli(probs=p)
samples = bern_dist.sample((1000,))  # 生成1000次试验样本

print(f"理论成功概率: {p}")
print(f"实际样本成功比例: {samples.float().mean():.2f}")  # 约0.6

2.1.2 二项分布

定义:描述 n n n 次独立伯努利试验中成功次数的分布。
PMF
P ( X = k ) = C ( n , k ) p k ( 1 − p ) n − k P(X=k) = C(n, k) p^k (1-p)^{n-k} P(X=k)=C(n,k)pk(1p)nk
其中 C ( n , k ) = n ! k ! ( n − k ) ! C(n, k) = \frac{n!}{k!(n-k)!} C(n,k)=k!(nk)!n! 是组合数。

参数

  • n n n:试验次数
  • p p p:单次成功的概率

应用场景

  • 抛10次硬币出现正面的次数
  • 100件产品中的次品数量
n, p = 10, 0.3
binom_dist = torch.distributions.Binomial(n, probs=p)
k = 4  # 成功4次的概率
prob_k = binom_dist.log_prob(k).exp()  # 计算P(X=4)

print(f"在{n}次试验中成功{k}次的概率: {prob_k:.3f}")  # 约0.200

2.2 连续分布

2.2.1 正态分布(高斯分布)

定义:自然界中大量现象服从的分布(如身高、测量误差)。
概率密度函数(PDF)
f ( x ) = 1 σ 2 π e − ( x − μ ) 2 2 σ 2 f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}} f(x)=σ2π 1e2σ2(xμ)2

参数

  • μ \mu μ:均值(分布中心)
  • σ \sigma σ:标准差(分布宽度)

特性

  • 68% 的数据落在 [ μ − σ , μ + σ ] [\mu-\sigma, \mu+\sigma] [μσ,μ+σ]
  • 95% 的数据落在 [ μ − 2 σ , μ + 2 σ ] [\mu-2\sigma, \mu+2\sigma] [μ2σ,μ+2σ]
mu, sigma = 0.0, 1.0
normal_dist = torch.distributions.Normal(mu, sigma)

# 计算区间概率
x1, x2 = -1, 1
prob = normal_dist.cdf(torch.tensor(x2)) - normal_dist.cdf(torch.tensor(x1))
print(f"数据在[{x1}, {x2}]的概率: {prob:.3f}")  # 输出约0.682

2.2.2 均匀分布

定义:在区间 [ a , b ] [a, b] [a,b] 内所有值出现的概率相等。
PDF
f ( x ) = { 1 b − a a ≤ x ≤ b 0 其他 f(x) = \begin{cases} \frac{1}{b-a} & a \leq x \leq b \\ 0 & \text{其他} \end{cases} f(x)={ba10axb其他

应用场景

  • 随机数生成
  • 无先验知识时的默认分布
a, b = 2.0, 5.0
uniform_dist = torch.distributions.Uniform(a, b)

# 计算概率密度在区间内的值
x = 3.5
pdf_value = torch.exp(uniform_dist.log_prob(x))
print(f"x=3.5处的概率密度: {pdf_value:.3f}")  # 1/(5-2) ≈ 0.333s

3. 统计推断

3.1 最大似然估计(MLE)

核心思想:选择使观测数据出现概率最大的参数。
数学形式
θ ^ MLE = arg ⁡ max ⁡ θ ∏ i = 1 n P ( x i ∣ θ ) \hat{\theta}_{\text{MLE}} = \arg\max_\theta \prod_{i=1}^n P(x_i | \theta) θ^MLE=argθmaxi=1nP(xiθ)

示例:估计正态分布的均值和方差
假设数据 { x 1 , . . . , x n } \{x_1, ..., x_n\} {x1,...,xn} 服从 N ( μ , σ 2 ) N(\mu, \sigma^2) N(μ,σ2),MLE估计为:
μ ^ = 1 n ∑ i = 1 n x i , σ ^ 2 = 1 n ∑ i = 1 n ( x i − μ ^ ) 2 \hat{\mu} = \frac{1}{n}\sum_{i=1}^n x_i, \quad \hat{\sigma}^2 = \frac{1}{n}\sum_{i=1}^n (x_i - \hat{\mu})^2 μ^=n1i=1nxi,σ^2=n1i=1n(xiμ^)2

# 生成正态分布样本
true_mu, true_sigma = 5.0, 2.0
data = torch.normal(true_mu, true_sigma, size=(1000,))

# MLE估计参数
mu_hat = data.mean()
sigma_hat = torch.sqrt(torch.mean((data - mu_hat)**2))  # 注意这是有偏估计

print(f"真实参数: μ={true_mu}, σ={true_sigma}")
print(f"MLE估计: μ̂={mu_hat:.3f}, σ̂={sigma_hat:.3f}")  # 结果接近真实值

3.2 假设检验(t检验)

目的:判断两组数据的均值是否有显著差异。
t统计量公式
t = x ˉ 1 − x ˉ 2 s 1 2 n 1 + s 2 2 n 2 t = \frac{\bar{x}_1 - \bar{x}_2}{\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}} t=n1s12+n2s22 xˉ1xˉ2
其中 x ˉ i \bar{x}_i xˉi 为样本均值, s i 2 s_i^2 si2 为样本方差, n i n_i ni 为样本量。

结果解读

  • p值:若 p < 0.05,拒绝原假设(认为均值不同)
  • t值:绝对值越大,差异越显著
# 生成两组数据(假设是模型A和模型B的准确率)
model_A = torch.normal(0.85, 0.1, (100,))  # 均值85%,标准差10%
model_B = torch.normal(0.88, 0.1, (100,))  # 均值88%

# 独立双样本t检验
from scipy.stats import ttest_ind
t_stat, p_value = ttest_ind(model_A.numpy(), model_B.numpy())

print(f"t统计量: {t_stat:.3f}")
print(f"p值: {p_value:.3f}")
if p_value < 0.05:
    print("结论: 模型B的准确率显著高于模型A")
else:
    print("结论: 无显著差异")

4. 深度学习中的概率应用

4.1 交叉熵损失

数学定义:衡量预测分布 q q q 与真实分布 p p p 的差异:
H ( p , q ) = − ∑ i = 1 C p i log ⁡ q i H(p, q) = -\sum_{i=1}^C p_i \log q_i H(p,q)=i=1Cpilogqi

在分类任务中的应用

  • 真实分布 p p p 是 one-hot 编码(如标签 [0, 1, 0])
  • 预测分布 q q q 是 softmax 输出(如 [0.2, 0.7, 0.1])
# 三分类任务示例
logits = torch.tensor([[1.2, 3.0, 0.5], [0.5, 2.0, 1.5]])  # 模型原始输出
targets = torch.tensor([1, 2])  # 真实类别索引

# 计算交叉熵损失
loss = F.cross_entropy(logits, targets)
print(f"交叉熵损失: {loss:.3f}")  # 输出约0.551

# 手动验证
probs = F.softmax(logits, dim=1)  # 转换为概率
true_probs = torch.zeros_like(probs).scatter(1, targets.unsqueeze(1), 1.0)
manual_loss = - (true_probs * torch.log(probs)).sum(dim=1).mean()
print(f"手动计算损失: {manual_loss:.3f}")  # 应与上述结果一致

4.2 变分自编码器(VAE)

核心思想:通过概率模型学习数据的潜在表示。
变分下界(ELBO)
L = E q ( z ∣ x ) [ log ⁡ p ( x ∣ z ) ] − KL ( q ( z ∣ x ) ∥ p ( z ) ) \mathcal{L} = \mathbb{E}_{q(z|x)}[\log p(x|z)] - \text{KL}(q(z|x) \| p(z)) L=Eq(zx)[logp(xz)]KL(q(zx)p(z))

  • 第一项:重构损失,要求解码后的数据与输入相似
  • 第二项:KL散度,约束潜在变量分布接近先验分布(通常为标准正态)
class VAE(nn.Module):
    def __init__(self, input_dim=784, latent_dim=20):
        super().__init__()
        # 编码器:输入 -> 潜在分布的参数 (μ, logσ²)
        self.encoder = nn.Linear(input_dim, latent_dim*2)
        
        # 解码器:潜在变量 -> 重构数据
        self.decoder = nn.Sequential(
            nn.Linear(latent_dim, 512),
            nn.ReLU(),
            nn.Linear(512, input_dim),
            nn.Sigmoid()
        )
    
    def reparameterize(self, mu, logvar):
        std = torch.exp(0.5*logvar)  # 标准差
        eps = torch.randn_like(std)   # 随机噪声
        return mu + eps * std        # 重参数化技巧
    
    def forward(self, x):
        # 编码
        h = self.encoder(x)
        mu, logvar = h.chunk(2, dim=1)
        
        # 采样潜在变量
        z = self.reparameterize(mu, logvar)
        
        # 解码重构
        x_recon = self.decoder(z)
        return x_recon, mu, logvar

# 损失函数计算
def vae_loss(recon_x, x, mu, logvar):
    BCE = F.binary_cross_entropy(recon_x, x, reduction='sum')  # 重构损失
    KLD = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())  # KL散度
    return BCE + KLD
import numpy as np
import torch
import matplotlib.pyplot as plt

# 模拟抛硬币实验
num_flips = 1000
flips = np.random.choice(['正面', '反面'], size=num_flips)

# 计算概率
prob_head = np.mean(flips == '正面')
print(f"正面概率: {prob_head:.3f}")

本章介绍了概率分布和统计推断的基本概念,以及在深度学习中的应用。通过这些内容,我们可以更好地理解和利用概率模型,为深度学习模型的训练和评估提供基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ayiya_Oese

我的分享值一杯奶茶吗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值