MokioMind 各训练阶段数据样本对比

MokioMind 各训练阶段数据样本对比

本文基于当前已经下载到 MokioMind/dataset 目录中的真实数据集,介绍预训练、SFT、LoRA、DPO、PPO、GRPO 和 Agent RL 各阶段的数据结构、训练目标与核心差异。

1. 总览

不同阶段最大的区别不是问题内容,而是数据为模型提供了什么监督信号。

阶段 数据告诉模型什么 主要文件
Pretrain 给定一段文本,预测下一个 Token pretrain_t2t_mini.jsonl
SFT 用户提出问题时,助手应该如何回答 sft_t2t_mini.jsonl
LoRA 与 SFT 相同,但只更新少量附加参数 lora_*.jsonl
DPO 同一个问题下,哪个回答更好 dpo.jsonl
PPO 只提供问题,模型在线回答并接受奖励 rlaif.jsonl
GRPO 同一问题生成多份回答,按组内奖励比较 rlaif.jsonl
Agent RL 提供问题、工具定义和可验证结果 agent_rl*.jsonl

最简记忆方式:

text 复制代码
Pretrain:给模型一段文本
SFT:给模型一个标准答案
LoRA:用较少参数学习标准答案
DPO:给模型一个好答案和一个差答案
PPO:模型现场回答,由 Reward 和 Critic 判断
GRPO:模型现场回答多次,回答之间互相比较
Agent RL:模型调用工具,用标准结果或执行结果验证

2. 预训练 Pretrain

2.1 数据文件

text 复制代码
dataset/pretrain_t2t_mini.jsonl

2.2 真实样本

jsonl 复制代码
{"text":"为宠物起一个好听的名字1. 小白2. 子璇3. 小豆4. 柔柔5. 小花6. 小虎7. 小熊8. 小鲤9. 小黄10. 小狗"}

另一些预训练样本虽然内容看起来像问答,但依然被存储为普通文本:

jsonl 复制代码
{"text":"根据以下输入的问题,生成一句话回答。你觉得寿司好不好吃?作为一名AI,我没有味觉,无法品尝食物......"}

2.3 训练目标

预训练只做 Next-Token Prediction:

text 复制代码
输入:为宠物起一个好听的名
目标:字

输入:为宠物起一个好听的名字
目标:1

特点:

  • 每条数据只有一个 text 字段。
  • 没有 user、assistant 等角色。
  • 几乎所有非 Padding Token 都参与 Loss。
  • 模型学习语言规律、知识和文本续写能力。
  • 即使文本语义上是问答,模型仍将它当作连续文本处理。

数据进入模型前会经历:

text 复制代码
原始 text
  ↓ Tokenizer
截断至 max_seq_len - 2
  ↓
添加 BOS 和 EOS
  ↓
使用 PAD 补齐
  ↓
生成 input_ids、labels、attention_mask

3. 监督微调 SFT

3.1 数据文件

text 复制代码
dataset/sft_t2t_mini.jsonl

3.2 真实样本

json 复制代码
{
  "conversations": [
    {
      "role": "user",
      "content": "最近越来越多人关注健康饮食,但到底该吃什么、怎么搭配才科学?有没有什么实用的方法或工具能帮助我们更好地规划饮食?"
    },
    {
      "role": "assistant",
      "content": "健康饮食需遵循'均衡膳食'原则,建议每日摄入谷物、蔬菜、水果、蛋白质和乳制品。可使用饮食规划工具辅助记录和规划。"
    }
  ]
}

3.3 多轮对话结构

json 复制代码
{
  "conversations": [
    {
      "role": "user",
      "content": "什么是机器学习?"
    },
    {
      "role": "assistant",
      "content": "机器学习是让计算机从数据中学习规律的方法。"
    },
    {
      "role": "user",
      "content": "它如何训练?"
    },
    {
      "role": "assistant",
      "content": "通常使用损失函数、反向传播和优化器训练。"
    }
  ]
}

3.4 训练目标

SFT 通常只对 Assistant 的回答计算 Loss:

text 复制代码
System 内容     → 作为上下文,不计算 Loss
User 内容       → 作为上下文,不计算 Loss
Assistant 内容  → 作为标准答案,计算 Loss
Padding         → 不计算 Loss

模型学习的是:

text 复制代码
看到这样的用户问题
→ 应该生成这样的助手回答

部分实际样本还带有:

json 复制代码
{
  "role": "assistant",
  "content": "最终回答",
  "reasoning_content": "内部推理过程"
}

当前 MokioMind 主要读取 content;reasoning_content 是否参与训练,取决于 Chat Template 是否显式处理该字段。


4. LoRA 微调

LoRA 与全参数 SFT 使用相同的数据格式,区别只在参数更新方式。

4.1 身份 LoRA

数据文件:

text 复制代码
dataset/lora_identity.jsonl

真实样本:

json 复制代码
{
  "conversations": [
    {
      "role": "user",
      "content": "hi"
    },
    {
      "role": "assistant",
      "content": "Hello! I am MiniMind, an AI assistant developed by Jingyao Gong. How can I assist you today?"
    }
  ]
}

它主要让模型学习固定身份、语气和表达风格。

4.2 考试 LoRA

数据文件:

text 复制代码
dataset/lora_exam.jsonl

真实样本:

json 复制代码
{
  "conversations": [
    {
      "role": "user",
      "content": "2型糖尿病的特点是____。\nA. 中老年病人多见,从不发生酮症\nB. 常以慢性并发症为首发症状\nC. 30岁前发病者往往症状严重\nD. 胰岛功能正常\n答案:"
    },
    {
      "role": "assistant",
      "content": "B"
    }
  ]
}

4.3 医疗 LoRA

数据文件:

text 复制代码
dataset/lora_medical.jsonl

真实结构:

json 复制代码
{
  "conversations": [
    {
      "role": "user",
      "content": "头发稀少细软可以植发吗"
    },
    {
      "role": "assistant",
      "content": "是的,头发稀少和细软的情况下,植发是一种可能的解决方案......"
    }
  ]
}

4.4 SFT 与 LoRA 的区别

全参数 SFT LoRA
更新模型的大部分或全部参数 冻结基础模型,只更新低秩矩阵
显存与存储开销较大 显存与存储开销较小
权重文件较大 Adapter 权重较小
适合充分训练 适合身份、风格和领域定制

因此:

text 复制代码
SFT 与 LoRA 的数据格式相同
区别在于训练参数,而不是数据结构

5. DPO 偏好训练

5.1 数据文件

text 复制代码
dataset/dpo.jsonl

5.2 真实样本

json 复制代码
{
  "chosen": [
    {
      "role": "user",
      "content": "章鱼的外壳是由什么构成的?"
    },
    {
      "role": "assistant",
      "content": "章鱼没有壳,这就是为什么它们能够挤进小空间。章鱼身体唯一坚硬的部分是它的喙。"
    }
  ],
  "rejected": [
    {
      "role": "user",
      "content": "章鱼的外壳是由什么构成的?"
    },
    {
      "role": "assistant",
      "content": "章鱼的外壳由一种专门的蛋白质和壳聚糖构成......"
    }
  ]
}

这里:

text 复制代码
chosen   → 正确回答
rejected → 包含虚构信息的错误回答

5.3 训练目标

text 复制代码
提高 chosen 的相对概率
降低 rejected 的相对概率
同时避免策略模型偏离原始 SFT 模型太远

DPO 与 SFT 的区别:

text 复制代码
SFT:问题 + 一个标准回答
DPO:同一个问题 + 一个好回答 + 一个差回答

DPO 训练时不需要调用 Reward Model,因为偏好标签已经通过 chosen 和 rejected 写在数据里。

不过,制作偏好数据时可能使用:

  • 人工标注
  • 强模型评审
  • 规则筛选
  • Reward Model 打分

6. PPO 强化学习

6.1 数据文件

text 复制代码
dataset/rlaif.jsonl

6.2 真实样本

json 复制代码
{
  "conversations": [
    {
      "role": "user",
      "content": "学校第一天运来3200千克煤,第二天运来2400千克煤。这些煤计划烧7个月,平均每个月烧煤多少千克?"
    },
    {
      "role": "assistant",
      "content": ""
    }
  ]
}

最后一条 Assistant 故意留空,因为回答需要由模型在训练过程中在线生成。

模型可能生成:

text 复制代码
总煤量为 3200 + 2400 = 5600 千克,
平均每月烧 5600 ÷ 7 = 800 千克。

6.3 PPO 训练流程

text 复制代码
Prompt
  ↓
Actor 在线生成一份回答
  ↓
Reward Model 或规则给出实际奖励 Reward
  ↓
Critic 预测期望奖励 Value
  ↓
Advantage = Reward - Value
  ↓
更新 Actor 和 Critic

例如:

text 复制代码
Reward = 0.9
Critic Value = 0.6
Advantage = 0.9 - 0.6 = +0.3

Advantage 为正时,提高该回答的生成概率;为负时,降低该回答的生成概率。

PPO 通常涉及:

  • Actor
  • Old Actor
  • Reference Model
  • Critic
  • Reward Model 或规则奖励

这条真实数据没有独立参考答案字段,因此答案是否正确主要依赖外部 Reward Model 的判断。


7. GRPO 强化学习

MokioMind 的 GRPO 与 PPO 使用相同的 rlaif.jsonl 数据。

7.1 数据结构

json 复制代码
{
  "conversations": [
    {
      "role": "user",
      "content": "学校第一天运来3200千克煤,第二天运来2400千克煤。这些煤计划烧7个月,平均每个月烧煤多少千克?"
    },
    {
      "role": "assistant",
      "content": ""
    }
  ]
}

7.2 与 PPO 的区别

区别不在数据格式,而在训练时如何使用同一条数据。

PPO 通常生成一份回答:

text 复制代码
回答:5600 ÷ 7 = 800 千克
Reward:0.9
Critic 预测:0.6
Advantage:+0.3

GRPO 针对同一个 Prompt 生成一组回答:

text 复制代码
回答 1:800 千克       Reward 1.0
回答 2:700 千克       Reward 0.0
回答 3:约 800 千克    Reward 0.8
回答 4:5600 千克      Reward 0.1
......

然后计算:

text 复制代码
Advantage_i =
    (Reward_i - 组内平均 Reward)
    ÷
    (组内 Reward 标准差 + 极小值)

因此:

text 复制代码
高于组内平均分 → 提高生成概率
低于组内平均分 → 降低生成概率

PPO 和 GRPO 的核心区别:

PPO GRPO
回答与 Critic 的预期比较 同一道题的多份回答互相比较
需要 Critic 不需要 Critic
通常生成一份或少量回答 通常生成一组回答
模型数量更多 生成开销更大

8. Agent RL 与可验证奖励

8.1 数据文件

text 复制代码
dataset/agent_rl.jsonl
dataset/agent_rl_math.jsonl

8.2 真实数学样本

json 复制代码
{
  "conversations": [
    {
      "role": "system",
      "content": "",
      "tools": "[{\"function\":{\"name\":\"calculate_math\",\"description\":\"计算数学表达式的结果\"}}]"
    },
    {
      "role": "user",
      "content": "算算8**2"
    },
    {
      "role": "assistant",
      "content": ""
    }
  ],
  "gt": [
    "64"
  ]
}

字段含义:

text 复制代码
tools       → 模型可以调用的工具
user        → 需要解决的问题
assistant   → 空字符串,等待模型在线生成
gt          → Ground Truth,标准答案

可以构造以下奖励:

text 复制代码
最终答案等于 64       → Reward +1.0
成功调用计算工具       → Reward +0.5
最终答案错误           → Reward 0
工具调用格式不合法     → Reward -0.2

这种奖励称为可验证奖励,不必额外训练神经网络 Reward Model,通常比开放式模型打分更加可靠。

8.3 当前兼容性限制

当前 MokioMind 的 RLAIFDataset 没有处理 gt 和 tools 字段,因此 agent_rl_math.jsonl 不能直接用于现有 PPO/GRPO 脚本。

要使用该数据,需要扩展:

  • RLAIFDataset
  • Chat Template 的工具定义注入
  • 数学答案校验奖励
  • 工具调用的执行逻辑
  • 工具调用格式奖励

9. 同一道题在各阶段的结构

使用"8 的平方是多少"进行横向比较。

9.1 Pretrain

jsonl 复制代码
{"text":"8的平方是64,因为8×8=64。"}

含义:让模型学习文本续写。

9.2 SFT / LoRA

json 复制代码
{
  "conversations": [
    {
      "role": "user",
      "content": "8的平方是多少?"
    },
    {
      "role": "assistant",
      "content": "64"
    }
  ]
}

含义:让模型模仿标准回答。

9.3 DPO

json 复制代码
{
  "chosen": [
    {
      "role": "user",
      "content": "8的平方是多少?"
    },
    {
      "role": "assistant",
      "content": "64"
    }
  ],
  "rejected": [
    {
      "role": "user",
      "content": "8的平方是多少?"
    },
    {
      "role": "assistant",
      "content": "16"
    }
  ]
}

含义:让模型偏好正确回答,远离错误回答。

9.4 PPO

json 复制代码
{
  "conversations": [
    {
      "role": "user",
      "content": "8的平方是多少?"
    },
    {
      "role": "assistant",
      "content": ""
    }
  ]
}

含义:模型现场生成回答,由 Reward Model 和 Critic 提供训练信号。

9.5 GRPO

输入与 PPO 相同,但模型会生成多份回答:

text 复制代码
64、16、8、64、32、64......

含义:对多份回答分别打分,然后进行组内相对比较。

9.6 Agent GRPO

json 复制代码
{
  "conversations": [
    {
      "role": "system",
      "content": "",
      "tools": "...calculate_math..."
    },
    {
      "role": "user",
      "content": "算算8**2"
    },
    {
      "role": "assistant",
      "content": ""
    }
  ],
  "gt": [
    "64"
  ]
}

含义:模型可以调用工具,并直接用 gt 判断最终结果是否正确。


10. 最终总结

数据结构的演化

text 复制代码
预训练
{"text": "原始文本"}

        ↓

SFT / LoRA
{"conversations": [问题, 标准回答]}

        ↓

DPO
{"chosen": [问题, 好回答], "rejected": [问题, 差回答]}

        ↓

PPO / GRPO
Prompt → 模型在线生成 → Reward

        ↓

Agent RL
Prompt + Tools → 模型在线生成/调用工具 → GT 或执行结果验证

监督信号的演化

text 复制代码
Pretrain:下一个 Token
SFT / LoRA:标准 Assistant 回答
DPO:Chosen 相对于 Rejected 的偏好
PPO:Reward 减去 Critic Value
GRPO:回答 Reward 相对于组内平均 Reward
Agent RL:标准答案、单元测试或工具执行结果

理解每个字段最终如何转化为 input_ids、labels、loss_mask、reward 和 advantage,就理解了大模型不同训练阶段的数据设计与训练目标。

相关推荐
做萤石二次开发的哈哈1 小时前
网络音箱如何接入?音频文件夹、TTS播报、音量管控与ISAPI透传对接详解
人工智能·物联网·蓝海aiot一站式工作台·aiot开发·网络音箱·智慧广播·二次开放
镭封1 小时前
做电视剧解说视频用什么软件?配音、文案处理一次解决
人工智能·小程序·音视频·语音识别·媒体
欣欣之王来了1 小时前
国外主流大模型深度对比:GPT、Claude、Gemini技术细节与实战选型指南
人工智能·ai·大模型
蜗牛互联网1 小时前
Java Agent 工具调用的 allowlist、参数校验与调用预算
java·开发语言·人工智能·后端·oracle
MicrosoftReactor1 小时前
技术速递|使用 GitHub Security Lab Taskflow Agent 实现 AI 驱动的模糊测试
人工智能·ai·github·copilot·agent·模糊测试·ai-agent
promanz1 小时前
关于RAG文件格式转换
人工智能
桃西西呀1 小时前
Spring AI Alibaba 之五:我把五个子智能体拼成客服流水线,才看懂内置 flow 编排和 A2A 远程调用
人工智能
翻滚的芋头1 小时前
神经网络基础——前馈神经网络FNN
人工智能
IamZJT_1 小时前
Agent 系统工程 10|一次长任务失败,如何定位原因并验证修复?
人工智能