Jackrong's picture
Rename README.md to md
aece72d verified
---
base_model: unsloth/phi-4
tags:
- text-generation-inference
- transformers
- unsloth
- llama
license: apache-2.0
language:
- en
---
- **Developed by:** Soren
- It is a test that uses GRPO.
**gpt-oss-120b-Distill-Phi-4-14B** 是一个基于 `microsoft/phi-4` (14B) 基座模型的GRPO推理测试模型。测试设计了**8192**的上下文窗口,并通过一个三阶段训练流程——**SFT(冷启动)→ RLHF (GRPO) → SFT**——进行微调,旨在实现卓越的多步骤推理能力。
- 该模型的核心方法论源于 **DeepSeek-R1 (Nature, vol. 645)****DeepSeekMath" (arXiv:2402.03300v3)****"Phi-4-reasoning" (arXiv:2504.21318)** 三篇论文。
- 但与Phi4论文不同的是我将强化学习的推理引导部分到了前面,通过**SFT + GRPO + SFT** 的方法,生成显式“思维链”(Chain-of-Thought, CoT),尝试引导**Instruct模型**通过强化学习和监督学习产生推理能力。
- 与论文中的教师o3-mini模型的标准微调不同,本模型采用了开源模型**gpt-oss120b** 的蒸馏数据集作为微调知识库,从而继承其深厚的推理风格和知识体系。
### 阶段一:基础监督微调 (Foundational SFT)
* **冷启动 (Cold Start):**
| 数据集名称/来源 (Dataset Name/Source) | 样本数量 (Sample Size) |
| :------------------------------------ | :--------------------: |
| **OpenMathReasoning-mini** | 4,600 |
在这里,我也采用论文中的方法,根据 **"DeepSeek-R1 incentivizes reasoning in LLMS through reinforcement learning"** (doi: 10.1038/s41586-025-09422-z) 论文的描述,在 GRPO 强化学习前进行“冷启动”(即初始的监督微调 SFT 阶段)的主要目的,是为了解决纯粹通过强化学习训练出的初始模型(`DeepSeek-R1-Zero`)所暴露出的几个关键缺陷。
具体来说,这个冷启动阶段旨在:
1. **提升可读性与对齐人类偏好:** 纯 RL 训练出的 **DeepSeek-R1-Zero** 虽然推理能力强,但其输出存在“可读性差”和“语言混用”(例如中英文混合)的问题。冷启动阶段通过使用数千条“展示了对话式、与人类思维过程对齐的”高质量数据进行微调,旨在让模型的表达方式和思考过程更符合人类的习惯和偏好。
2. **为后续 RL 阶段打下基础:** 这一步相当于对模型进行一次“校准”,使其在保持强大推理能力的同时,也能遵循人类期望的语言和格式规范。这为后续融合了更复杂任务(如通用对话、写作等)的强化学习阶段铺平了道路,确保最终模型(`DeepSeek-R1`)不仅推理能力强,而且通用性好、用户体验更佳。
### 阶段二:强化学习与策略优化 (Reinforcement Learning with GRPO)
* **目标:** 在 SFT 冷启动的基础上,通过奖励信号引导模型探索并学习更优的推理策略。有两个目的,引导指令模型探索推理思维,答案正确性。
* **算法:** **GRPO (Group Relative Policy Optimization)**,一种先进的 RLHF 算法,通过比较一组(Group)候选输出的相对优劣来估计优势函数,从而实现更稳定的策略梯度更新。
* **数据集:** 使用 open-r1/DAPO-Math-17k-Processed 和 openai/gsm8k 作为偏好数据集。
| 数据集 (Dataset) | 主要用途 (Primary Use) | 数据格式/特点 (Data Format/Features) | 在项目中的角色 (Role in Project) |
| :-------------------------------------- | :----------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`open-r1/DAPO-Math-17k-Processed`** | 这个数据集难度较高,难度跨度较大有基础数学也有高等数学,用于引导模型的推理能力的强化学习 | 包含英文数学问题和对应的解答方案。<br> - `prompt`: 数学问题文本。<br> - `solution`: 该问题的标准答案,通常是一个数值或表达式。 | 在 `Qwen3` 模型的 GRPO 训练流程中,此数据集是主要的训练来源。模型的任务是根据 `prompt` 生成推理过程和答案,然后使用 `solution` 作为基准来计算奖励分数(例如,通过 `check_answer``check_numbers` 函数进行验证),从而优化策略。 |
| **`openai/gsm8k`** | 小学水平的数学应用题基准测试与训练。引导模型轻松学习推理。 | 包含 `question``answer` 两个字段。<br> - 解答部分通常包含详细的推理步骤(思维链),并以 `#### <正确答案>` 的格式结尾。 | 在 `Phi-4` 模型的 GRPO 训练流程中,此数据集被用作英文数学问题的来源。其标准答案被精确提取,为评估模型输出正确性的奖励函数 (`correctness_reward_func`) 提供了客观、可靠的标准。在 DeepSeekMath (DeepSeek的另外一篇论文)中,它也被用于强化学习阶段。 |
### 阶段二:强化学习与策略优化 (Reinforcement Learning with GRPO)
* **目标:** 在 SFT 冷启动的基础上,通过奖励信号引导模型探索并学习更优的推理策略。此阶段的核心目标并非简单模仿人类标注的解题路径,而是让模型在只知道最终答案对错的反馈下,自主进化出更强大、更多样的推理能力。这包括两个主要目的:
1. **引导模型探索推理思维:** 激励模型生成详尽、结构化、逻辑连贯的思维链 (Chain-of-Thought),甚至发展出超越人类范本的策略,如自我反思、验证和多角度探索。
2. **提升最终答案正确性:** 确保模型在优化推理过程的同时,能够更可靠地收敛到正确的最终答案。(能在8192限制内里面完成推理和回答,避免为了推理而推理。)
* **算法:** **GRPO (Group Relative Policy Optimization)**,一种先进的高效强化学习算法,作为近端策略优化 (PPO) 的变体被应用于此项目中。与需要额外训练一个价值网络 (Value Model / Critic) 的传统 PPO 不同,GRPO 通过以下方式简化了训练流程并显著降低了资源消耗:
1. **分组采样 (Group Sampling):** 针对每一个问题,策略模型 (Policy Model) 会生成一个包含 `G` 个候选输出的组 (Group)。在本项目代码中,组的大小 `num_generations` 被设置为 在这里我设置的是**4**。
2. **奖励评估 (Reward Evaluation):** 一个由多种函数组成的复杂奖励系统会对组内的每一个候选输出进行评分,得出一个综合的标量奖励分数 `r`。
3. **相对优势估计 (Group Relative Advantage Estimation):** GRPO 的核心在于它不依赖于一个独立的价值网络来估计基准线 (Baseline)。相反,它直接利用组内所有候选输出的平均奖励作为基准,通过计算每个输出的奖励相对于该组平均奖励的偏离程度(例如,通过均值和标准差进行归一化)来估计其优势函数 `A` 。
4. **策略更新 (Policy Update):** 模型根据计算出的相对优势来更新策略网络。奖励高于组平均水平的输出会得到正向激励,而低于平均水平的则会受到抑制。这使得策略梯度更新更稳定,并且与奖励模型基于比较的训练方式天然对齐。
* **数据集:** 为了引导模型的推理能力,本阶段构建了一个混合数据集,结合了经典的英文基准和高质量的中文蒸馏数据。
* **`openai/gsm8k`**: 一个广泛使用的英文小学数学应用题数据集。代码中从此数据集的中随机抽样 2800 条样本。其标准答案(以 `#### 123` 格式结尾)被提取出来,作为评估最终答案正确性的标准 (Ground Truth),直接用于 `correctness_reward_func` 奖励函数的计算。
* **`open-r1/DAPO-Math-17k-Processed`**: 一个高质量的高难度数学推理偏好数据集。: 数据集中的 prompt 作为作“用户问题”,而 solution 列则被视为“标准答案”。并且进行里长度过滤,确保所有训练样本都能被模型完整处理,计算了所有提示分词后的长度分布,并筛选出长度在90%分位数以下的样本,避免了因超长序列导致的截断问题。check_answer & check_numbers 函数负责评估模型在 <answer> 标签内给出的最终答案的质量。
* **`Jackrong/Chinese-Qwen3-235B-Thinking-2507-Distill-100k`(辅助,我只用来做防止过拟合数学格式)**: 一个包含中文思维链的蒸馏数据集。代码中从此数据集的 `train` 集中20250924随机种子抽样 2000 条样本。其 `Answer_content` 字段提供了完整的参考答案,不仅用于评估内容相似度,还作为长度、风格和格式对齐的参照标准,为多个奖励函数(`content_alignment_reward_func`, `zh_quality_reward_func`)提供指导。
这三个数据集经过预处理、过滤和合并后,形成一个打乱的问题-答案对的训练集,供 `GRPOTrainer` 在每个训练周期中使用。
* **奖励系统 (Reward System):** 为了从多个维度精细地引导模型优化,代码实现了一套复杂且全面的奖励函数体系(按理来说应该在SFT之后再进行第四步的RL进行偏好对其,资源有限理解万岁各位),将多个奖励和惩罚信号加权组合,共同塑造模型的行为。该系统可分为以下几个模块:
1. **核心目标奖励:**
* `correctness_reward_func`: 基于 `gsm8k`和`DAPO-Math-17k-Processed` 的参考答案,对最终数值计算的正确性给予最高的正向奖励,是确保模型学习解决问题的核心信号。
* `strict_format_reward_func`: 严格执行`<think>...</think>`的推理输出格式,将答案放到<answer>与</answer>标签内,方便奖励答案函数核对。对格式错误(如标签缺失、重复或乱序)进行直接扣分,保证了推理过程的可解析性。
2. **质量与对齐奖励:**
* **内容与长度对齐:** 通过 `content_alignment_reward_func` (基于 unigram F1 分数) 和 `ref_length_alignment_reward_func`,鼓励模型生成在内容和长度上都与高质量参考答案相似的回答。
* **风格与格式对齐:** 通过 `md_style_reward_func`, `style_match_to_ref_reward_func` 和 `math_layout_reward_func`,激励模型使用更具可读性的 Markdown 格式(标题、列表)、在数学问题中正确使用 LaTeX 排版,并学习参考答案中的优秀格式(表格、代码块)。
* **中文质量与语言一致性:** `zh_quality_reward_func` 专门针对中文内容,综合评估中文占比、内容F1分数和Markdown结构相似度。
3. **行为正则化与惩罚:**
* **反冗余与短视:** `anti_redundancy_penalty_func` 惩罚思维链中的重复性短语和填充词。`min_answer_penalty_func` 则惩罚那些推理看似详尽但最终答案过于简短的行为。统计了蒸馏数据集中思维链中的一些推理词语比如:因为,所以,那么,不对,检查,再次检查,核实..等中英文词汇。
* **长度控制:** `length_reward_func` 和 `think_soft_cap_penalty_func` 共同作用,有个函数会判断题目内容,根据问题类型(数学题 vs. 通用长文)为推理和答案设定了理想的长度区间,并对超过2000个字符的超长“思考”过程施加软性惩罚,这与研究中观察到RL会自发增长CoT长度的现象相呼应。
4. **探索与多样性激励:**
* `intra_sample_style_diversity_reward_func` & `intra_sample_reasoning_diversity_reward_func`: 这是一组新的奖励函数,用于评估同一问题生成的多个候选答案之间的差异性。通过奖励风格和推理路径更多样的输出,主动激励模型跳出单一的最优路径,探索更广阔的解题策略空间,从而提升模型的鲁棒性 (Maj@K performance)。
### 阶段三:对齐与能力巩固 (Post-RL SFT)
* **参考论文:** **"Phi-4-reasoning Technical Report" (arXiv:2504.21318)**
我的实施主要参照了论文的 **第3节 "Phi-4-reasoning: Supervised Finetuning of Phi-4"** 。我的方法同样采用了论文中强调的核心策略,即使用一个强大的教师模型(该论文使用o3-mini,我的数据集中包含了来自**gpt-oss-120b-high、DeepSeek-R1模型**的蒸馏数据)来生成高质量的、包含长思维链的训练样本。
我在中构建的`system_message`,其目的和结构与论文第10页所展示的系统提示词一致,引导模型生成结构化的、包含`<think>`标签的详尽推理过程。
* **目标:** 缓解强化学习可能引入的“对齐税”(Alignment Tax),即模型在优化特定能力时对通用指令遵循能力的遗忘。调用更强大的推理教师模型进行监督学习,泛化,增强,扩展知识,就像高中小组讨论过后,老师现在开始规范解答,传授新知识啦。
* **过程:** 将经过 GRPO 优化的模型,再次投入到原始的 87k 样本 SFT 数据集中,进行一个大有效参数的监督微调。此步骤旨在将 RL 阶段学到的推理策略与 SFT 阶段掌握的广泛知识进行融合与校准。
| 数据集名称/来源 | 样本数量 | 描述 |
| ----------------------------------------------------- | -------- | ------------------------------------------------------------ |
| **`Jackrong/Natural-Reasoning-gpt-oss-120B-S1`** | 70,000 | **核心数据集**。基于`facebook/natural_reasoning`蒸馏而来,提供高质量、高难度的通用推理问题,覆盖STEM、经济、社科等领域。 |
| **`Jackrong/GPT-OSS-120B-Distilled-Reasoning-math`** | 5,000 | 专注于数学问题的推理和求解。 |
| **`Jackrong/Chinese-Qwen3-235B-Thinking-2507-Distill-100k`** | 5,000 | 提供高质量的中文思维链数据,增强模型的中文推理能力。 |
| **`deepseek_if_shuffled-v1.json`** | 5,000 | 专注于提升模型理解和执行复杂指令的能力。 |
| **`deepseek_code_shuffled-v1.json`** | 2,000 | 赋予模型代码分析、 bug修复和代码生成的能力。 |
| **总计 (Total)** | **87,000** | -
* **目标:** 为指令模型注入结构化的“思维链”能力,教会它如何进行显式推理 。
* **数据集:** 一个包含 **87,000** 条样本的混合数据集,主体为 **`Jackrong/Natural-Reasoning-gpt-oss-120B-S1`** ,辅以数学、代码、中文和指令遵循等多个领域的数据。
### 模型实际表现:
- 测试问题:
-
![Screenshot 2025-09-25 at 12.13.26 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/xJA9Vq8SMkZAyV2rsdYfg.png)
-模型的思维链:
![Screenshot 2025-09-25 at 12.13.10 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/yafSEiPicZeCKdCZxhF9l.png)
-模型的回答:
![Screenshot 2025-09-25 at 12.13.39 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/p0-Nx2q7hx5pM9qSXm7o1.png)
-但是
![Screenshot 2025-09-25 at 12.15.49 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/HWSxCVOWbx7QoyKJcBd19.png)
![Screenshot 2025-09-25 at 12.16.08 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/gDSBJXx9V3rULAbnvo8W3.png)
![Screenshot 2025-09-25 at 12.16.26 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/1vws0fUAnS5bUH6vXdAnC.png)
-孟德尔
![Screenshot 2025-09-25 at 12.18.05 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/vjMV10ikK6wXaauSdiRf0.png)
![Screenshot 2025-09-25 at 12.19.25 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/zDFzALxGrq75LgDDnRtIe.png)…]()
![Screenshot 2025-09-25 at 12.20.30 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/1ztI5GTJgfRrbtjnen97s.png)
- 数学推理:
![Screenshot 2025-09-25 at 12.49.55 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/csTTAI-OG4ldva5woIQGi.png)
![Screenshot 2025-09-25 at 12.50.09 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/6bPISlD8ON6n9FmTerHa-.png)
- 逻辑谜题推理:
![Screenshot 2025-09-25 at 12.50.56 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/M2CMpZILrurQiInR6GVS4.png)
![Screenshot 2025-09-25 at 12.51.21 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/U5LdBp2MDTV8Hns0-HcxM.png)
![Screenshot 2025-09-25 at 12.51.33 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/AxRTlMTv5v6KDS0u-6cL3.png)
![Screenshot 2025-09-25 at 12.52.05 PM](https://cdn-uploads.huggingface.co/production/uploads/66309bd090589b7c65950665/RBZKJ_WX7FAaJ6fnBSHgI.png)