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

Donut模型预训练阶段技术疑问及微调代码修改咨询

Donut模型预训练的核心问题解答

一、预训练阶段“前文语境”的作用机制

Donut的预训练采用自回归序列生成范式,虽然初始输入只有图像,但“前文语境”是在生成过程中逐步构建的:

  • 模型启动生成时,首先输入特殊起始token(如<s>)作为初始语境,结合图像编码器输出的视觉特征,预测第一个文本token;
  • 每生成一个token后,这个token会和之前所有生成的token拼接成序列,作为新的“前文语境”,再次和视觉特征结合,约束下一个token的预测;
  • 整个过程持续到生成结束token(如</s>),论文中提到的“联合基于图像和前文语境”,本质是在自回归的每一步,都用视觉特征提供全局图像信息,用已生成的文本序列提供局部上下文信息,共同引导下一个token的预测。

二、修改微调代码实现预训练的关键步骤

针对Donut官方的微调代码,需要做以下核心修改:

  • 调整数据加载逻辑
    预训练不需要下游任务的结构化标签(如微调时的JSON格式),只需加载图像对应的原始文本序列(比如文档内所有文字按阅读顺序拼接)。修改Dataset类,移除任务相关的标签解析逻辑,直接返回图像张量、文本token id序列,以及对应的attention mask(用于自回归掩码)。
  • 替换损失函数
    移除微调时针对结构化输出的特殊损失计算,改用自回归语言建模交叉熵损失:仅计算模型预测token与真实token的交叉熵,且通过掩码确保模型只能利用前文token进行预测。
  • 调整模型初始化方式
    如果是从头预训练,需初始化完整的Donut模型(视觉编码器+文本解码器),而非加载下游任务的微调权重。可基于预训练的ViT(视觉编码器)和DeBERTa/BERT(文本解码器)权重初始化,或直接随机初始化。
  • 更新训练与评估配置
    预训练需要更长的训练周期(通常数十万步)、更大的batch size,调整学习率至1e-4左右(用AdamW优化器)。评估时替换下游任务的结构化指标,改用**困惑度(Perplexity)**衡量语言建模效果。
  • 移除下游任务专属逻辑
    删除微调代码中针对特定任务的后处理、结构化输出解析等逻辑,保留基础的图像编码、文本解码、自回归训练流程即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:35:22