Softmax的数值稳定性:为什么一行简单的代码能让训练崩溃
你花了数天清洗数据,精心调参,终于启动了训练。Loss曲线漂亮地下降,一切似乎都很顺利。突然,屏幕上跳出一个刺眼的 nan——整个训练过程在瞬间崩溃。 ...
你花了数天清洗数据,精心调参,终于启动了训练。Loss曲线漂亮地下降,一切似乎都很顺利。突然,屏幕上跳出一个刺眼的 nan——整个训练过程在瞬间崩溃。 ...
2019年某天凌晨三点,一位研究生的模型训练在运行72小时后突然输出全NaN。损失函数从平稳下降变成无穷大,权重变成NaN,一切归零。这是深度学习开发者的噩梦——数值不稳定。这不是偶然,而是浮点数表示固有的物理限制在特定条件下的必然爆发。 ...
2017年,Vaswani等人在《Attention Is All You Need》论文中提出了Transformer架构。在缩放点积注意力的公式中,有一个看似不起眼的细节:点积结果要除以$\sqrt{d_k}$。这个操作在代码中只是一行,但它背后隐藏着深度学习中最核心的问题之一——梯度消失。 ...
你正在训练一个Transformer模型,Loss曲线稳定下降,一切看起来都很顺利。然后你决定启用混合精度训练来加速——只需一行代码.half()。100步之后:Loss: NaN。训练彻底崩溃。 ...
2023年10月,一篇名为 FP8-LM 的论文在 arXiv 上发布,研究团队用8位浮点数完成了 GPT-175B 的训练——内存占用减少39%,训练速度提升75%。这并非孤例,QLoRA 更是将模型压缩到4位,却依然保持着与16位训练相当的微调效果。这些数字背后的数学原理,揭示了深度学习一个反直觉的特性:神经网络对数值精度的要求,远比我们想象的要低。 ...
2017年,NVIDIA和百度研究院联合发表了一篇题为《Mixed Precision Training》的论文,展示了如何用16位浮点数训练深度神经网络。论文中有一个不起眼的细节:训练某些网络时,需要将损失值放大8到32768倍,否则梯度会变成零。 ...