趋近智
大师班
识别训练早期不稳定性表现对于避免计算资源浪费,并确保大型语言模型成功开发是基础。虽然监控将在下一节讨论,但了解这些常见症状能帮助你快速判断训练过程何时偏离了正常轨道。这些症状通常体现在训练过程中你追踪的主要指标上,尤其是损失函数和梯度统计数据。
最明确的灾难性故障迹象可能就是损失计算中出现 NaN (非数字) 值。
损失为 NaN 通常会立即停止训练过程,因为后续的梯度计算和权重更新在数学上变得未定义。这通常表明存在严重的数值问题,例如:
log(0))、计算负数的平方根或除以零等数学操作。这些可能由于特定数据点或不稳定的中间激活值而发生。在训练循环早期检测 NaN 很重要。你可以在损失计算后直接添加检查。
# 在训练循环内(PyTorch 示例)
outputs = model(inputs)
loss = loss_function(outputs, targets)
# 检查损失是否为 NaN 或无穷大
if not torch.isfinite(loss):
print(f"检测到不稳定的损失: {loss.item()}。停止训练。")
# 在此处添加保存状态、记录详细信息和终止的逻辑
break
# 仅当损失有效时才进行反向传播
loss.backward()
# ... 优化器步骤等。
与 NaN 损失相比,它并非立即致命,但仍然是一个严重的警告信号,即损失值突然急剧增加,通常被称为“损失尖峰”。损失可能会在后续步骤中部分或完全恢复,或者该尖峰可能预示着完全的发散。
典型的损失曲线,显示在第500次迭代附近出现突然尖峰,之后部分恢复。
损失尖峰可能由以下几个因素引起:
NaN,梯度也可能暂时性地爆炸,导致大的、破坏稳定性的权重更新。这在使用 Adam 等自适应优化器时尤其相关。虽然单个、孤立的尖峰可能不会完全破坏训练,但频繁的尖峰表明存在需要解决的潜在不稳定性。
与临时尖峰不同,发散损失是指损失值在多次迭代或多个周期中持续呈上升趋势。这表明模型的性能持续下降,优化过程正在远离而不是趋向于一个好的解决方案。
健康的收敛损失曲线与表示训练失败的发散损失曲线的比较。
发散通常指向更根本的问题:
另一个症状是当损失值或验证集上的困惑度或准确率等其他评估指标显著波动,而没有显示出明确的改进趋势时。这些值可能在步骤或周期之间上下跳动,从未稳定地下降(对于损失)或上升(对于准确率)。
这种波动通常表明:
虽然不总是直接表现为 NaN 损失或尖峰等主要症状,但极端的梯度大小通常是根本原因。
NaN 或损失尖峰。监控梯度范数对于检测这一点很重要。识别这些常见症状是重要的第一步。后续章节将提供关于如何有效监控训练指标的指导,以便及早发现这些迹象并诊断不稳定性或其根本原因。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造