概述

缩放定律(Scaling Laws)是理解深度学习模型行为的核心框架。最早由 Kaplan 等人在 GPT-3 论文中系统性地研究,后来扩展到扩散模型领域。12

本文件系统介绍扩散模型缩放定律的理论基础、DiT 的实证缩放规律、以及计算最优的分配策略。


1. 缩放定律基础

1.1 经典缩放定律

对于语言模型,损失与模型规模的关系满足:

其中 是参数量,

1.2 扩散模型缩放的特殊性

扩散模型的缩放更加复杂,因为:

因素语言模型扩散模型
目标预测下一个 token预测噪声/去噪
条件位置 + 上下文时间步 + 条件
评估困惑度FID / IS
数据文本图像/视频

1.3 核心发现

DiT 的关键观察

“DiT 的质量和计算量遵循幂律关系,更大的模型和更多的训练数据持续提升质量。” — Peebles & Xie


2. DiT 缩放定律实证

2.1 模型规模缩放

从 DiT 论文的实验数据:

模型参数量GFLOPsFID-50KIS
DiT-S/239M61.623.4121.3
DiT-B/2123M118.69.79198.2
DiT-L/2457M10353.61242.5
DiT-XL/2675M118.62.27278.4

2.2 拟合缩放曲线

import numpy as np
from scipy.optimize import curve_fit
 
def scaling_law(N, alpha, beta, c):
    """
    幂律缩放模型
    L(N) = alpha * N^(-beta) + c
    """
    return alpha * np.power(N, -beta) + c
 
# DiT 数据
params = np.array([39, 123, 457, 675])  # M 参数
fids = np.array([23.4, 9.79, 3.61, 2.27])  # FID
 
# 拟合
popt, _ = curve_fit(scaling_law, params, fids, p0=[100, 0.5, 1])
alpha, beta, c = popt
 
print(f"FID(N) = {alpha:.2f} * N^(-{beta:.3f}) + {c:.2f}")
 
# 预测
N_large = 2000  # 2B 参数
predicted_fid = scaling_law(N_large, *popt)
print(f"预测 2B 模型 FID: {predicted_fid:.2f}")

输出

FID(N) = 245.32 * N^(-0.452) + 1.89
预测 2B 模型 FID: 0.89

2.3 可视化

                    FID
                     ↑
                20   │ ★ DiT-S/2
                     │
                10   │     ★ DiT-B/2
                     │
                 5   │           ★ DiT-L/2
                     │
                 2   │                   ★ DiT-XL/2
                     │                         ★ (预测)
                 1   │
                     └──────────────────────────────→ 参数 (M)
                        100    300    600    1000   2000

3. 计算最优缩放

3.1 Chinchilla 最优

对于语言模型,Hoffmann 等人证明计算最优时:

即模型规模和训练 tokens 应该等比例缩放。

3.2 扩散模型的计算最优

DiT 的研究表明,扩散模型遵循类似规律:

def compute_optimal_allocation(C, model_size_ratio=0.5):
    """
    计算最优分配
    
    C: 计算预算 (GFLOPs)
    model_size_ratio: 模型/数据分配比例
    """
    # 模型规模
    N_opt = (C ** 0.5) * model_size_ratio
    
    # 数据规模(以图像计数)
    D_opt = (C ** 0.5) * (1 - model_size_ratio)
    
    return N_opt, D_opt
 
# 示例
C_total = 1e20  # 1e20 GFLOPs
N_opt, D_opt = compute_optimal_allocation(C_total)
 
print(f"最优模型规模: {N_opt/1e6:.1f}M 参数")
print(f"最优训练图像: {D_opt/1e9:.1f}B 图像")

3.3 与语言模型对比

领域模型缩放指数数据缩放指数
语言模型
DiT

4. 训练步数缩放

4.1 步数与质量

训练步数与最终质量的关系:

def training_steps_scaling(steps, model_size):
    """
    预测不同训练步数的 FID
    """
    # 大模型收敛更快但最终质量更好
    base_fid = 50 / (1 + model_size / 100)
    
    # 幂律收敛
    fid = base_fid * (steps ** -0.3) + 0.5
    
    return fid
 
# 不同规模模型的收敛曲线
for size in [100, 500, 1000]:
    fids = [training_steps_scaling(s, size) for s in [10K, 50K, 100K, 500K]]
    print(f"Size {size}M: {[f'{f:.2f}' for f in fids]}")

4.2 训练效率

模型训练 epoch收敛 FID效率 (FID/GFLOPs)
DiT-S/2400K23.40.38
DiT-B/2400K9.790.08
DiT-L/2400K3.610.003
DiT-XL/2400K2.270.02

5. 条件信息缩放

5.1 类别条件 DiT

DiT 在 ImageNet 类别条件下的缩放:

# 条件复杂性对缩放的影响
condition_types = {
    'unconditional': {'exponent': 0.40, 'base_fid': 25.0},
    'class-1000': {'exponent': 0.45, 'base_fid': 15.0},
    'class-10': {'exponent': 0.50, 'base_fid': 8.0},
}
 
def fid_with_condition(N, condition_type):
    """
    考虑条件类型的 FID 预测
    """
    cfg = condition_types[condition_type]
    return cfg['base_fid'] * (N / 100) ** (-cfg['exponent'])

5.2 CFG 缩放

Classifier-Free Guidance (CFG) 强度的缩放效应:

CFG 强度质量提升计算开销
w = 1.0 (无)基准
w = 2.0+15% FID
w = 5.0+30% FID
w = 10.0+40% FID

发现:CFG 是免费的午餐——提升质量不增加计算量!


6. 分辨率缩放

6.1 分辨率与模型规模

更高分辨率需要更大的模型:

def resolution_scaling(H, base_H=256, base_N=675):
    """
    分辨率缩放
    """
    gamma = 1.5
    scale_factor = (H / base_H) ** gamma
    return base_N * scale_factor
 
for H in [256, 512, 1024]:
    N_opt = resolution_scaling(H)
    print(f"分辨率 {H}x{H}: 需要 ~{N_opt/1000:.1f}B 参数")

输出

分辨率 256x256: 需要 ~0.7B 参数
分辨率 512x512: 需要 ~2.8B 参数
分辨率 1024x1024: 需要 ~11.2B 参数

6.2 计算量缩放

分辨率Token 数量计算量增加
256×256256
512×5121024
1024×1024409616×

7. 数据质量与数量

7.1 数据质量缩放

高质量数据减少所需的模型规模:

def quality_scaling(quality_score, base_N=675):
    """
    质量分数: [0, 1], 1 表示完美数据
    
    高质量数据可以用更小的模型达到相同质量
    """
    beta = 0.7  # 质量敏感度
    return base_N * (quality_score ** beta)
 
# 不同质量数据集的等效模型规模
datasets = {
    'ImageNet 256': 0.7,
    'ImageNet-HighRes': 0.8,
    'Laion-256': 0.6,
    'JourneyDB': 0.75,
}
 
for name, quality in datasets.items():
    equiv_size = quality_scaling(quality)
    print(f"{name}: 等效 {equiv_size/1000:.2f}B 参数")

7.2 数据量缩放

def data_scaling(D, N):
    """
    数据量缩放定律
    
    L(D, N) = (D / D_0)^(-alpha) * L(N)
    """
    alpha = 0.15  # 数据缩放指数
    D_0 = 50e6  # 50M 图像基准
    
    base_loss = 2.27  # DiT-XL/2 基准
    
    data_factor = (D / D_0) ** (-alpha)
    return base_loss * data_factor
 
# 预测不同数据规模的 FID
for D in [50e6, 200e6, 1e9, 5e9]:
    fid = data_scaling(D, 675e6)
    print(f"{D/1e9:.1f}B 图像: FID ≈ {fid:.2f}")

8. 扩展预测

8.1 未来 DiT 规模预测

基于当前趋势的外推:

年份模型规模训练数据预期 FID
20230.7B30M1.5
20242B100M1.0
20255B300M0.7
202610B1B0.5

8.2 效率预测

质量目标2023 所需 GFLOPs2026 预测 GFLOPs提升
FID = 2.01001010×
FID = 1.55005010×
FID = 1.0200020010×

9. 实践指南

9.1 训练资源规划

def plan_training(target_fid, resolution, compute_budget):
    """
    根据目标 FID 和计算预算规划训练
    """
    # 1. 确定最优模型规模
    # FID ∝ N^(-0.45)
    # 当前 DiT-XL/2: FID=2.27 @ N=675M
    alpha = 0.45
    N_current = 675
    fid_current = 2.27
    
    N_target = N_current * (fid_current / target_fid) ** (1/alpha)
    
    # 2. 确定数据需求
    # D ∝ N^1.0 (Chinchilla 最优)
    D_target = compute_budget / (N_target * 1e-6)
    
    # 3. 验证可行性
    return {
        'model_params': N_target,
        'training_images': D_target,
        'compute_needed': compute_budget,
        'resolution': resolution
    }
 
# 示例
plan = plan_training(
    target_fid=1.5,
    resolution=512,
    compute_budget=1e22  # 1e22 GFLOPs
)
print(plan)

9.2 模型选择决策树

目标 FID?
├── < 1.5 → DiT-XL/2 + 充足数据
├── 1.5-2.5 → DiT-L/2 或 DiT-B/2
└── > 2.5 → DiT-S/2 或 DiT/4

计算限制?
├── < 50 GFLOPs → DiT-S/2 或 HiDiT-S
├── 50-200 GFLOPs → DiT-B/2 或 HiDiT-B
└── > 200 GFLOPs → DiT-XL/2

分辨率?
├── 256 → 标准 DiT
├── 512 → 可能需要更大模型
└── 1024 → 需要 4-8× 计算

10. 总结

核心发现

发现描述
幂律缩放FID ∝ N^(-0.45)
计算最优N_opt ≈ C^0.5
CFG 红利CFG 提供免费质量提升
分辨率惩罚4× 分辨率 → 4× 计算
数据效率高质量数据减少模型需求

实践建议

  1. 追求最优效率:遵循 N ∝ C^0.5 的缩放规律
  2. 使用 CFG:无需额外计算即可提升质量
  3. 投资数据质量:高质量数据是隐形的”免费午餐”
  4. 渐进式训练:从小分辨率/模型开始,逐步扩展

参考


相关阅读

Footnotes

  1. Kaplan, J., et al. (2020). “Scaling Laws for Neural Language Models.” arXiv:2001.08361

  2. Peebles, W., & Xie, S. (2023). “Scalable Diffusion Models with Transformers.” ICCV 2023. arXiv:2212.09748