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 可以说是深度学习训练过程中使用频率最高的一组统计学函数。

posted @ 2026-06-15 11:43  johnny_zhao  阅读(8)  评论(0)    收藏  举报