真实面经题目 · 原创解析
大模型预测token的损失是怎么算的?
大模型预测 token 的损失通常是自回归 next-token 交叉熵。训练时用 teacher forcing,把真实前缀作为上下文,模型在每个位置输出词表 logits,经 softmax 得到下一个 token 的概率,再对真实 token 取负对数似然,最后在有效 token 上求平均或求和。
真实面经题目 · 原创解析
大模型预测 token 的损失通常是自回归 next-token 交叉熵。训练时用 teacher forcing,把真实前缀作为上下文,模型在每个位置输出词表 logits,经 softmax 得到下一个 token 的概率,再对真实 token 取负对数似然,最后在有效 token 上求平均或求和。
大模型语言建模的基本 loss 是 next-token prediction 的交叉熵。给定 token 序列,模型用前面的 token 预测下一个 token,每个位置会输出一个词表大小的 logits,softmax 后取真实下一个 token 的概率,loss 就是 -log p(真实 token | 前缀)。训练时会做 label shift,并通过 attention mask 或 loss mask 忽略 padding、prompt 或不需要监督的位置。
假设序列是 x1 到 xT,自回归模型在位置 t 看到 x1 到 xt 后预测 x(t+1)。模型输出词表维度的 logits,经过 softmax 得到每个候选 token 的概率。真实下一个 token 的概率越高,负对数损失越小;概率越低,损失越大。
单个位置的损失可以理解为分类交叉熵,因为预测目标是在整个词表中选出真实 token。序列损失通常是所有有效位置负对数似然的平均值。平均到 token 级别后,不同长度样本的 loss 更可比,也方便进一步计算 perplexity。
实现上通常把输入序列和标签序列错开一位:输入位置 0 到 T-2,对应预测标签位置 1 到 T-1。模型并不是用当前 token 预测当前 token,而是用当前及之前的上下文预测下一个 token。这个 shift 是理解 causal LM loss 的关键。
不是所有 token 都一定参与 loss。padding token 会被忽略;SFT 中 prompt、system message、用户问题等输入部分也常被 mask,只让 assistant answer 的 token 产生损失。这样可以避免模型把训练重心放在复述提示词,而是学习生成目标回答。
训练时使用真实历史 token 作为上下文,这叫 teacher forcing;推理时模型只能使用自己已经生成的 token 继续预测。两者存在暴露偏差,因此高质量数据、合适的解码策略和后续偏好对齐都会影响最终生成效果,但基础 token loss 仍是交叉熵。
因为自回归语言模型的目标是用前缀预测下一个 token。若不 shift,就会变成预测当前位置 token,容易混淆输入和监督目标。
prompt 是条件,不是模型需要学习生成的目标。只对回答部分算 loss,可以让模型集中学习在给定指令下生成理想答案。
不一定。低 loss 表示模型更能拟合参考 token,但开放生成还涉及事实性、偏好、安全性、格式和多样性,因此还需要任务评测和人工评估。