PyTorch中统计学相关函数及其使用
在 PyTorch 中,统计学相关函数主要集中在 张量统计(descriptive statistics)、概率分布(probability distributions)、归一化统计量(normalization statistics) 和 评估指标计算 等方面。这些函数不仅用于数据分析,也广泛用于模型训练、损失函数设计、归一化层实现以及训练监控。
⸻
一、基础统计函数
1. mean() —— 均值
计算张量平均值。
import torch
x = torch.tensor([1., 2., 3., 4.])
torch.mean(x)
# tensor(2.5000)
指定维度:
x = torch.tensor([
[1.,2.,3.],
[4.,5.,6.]
])
torch.mean(x, dim=0)
# tensor([2.5, 3.5, 4.5])
训练中的应用
最常见场景:
Loss平均
loss = criterion(output, target)
loss = loss.mean()
例如:
nn.MSELoss(reduction='mean')
实际上内部就是:
Loss = \frac1N \sum_i l_i
⸻
2. sum() —— 求和
torch.sum(x)
例:
x = torch.tensor([1,2,3])
torch.sum(x)
# tensor(6)
训练中的应用
损失累计:
epoch_loss += loss.item()
或者:
loss = losses.sum()
⸻
3. median() —— 中位数
x = torch.tensor([1,100,2,3])
torch.median(x)
# tensor(2)
应用
异常值检测:
median_grad = torch.median(grad)
比均值更鲁棒。
⸻
4. mode() —— 众数
x = torch.tensor([1,1,2,2,2,3])
torch.mode(x)
返回:
(values=tensor(2),
indices=tensor(...))
应用
分类结果投票:
preds = torch.stack(pred_list)
final_pred = torch.mode(preds, dim=0).values
常见于集成学习。
⸻
二、方差与标准差
⸻
1. var()
计算方差:
torch.var(x)
数学定义:
Var(X)=E[(X-\mu)^2]
例:
x = torch.tensor([1.,2.,3.])
torch.var(x)
⸻
2. std()
标准差:
torch.std(x)
数学定义:
Std(X)=\sqrt{Var(X)}
⸻
训练中的核心应用
BatchNorm
BatchNorm需要:
mean = x.mean(dim=0)
var = x.var(dim=0)
然后:
\hat{x}=\frac{x-\mu}{\sqrt{\sigma^2+\epsilon}}
PyTorch源码内部大量使用:
torch.mean
torch.var
⸻
示例:
batch_mean = x.mean(0)
batch_var = x.var(0)
x_norm = (x - batch_mean) / torch.sqrt(batch_var + 1e-5)
这就是 BatchNorm 的核心。
⸻
三、最大值最小值统计
⸻
max()
torch.max(x)
或:
values, indices = torch.max(x, dim=1)
⸻
min()
torch.min(x)
⸻
训练中的应用
分类预测:
pred = output.argmax(dim=1)
本质:
torch.max(output, dim=1)
例如:
logits =
[
[0.1, 2.3, 0.4],
[1.5, 0.2, 3.1]
]
预测:
pred = logits.argmax(1)
结果:
tensor([1,2])
⸻
四、分位数统计
quantile()
计算分位数:
torch.quantile(x, q=0.5)
等价于:
median
⸻
例:
x = torch.arange(10.)
torch.quantile(x, 0.9)
结果:
tensor(8.1)
⸻
应用
梯度裁剪阈值估计:
grad_abs = grad.abs()
threshold = torch.quantile(
grad_abs,
0.99
)
异常样本过滤:
loss_threshold = torch.quantile(losses, 0.95)
⸻
五、协方差与相关系数
⸻
cov()
torch.cov(x)
计算协方差矩阵:
Cov(X,Y)=E[(X-\mu_x)(Y-\mu_y)]
⸻
例:
x = torch.tensor([
[1.,2.,3.],
[2.,4.,6.]
])
torch.cov(x)
⸻
corrcoef()
相关系数:
torch.corrcoef(x)
结果范围:
[-1,1]
⸻
应用
特征选择:
corr = torch.corrcoef(features.T)
发现:
• 高相关特征
• 冗余特征
⸻
六、排序统计
⸻
sort()
values, idx = torch.sort(x)
⸻
topk()
训练中极其常见:
values, idx = torch.topk( logits, k=5, dim=1 )
⸻
应用
Top-K Accuracy
_, pred = output.topk(5)
ImageNet训练中常见:
• Top-1
• Top-5
准确率统计。
⸻
七、概率统计函数
PyTorch提供完整概率分布模块:
torch.distributions
⸻
Normal
正态分布
from torch.distributions import Normal dist = Normal( loc=0, scale=1 ) sample = dist.sample()
⸻
Bernoulli
伯努利分布:
from torch.distributions import Bernoulli dist = Bernoulli(0.5) dist.sample()
⸻
Categorical
分类分布:
from torch.distributions import Categorical probs = torch.tensor([0.2,0.3,0.5]) dist = Categorical(probs) action = dist.sample()
⸻
应用场景
强化学习:
policy = Categorical(probs) action = policy.sample() log_prob = policy.log_prob(action)
PPO、A2C、REINFORCE中大量使用。
⸻
八、训练中最重要的统计函数
如果从实际深度学习训练角度排序:
函数 重要性 场景
mean ★★★★★ loss平均
sum ★★★★★ loss累计
max / argmax ★★★★★ 分类预测
std ★★★★★ BatchNorm
var ★★★★★ BatchNorm
topk ★★★★★ Top-K评估
quantile ★★★★ 异常样本过滤
median ★★★★ 鲁棒统计
cov ★★★ 特征分析
corrcoef ★★★ 特征选择
distributions ★★★★★ 强化学习、VAE
⸻
九、这些函数在经典模型中的实际使用
模型 使用的统计函数
CNN mean、var、std、max
ResNet BatchNorm(mean+var)
Transformer mean、std(LayerNorm)
BERT mean、std
GPT mean、std
VAE mean、var、Normal
PPO Categorical、Normal
DQN max
XGBoost特征分析 corrcoef、cov
例如 Transformer 的 LayerNorm:
mean = x.mean(-1, keepdim=True) std = x.std(-1, keepdim=True) x = (x - mean) / (std + 1e-5)
这里 mean() 和 std() 是每次前向传播都会执行的核心统计计算。
总结:
在模型训练中最常用、最关键的统计函数实际上只有几类:
1. 均值(mean) —— Loss计算、LayerNorm、BatchNorm
2. 方差/标准差(var/std) —— BatchNorm、LayerNorm
3. 最大值(max/argmax) —— 分类预测
4. TopK(topk) —— Top-K准确率
5. 概率分布(torch.distributions) —— 强化学习、VAE
6. 分位数(quantile) —— 异常值处理、梯度分析
其中 mean、var、std、argmax 可以说是深度学习训练过程中使用频率最高的一组统计学函数。

浙公网安备 33010602011771号