深度学习中的概率论
你可能觉得概率论没用,是因为现代的深度学习框架(PyTorch/TensorFlow)封装得太好了。
- 它们把最大似然估计封装成了
CrossEntropy - 它们把大数定律封装成了
DataLoader - 它们把贝叶斯先验封装成了
Weight Decay
但那些你天天用的代码背后,其实全是概率论。如果把概率论抽走,深度学习这栋大楼立马就会塌,因为连**"损失函数(Loss Function)"**为什么这么写都解释不通。
一、为什么分类任务要用 Cross Entropy(交叉熵)?
代码里:nn.CrossEntropyLoss()
直觉:衡量两个向量像不像。
概率论真相:它是最大似然估计 (MLE)。
概率视角
- 场景:你要区分猫和狗。
- 概率视角:神经网络其实是在模拟一个条件概率 。
- 给一张图 ,输出它是猫 的概率。
- 训练目的:我想调整参数 ,让模型预测正确标签的概率最大化。
公式推导
这是最大似然的目标。
为了好算,两边取对数(把连乘变连加),再取个负号(把最大化变最小化):
结果:最大似然估计的公式推导下来,长得跟"交叉熵"一模一样。
结论
你以为你在"最小化距离",其实你在**"最大化已有数据出现的概率"**。没有概率论,分类任务的 Loss 都没法定义。
import torch.nn as nn
# 这行代码背后是最大似然估计
criterion = nn.CrossEntropyLoss()
loss = criterion(outputs, labels)
二、为什么回归任务用 MSE(均方误差)?
代码里:nn.MSELoss()
直觉:预测值和真实值的差的平方。
概率论真相:它假设误差服从正态分布。
推导
如果你假设模型预测的误差 (也就是误差是随机的、正态的)。
然后你再去推导最大似然估计(MLE):
取对数后:
最大化这个概率密度,等价于最小化均方误差 (MSE)。
结论
如果你换个 Loss(比如 L1 Loss),你就隐含假设了误差服从拉普拉斯分布。
你选择 Loss 的那一刻,你就在选概率分布。
| Loss 函数 | 隐含的误差分布 |
|---|---|
| MSE (L2) | 正态分布 |
| MAE (L1) | 拉普拉斯分布 |
| Huber Loss | 混合分布 |
三、Softmax 是什么?
代码里:F.softmax(logits, dim=1)
直觉:把一堆数变成加起来等于 1 的数。
概率论真相:它把神经网络的"打分"强行变成了**"概率分布"**。
解释
- 神经网络输出的是 Logits(比如 [2.0, 1.0, 0.1]),这没法解释。
- Softmax 的作用就是构建一个离散型随机变量的分布律。
- 它让模型敢说:"我有 70% 的把握它是猫"。
import torch.nn.functional as F
logits = torch.tensor([2.0, 1.0, 0.1])
probs = F.softmax(logits, dim=0)
# tensor([0.6590, 0.2424, 0.0986]) 加起来等于 1
四、SGD(随机梯度下降)里的 "S"
代码里:optimizer.step()
直觉:一次拿一小撮数据(Mini-batch)去更新。
概率论真相:大数定律 (LLN) 的应用。