Softmax的数值稳定性:为什么一行简单的代码能让训练崩溃
你花了数天清洗数据,精心调参,终于启动了训练。Loss曲线漂亮地下降,一切似乎都很顺利。突然,屏幕上跳出一个刺眼的 nan——整个训练过程在瞬间崩溃。 ...
你花了数天清洗数据,精心调参,终于启动了训练。Loss曲线漂亮地下降,一切似乎都很顺利。突然,屏幕上跳出一个刺眼的 nan——整个训练过程在瞬间崩溃。 ...
训练神经网络时,最令人沮丧的事情之一是:模型结构设计得非常精巧,数据预处理也很完善,但训练结果却始终无法收敛,或者收敛到了一个糟糕的局部最优解。许多开发者在排错时首先怀疑的是模型架构、超参数或者数据质量,却往往忽略了深度学习中最基础也最重要的组件——损失函数。 ...
打开任何一本深度学习教材,翻开任何一篇讲解神经网络的博客,你都会看到神经元的基本公式: $$y = \sigma(Wx + b)$$其中 $W$ 是权重矩阵,$x$ 是输入,$\sigma$ 是激活函数,而 $b$ 就是那个不起眼的偏置(bias)。它看起来只是一个简单的加法,一个向量加法操作,却困扰了无数初学者:为什么需要它?它到底在做什么?为什么有些现代大模型(如LLaMA)会把它删掉? ...
训练一个神经网络时,最令人沮丧的场景莫过于:训练损失持续下降,模型在训练集上的表现越来越好,但当你把它部署到真实环境时,效果却一塌糊涂。过拟合——这个困扰深度学习实践者的问题,有一个看似简单却异常有效的解决方案:Early Stopping(早停法)。 ...
2014年,Diederik Kingma和Jimmy Ba在ICLR上发表了一篇论文,标题平淡无奇——《Adam: A Method for Stochastic Optimization》。没有人预料到,这篇论文中的算法会在接下来的十年里统治深度学习训练领域。时至今日,无论是GPT、LLaMA还是Stable Diffusion,几乎所有大模型的训练日志里都能看到"optimizer=AdamW"的字样。 ...
训练大语言模型时,你是否遇到过这样的情况:损失函数曲线突然出现莫名其妙的尖峰,模型仿佛"失忆"了一般,之前学到的知识瞬间消失?或者在训练循环神经网络时,梯度变成了NaN,整个训练过程直接崩溃?这些问题的背后,往往隐藏着一个共同的罪魁祸首——梯度爆炸。 ...
在深度学习的众多超参数中,batch size(批次大小)可能是最容易被忽视的一个。相比于学习率的精细调节、模型架构的反复打磨,batch size的选择往往只遵循一个简单的规则:在显存允许的范围内,尽量设大。 ...