给出基于 GradNorm 的动态加权公式,并解释如何初始化初始权重。

解读

在国内大模型落地场景中,多任务学习(MTL)是提升百亿/千亿参数模型业务效果的核心手段。面试官通过 GradNorm 问题,考察候选人是否具备“把数学公式变成线上收益”的能力:既要写出严谨的动态加权公式,又要说明初始权重对首轮微调收敛速度与任务稳定性的影响,最终落到 LLMOps 里“可监控、可回滚”的实战要求。

知识点

  1. GradNorm(Gradient Normalization)(Chen et al., 2018)通过平衡不同任务的梯度范数,自动调整损失权重,缓解任务梯度量级差异导致的“跷跷板”现象。
  2. 公式里出现的 W_i(t) 是第 i 个任务在 t 步的动态权重G_i(t) 是任务 i 的梯度L2范数Ḡ(t) 是全部任务梯度范数的平均值r_i(t)相对训练速率,α 是恢复强度超参
  3. 初始权重直接影响首轮反向传播的梯度分布,在国内 GPU 资源紧张、大模型实验成本高的背景下,零初始化或均等初始化可以显著降低调参轮次,减少千卡级 A100 预算浪费
  4. LLMOps 视角:把 GradNorm 权重写入 TensorBoard/MLflow 的 scalar 指标,配合告警阈值,实现“权重漂移>15% 自动回滚”。

答案

  1. 动态加权公式
    设共有 K 个任务,第 i 个任务在 t 步的损失为 L_i(t),则总损失
      L_total(t) = Σ_{i=1}^K w_i(t) · L_i(t)
    GradNorm 通过最小化下列目标更新权重 w_i(t):
      GradNorm Loss = Σ_{i=1}^K |G_i(t) – Ḡ(t) · [r_i(t)]^α|₁
    其中
      G_i(t) = ‖ ∇{θ_shared} [w_i(t)·L_i(t)] ‖₂
      Ḡ(t) = (1/K) Σ
    {j=1}^K G_j(t)
      r_i(t) = [L_i(t)/L_i(0)] / [(1/K) Σ_{j=1}^K L_j(t)/L_j(0)]
    权重更新采用一步梯度下降
      w_i(t+1) = w_i(t) – η · ∂GradNorm Loss/∂w_i(t)
    之后做归一化
      w_i(t+1) = K · w_i(t+1) / Σ_{j=1}^K w_j(t+1)
    保证 Σ w_i ≡ K,避免量级漂移。

  2. 初始权重初始化策略
    线上百亿模型微调时,首轮实验统一设 w_i(0)=1.0(均等初始化),原因:

  • 业务方通常先跑 1k step 小批量实验验证数据 pipeline,均等权重能最快暴露任务冲突
  • 若某任务数据量极少(如<5%),可warm-start 将其 w_i(0) 设为 0.5,其余保持 1.0,防止梯度被大任务淹没
  • 在 LLMOps 配置里把 w_i(0) 写进 YAML 版本化文件,与 checkpoint 一起入库,实现权重可追溯

拓展思考

  1. 当 GradNorm 权重在 200 step 内单调偏离初始值 3 倍以上时,应触发自动降级策略:回退到上一轮 checkpoint,并临时冻结该任务的权重更新,避免灾难性遗忘主任务。
  2. 千亿 MoE 结构中,共享参数量巨大,直接计算 G_i(t) 开销高,可采样 10% expert 通道估算梯度范数,把 GradNorm 计算耗时从 8 min 降到 40 s,满足国内夜间窗口 2 小时内完成一轮微调的 SLA。
  3. 结合国产芯片(如华为昇腾 910B)的混合精度特性,需把 GradNorm 的 L2 范数计算放到 FP32 master weights 上,避免下溢导致权重更新失效,这一条可写入**《国产算力大模型适配规范》**的 checklist。