Softmax的数值稳定性:为什么一行简单的代码能让训练崩溃

你花了数天清洗数据,精心调参,终于启动了训练。Loss曲线漂亮地下降,一切似乎都很顺利。突然,屏幕上跳出一个刺眼的 nan——整个训练过程在瞬间崩溃。 ...

15 min · 7071 words

浮点数的深渊:深度学习数值稳定性的完整解析

2019年某天凌晨三点,一位研究生的模型训练在运行72小时后突然输出全NaN。损失函数从平稳下降变成无穷大,权重变成NaN,一切归零。这是深度学习开发者的噩梦——数值不稳定。这不是偶然,而是浮点数表示固有的物理限制在特定条件下的必然爆发。 ...

17 min · 8385 words
Blog Cover

为什么Transformer的注意力要除以√dₖ:从方差到梯度消失的完整数学解析

2017年,Vaswani等人在《Attention Is All You Need》论文中提出了Transformer架构。在缩放点积注意力的公式中,有一个看似不起眼的细节:点积结果要除以$\sqrt{d_k}$。这个操作在代码中只是一行,但它背后隐藏着深度学习中最核心的问题之一——梯度消失。 ...

9 min · 4133 words
Blog Cover

Softmax的数值稳定性问题:从溢出下溢到Log-Sum-Exp技巧的完整解析

你正在训练一个Transformer模型,Loss曲线稳定下降,一切看起来都很顺利。然后你决定启用混合精度训练来加速——只需一行代码.half()。100步之后:Loss: NaN。训练彻底崩溃。 ...

9 min · 4348 words

量化训练为何能用8位精度完成模型学习从数值稳定性到误差补偿的数学原理

2023年10月,一篇名为 FP8-LM 的论文在 arXiv 上发布,研究团队用8位浮点数完成了 GPT-175B 的训练——内存占用减少39%,训练速度提升75%。这并非孤例,QLoRA 更是将模型压缩到4位,却依然保持着与16位训练相当的微调效果。这些数字背后的数学原理,揭示了深度学习一个反直觉的特性:神经网络对数值精度的要求,远比我们想象的要低。 ...

11 min · 5034 words

BF16为何正在取代FP16成为大模型训练的标准格式从动态范围陷阱到损失缩放的技术突围

2017年,NVIDIA和百度研究院联合发表了一篇题为《Mixed Precision Training》的论文,展示了如何用16位浮点数训练深度神经网络。论文中有一个不起眼的细节:训练某些网络时,需要将损失值放大8到32768倍,否则梯度会变成零。 ...

9 min · 4389 words