预训练语言模型为何将含<pad>的标签token设为-100?
为什么预训练语言模型要将对应的标签设为-100?
你的推测完全正确——这么做就是为了彻底消除padding token对模型训练损失的干扰,具体在交叉熵损失计算时的运行机制是这样的:
- 像PyTorch、TensorFlow这类主流框架里的
CrossEntropyLoss(交叉熵损失函数),都默认会忽略标签值为**-100**的样本。当你把位置的标签设成-100后,计算损失时这部分位置会被直接跳过,既不会计入损失总和,也不会参与反向传播更新模型参数。 - 如果不做这个处理,模型会把
当成普通的目标token去拟合,一来会浪费算力在无意义的padding内容上,二来可能让模型学到错误的生成规律(比如倾向于输出大量 ),严重影响有效文本的训练效果。 - 举个实际场景:批量训练时,因为句子长度不一,短句子会被补全到当前batch的最大长度,补的就是
。把这些padding位置的标签设为-100后,损失计算只会针对每个句子里的真实有效token,让训练完全聚焦在有意义的文本内容上。
内容的提问来源于stack exchange,提问作者kimchdragon
相关产品推荐
相关产品推荐

