大模型数学基础2
重点梳理了均值、方差、均匀分布、正态分布的概念、数学本质及其在大模型训练中的关键应用
一、 核心概念:描述数据的基础
1. 均值 (Mean / Average)
- 数学定义:数据集中所有数值之和除以数据个数。
- 总体均值:
μ = (1/N) Σ x_i - 样本均值:
x̄ = (1/n) Σ x_i
- 总体均值:
- 本质:描述数据分布的中心位置或期望值。
- PyTorch实现:
import torch x = torch.tensor([1., 2., 3., 4.]) mean = torch.mean(x) # 输出: 2.5 # 指定维度计算(常用于高维张量) x_2d = torch.randn(4, 10) # 4个样本,每个10维特征 mean_dim0 = torch.mean(x_2d, dim=0) # 沿第0维(样本维)计算,输出形状(10,)
2. 方差 (Variance) 与 标准差 (Standard Deviation)
- 数学定义:衡量数据点偏离均值的程度。
- 方差:
σ² = (1/N) Σ (x_i - μ)²(总体方差) - 样本方差:
s² = (1/(n-1)) Σ (x_i - x̄)²(使用n-1进行无偏估计) - 标准差:方差的平方根 (
σ或s),与原始数据单位一致。
- 方差:
- 本质:描述数据分布的离散程度。方差/标准差越大,数据越分散。
- PyTorch实现:
x = torch.tensor([1., 2., 3., 4.]) var_sample = torch.var(x, correction=1) # 样本方差,默认correction=1 var_population = torch.var(x, correction=0) # 总体方差 std = torch.std(x) # 标准差 # 实际应用:计算一个批次特征的方差 batch_features = torch.randn(32, 128) # (batch_size, feature_dim) batch_var = torch.var(batch_features, dim=0) # 计算每个特征维度的方差
二、 关键概率分布:模型初始化的蓝图
权重初始化是模型训练的第一步,合适的分布选择至关重要。
1. 均匀分布 (Uniform Distribution)
- 定义:在区间
[a, b)内,每个点出现的概率相等。 - 概率密度函数 (PDF):
f(x) = 1/(b-a), 当 a ≤ x < b - PyTorch实现与应用:
# 生成均匀分布随机数 a, b = -0.05, 0.05 uniform_tensor = (b - a) * torch.rand(1000) + a # 生成1000个在[a,b)的数 # 大模型应用:均匀分布初始化 (例如原始Transformer论文) weight = torch.empty(512, 256) torch.nn.init.uniform_(weight, a=-0.1, b=0.1) # 将weight初始化为[-0.1, 0.1)的均匀分布
2. 正态(高斯)分布 (Normal / Gaussian Distribution)
- 定义:由均值
μ和标准差σ决定的经典“钟形曲线”分布。 - 概率密度函数 (PDF):
f(x) = (1/(σ√(2π))) * exp(-(x-μ)²/(2σ²)) - PyTorch实现与应用:
# 生成正态分布随机数 mean, std = 0.0, 0.01 normal_tensor = torch.normal(mean=mean, std=std, size=(1000,)) # 大模型应用:更先进的初始化方法(如He初始化,适用于ReLU激活函数) weight = torch.empty(512, 256) # He初始化:std = sqrt(2 / fan_in),其中fan_in是输入神经元数 fan_in = weight.size(1) std_he = (2.0 / fan_in) ** 0.5 torch.nn.init.normal_(weight, mean=0.0, std=std_he)
两种分布对比与选择
| 特征 | 均匀分布 | 正态分布 |
|---|---|---|
| 形状 | 矩形 | 钟形曲线 |
| 参数 | 下限 a, 上限 b |
均值 μ, 标准差 σ |
| 初始化特点 | 简单,所有值在区间内概率相同 | 更符合自然规律,值集中在均值附近 |
| 典型应用 | 基础或原始Transformer初始化 | 现代主流的初始化方式(如He/Xavier) |
| 一个关键问题 | 若区间设置不当,可能导致梯度消失或爆炸 | 若标准差设置不当,同样可能引发训练不稳定 |
三、 核心枢纽:批归一化 (Batch Normalization)
批归一化是现代深度模型的标配,它直接依赖于对批次数据均值和方差的计算。
1. 批归一化步骤
对于一个小批量数据 B = {x_1, ..., x_m}:
- 计算批次统计量:
μ_B = (1/m) Σ x_i(批次均值)σ²_B = (1/m) Σ (x_i - μ_B)²(批次方差)
- 标准化:
x̂_i = (x_i - μ_B) / √(σ²_B + ε)(ε为极小值防除零) - 缩放与偏移:
y_i = γ * x̂_i + β(γ和β是可学习的参数,恢复模型的表达能力)
2. PyTorch实现与理解
import torch.nn as nn
# 使用PyTorch内置的BatchNorm层
batch_norm = nn.BatchNorm1d(num_features=128) # 对128维的特征进行批归一化
# 前向传播时
features = torch.randn(32, 128) # (batch_size, feature_dim)
normalized_features = batch_norm(features)
# 理解其内部计算(简化版):
def simple_batch_norm(x, gamma=1.0, beta=0.0, eps=1e-5):
batch_mean = x.mean(dim=0) # 计算批次均值
batch_var = x.var(dim=0, correction=0) # 计算批次方差
x_hat = (x - batch_mean) / torch.sqrt(batch_var + eps) # 标准化
return gamma * x_hat + beta # 缩放与偏移
3. 批归一化的作用
- 稳定训练:减轻内部协变量偏移,允许使用更大的学习率。
- 轻微正则化:批次统计量引入的噪声有正则化效果。
- 加速收敛:使损失函数更平滑,优化更顺畅。
归一化技术扩展
| 技术 | 计算均值和方差的维度 | 主要应用场景 |
|---|---|---|
| 批归一化 (Batch Norm) | 沿 batch 维度 |
标准卷积网络和全连接网络(batch较大时) |
| 层归一化 (Layer Norm) | 沿 feature 维度 |
Transformer、RNN(对序列长度不敏感) |
| 实例归一化 (Instance Norm) | 对每个样本的每个通道单独计算 | 风格迁移、生成对抗网络 |
| 组归一化 (Group Norm) | 将通道分组后沿组内计算 | 小批量训练(如目标检测、视频处理) |
本文来自博客园,作者:ffff5,转载请注明原文链接:https://www.cnblogs.com/ffff5/p/19590938

浙公网安备 33010602011771号