引言 #
24年 1月份的时候,晚点聊 Late Talk 邀请了再次创业的袁进辉讨论创业方向,播客节目中提到了 ”大模型推理需求会超过训练“ 的观点令人不明觉厉。
彼时的基础模型团队们,都还在沿着预训练 Scaling Laws 的路继续冲刺。
直到 9 月份 OpenAI 推出了 O1——通过强化学习 (Reinforcement Learning,也被简称为 RL) 教会模型使用思维链 (Chain of Thought) 的推理过程,并在推理过程中引入测试时间计算 (test-time compute),以此大幅提高了模型的逻辑处理能力、数学能力等。但 OpenAI 没有披露更多的技术细节,只是给出了一个技术方向。
最近 DeepSeek-R1 和 Kimi k1.5 的推出,在这个领域引来了一些突破。本文主要是根据论文来梳理下最近这 2 个模型的最新研究成果。
DeepSeek-R1 #
这篇论文中 DeepSeek 提及了两个模型——DeepSeek-R1-Zero 和 DeepSeek-R1
DeepSeek-R1-Zero 是直接基于基本的预训练模型(DeepSeek-V3),使用 RL + CoT 进行训练而成的,从而证明即使不用微调 (SFT),仅通过大规模的强化学习 (RL) 也可以提高模型的推理能力。
而对于 DeepSeek-R1,分别使用 DeepSeek-R1-Zero 和 DeepSeek-V3 产出一些 CoT 推理数据和非推理数据,进而对 DeepSeek-R1 模型进行 SFT 微调;在 Zero 的基础上进行二次强化学习,增加模型的有用性和无害性;最重要的是对 DeepSeek-R1 进行了蒸馏,并将推理能力赋予小的稠密模型。


下面我们会分别针对强化学习、CoT 和蒸馏等进行详细解释。
强化学习 GPRO #
强化学习方面,DeepSeek-R1 使用的是在 DeepSeekMath 模型相关的论文中提出的 GRPO (Group Relative Policy Optimization,参考自 DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models)。
GRPO 是基于 PPO 改进而来的,去掉了其中的价值模型 (Value Model),并将广义优势估计 (GAE, Generalized advantage estimation) 函数替换为组计算 (Group Computation)。
这种改进的原因在于 PPO 中的价值模型 (Value Model) 通常和策略模型 (Policy Model) 的规模相同,大大增加了内存和计算的成本和负担,而且去掉价值模型也可以降低整个算法中的复杂性。
根据论文中的描述,算法的大致流程如下:
奖励模型训练 #
Deepsee-R1 采用了基于规则的奖励模型,主要分为以下两种:
- Accuracy rewards 准确率奖励:用于评估模型的最终响应是否正确,同时需要以指定输出格式提供最终答案。
- Format rewards 格式奖励:要求模型将思考过程放在
<think>
和</think>
之间。
训练模板 #
为了让 R1 模型在强化学习训练中遵循指定的格式,需要先设计一个简单模板。这个模板确保了在模型输出结果的时候优先生成推理过程,即思维链输出;其次再生成最终答案。
模板大致如下:
A conversation between User and Assistant. The user asks a question, and the Assistant solves it.
The assistant first thinks about the reasoning process in the mind and then provides the user
with the answer. The reasoning process and answer are enclosed within <think> </think> and
<answer> </answer> tags, respectively, i.e., <think> reasoning process here </think>
<answer> answer here </answer>. User: prompt. Assistant:
模型蒸馏 #
DeepSeek 尝试对 R1 的推理能力进行了蒸馏,并通过微调小的稠密模型以大大提升它们的推理能力。研究者使用 DeepSeek-R1 精选出了 80 万个样本数据(其中 60 万推理数据 + 20 万非推理数据),基于这些数据直接对 Qwen 和 Llama 进行了微调。
根据之前的知识点,我们大概知道模型蒸馏大概分为基于 response 的和基于 feature。目前来看 DeepSeek-R1 的蒸馏方式应该是基于 resposne,即通过 *softmax*
函数让学生模型的 logits
更接近老师模型,可以参考如下代码:
## https://github.com/hkust-nlp/simpleRL-reason/blob/main/train/openrlhf/models/loss.py#L238
import torch.nn.functional as F
from torch import nn
import torch
## Adapted from https://github.com/microsoft/LMOps/blob/main/minillm/finetune.py#L166
class KDLoss(nn.Module):
"""
Language Model Knowledge Distillation Loss
"""
def __init__(self):
super().__init__()
self.IGNORE_INDEX = -100
def forward(self, logits: torch.Tensor, teacher_logits: torch.Tensor, label: torch.Tensor) -> torch.Tensor:
teacher_probs = F.softmax(teacher_logits, dim=-1, dtype=torch.float32)
inf_mask = torch.isinf(logits)
logprobs = F.log_softmax(logits, dim=-1, dtype=torch.float32)
prod_probs = torch.masked_fill(teacher_probs * logprobs, inf_mask, 0)
x = torch.sum(prod_probs, dim=-1).view(-1)
mask = (label != self.IGNORE_INDEX).int()
distil_loss = -torch.sum(x * mask.view(-1), dim=0) / torch.sum(mask.view(-1), dim=0)
return distil_loss
Kimi k1.5 #
Kimi k1.5 的开发主要经过了几个阶段:预训练、监督微调 (SFT)、long-CoT 监督微调和强化学习 (RL)。
Kimi 在支持长上下文方面一直比较有优势,这次也是针对强化学习阶段提出长文本 RL,以此让模型在推理过程中给出更加详细的方案并提高回答的准确性。
本论文主要是介绍 Kimi k1.5 使用的 long-CoT 监督微调和强化学习 (RL)。
提示集管理 #
提示集的质量和多样性对强化学习 RL 的有效性有着至关重要的作用。Kimi k1.5 的论文总结了高质量提示集的三个特点:
- Diverse Coverage 覆盖范围的多样性:提示词集合需要涵盖广泛的学科,以增强模型的适应性,并确保在不同领域的通用性。
- Balanced Difficulty 平衡难度:提示词集合需要有均匀分布的简单、中等和困难的问题,以促进逐步学习,防止复杂问题的过拟合。
- Accurate Evaluability 准确度评估:提示词需要经过客观且可靠的评估,以此确保模型思考是基于正确的推理过程。
为了实现对于提示词的评估,Kimi 这里基于模型自身能力,来评估每个提示词的难度:针对每个提示词,将微调后的 SFT 模型设置到较高的 temperature 并生成 10 次答案;其次计算这 10 次答案中的正确率,正确率越低难度越高。
其中还有一些情况如模型通过错误的推理得到正确的答案。对于这种情况论文中提出了一种简单而有效的方法来识别并过滤掉这类提示词:提示模型猜测可能的答案,并不要求任何 CoT 的推理步骤,如果模型在尝试了 N 次后得到了正确答案,则认为这种提示容易解答并过滤掉。Kimi 团队最终将 N 设置为 8。
Long-CoT SFT #
基于上面提到的规则和过滤,再加上拒绝采样 (rejection samping) 的的方式,Kimi 团队产出了一些高质量的 CoT 数据集。生成的这些数据集旨在封装一些关键的推理过程:
- planning 规划能力: 在产出结果前系统性地规划整体的步骤
- evaluation 评估能力: 用于对中间中间步骤进行批判性评估
- reflection 反思能力: 重新思考,并完善和改进方案
- exploration 探索能力: 能够考虑替代的解决方案
通过微调的 Long-CoT 模型,可以生成更详细和逻辑连贯的结果,从而提高了在推理任务中的准确度。
强化学习 #
前面我们主要说到了长文本的推理数据集,及其针对长文本推理数据的微调,下面主要是总结 Kimi k1.5 在长文本的强化学习中引入了哪些策略:
- Length Penalty 长度惩罚:由于使用了 Long-CoT 微调,导致模型产生了过度思考的现象。为了解决过度思考的情况,由此引入了长度奖励来抑制 token 过长的情况——在正确的回答集合中惩罚更长的回答,同时惩罚回答不正确的长回答。并将这个长度奖励作为一个
weighting
参数添加到原始奖励中。 - 采样策略
- Curriculum Sampling 课程学习采样:从训练简单的任务,逐渐发展到更具挑战性的任务。在数据收集过程中,会包含登记和难度的标签,从而基于这些标签由易到难地训练。
- Prioritized Sampling 优先采样:跟踪每个问题的成功率,按成功率对问题进行采样。针对回答成功率越低的问题提供提供较高的采样概率,从而引导模型在 RL 过程有限学习并提高薄弱的领域。
- long2short 强化学习:在进行标准的强化学习 RL 之后,选择一个在性能和 token 效率之间达到最佳平衡的模型最为基础模型,进行单独的 long2short 强化学习。这部分同样是使用长度惩罚,以此进一步打压那些正确但是更长的回答。
参考 #
Fully open reproduction of DeepSeek-R1
This is a replicate of DeepSeek-R1-Zero and DeepSeek-R1 training on small models with limited data
DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models
DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via…