You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于HuggingFace继续LM预训练:run_mlm.py损失函数逻辑澄清

HuggingFace TensorFlow版run_mlm.py中dummy_loss的运行逻辑说明

这个dummy_loss不会被额外内置机制覆盖,它本身是为了绕过Keras编译校验写的占位逻辑,训练全程不会实际参与反向传播的损失计算,BERT继续预训练的MLM损失完全在模型内部完成计算,核心逻辑如下:

  • HuggingFace的TensorFlow预训练模型(包括用于MLM任务的TFBertForMaskedLM)在调用call()方法时,只要传入了labels参数,就会在前向传播流程中直接计算对应任务的标准损失:对掩码语言建模任务来说,就是掩码位置token预测结果和真实标签的交叉熵损失,计算完成后会把这个真实损失封装在返回结构化对象的loss字段中。
  • Keras的model.fit()训练流程有固定的损失优先级规则:当模型前向传播返回的结构化输出自带loss字段时,框架会直接将这个值作为训练总损失执行反向传播、参数更新,完全跳过compile()阶段传入的外部损失函数计算逻辑。
  • 脚本中定义dummy_loss的唯一作用是满足TensorFlow/Keras的强制接口要求:调用fit()前必须先执行compile(),如果compile()阶段不显式传入loss参数,部分TensorFlow版本会直接抛出参数校验错误,根本无法启动训练。你看到的「忽略y_true参数、返回y_pred均值」的写法没有实际计算意义,只是为了满足Keras对loss函数的输入输出格式要求,随便返回一个合法标量张量即可——哪怕把这个函数改成直接返回tf.constant(0.),训练过程的损失计算、梯度更新效果都不会发生任何变化。

如果要验证这个逻辑,可以在dummy_loss函数内部加一行打印语句,跑训练的时候会发现这个函数甚至不会被框架调用,自然不可能影响MLM预训练目标的正常实现。

内容的提问来源于stack exchange,提问作者dalia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.14 16:15:48