模型训练调试:从损失不下降到梯度爆炸的完整诊断指南
你花了三天时间设计了一个"完美"的神经网络架构,数据集准备好了,训练脚本也写好了。点击运行,满怀期待地盯着终端输出… ...
你花了三天时间设计了一个"完美"的神经网络架构,数据集准备好了,训练脚本也写好了。点击运行,满怀期待地盯着终端输出… ...
训练神经网络时,最令人沮丧的事情之一是:模型结构设计得非常精巧,数据预处理也很完善,但训练结果却始终无法收敛,或者收敛到了一个糟糕的局部最优解。许多开发者在排错时首先怀疑的是模型架构、超参数或者数据质量,却往往忽略了深度学习中最基础也最重要的组件——损失函数。 ...
打开任何一本深度学习教材,或者浏览机器学习面试题库,几乎都会遇到这个问题:多分类任务应该用Sigmoid还是Softmax?答案似乎很简单——多分类用Softmax,二分类用Sigmoid。但当面试官追问"为什么"时,很多人就卡住了。更麻烦的是多标签分类场景:一个样本同时属于多个类别,这时候该用什么? ...
当一个语言模型预测下一个词时,它输出的是整个词表上的概率分布。比如在"今天天气很"这个上下文后,模型可能给出"好"的概率是0.7,“差"的概率是0.2,“热"的概率是0.08,其他词的概率更低。如果真实的下一个词确实是"好”,我们如何量化模型预测的质量?更进一步,如何设计一个可微分的损失函数,让模型能够通过梯度下降不断优化这个预测能力? ...