






















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 提及了两个模型——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 和蒸馏等进行详细解释。
强化学习方面,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 采用了基于规则的奖励模型,主要分为以下两种:
<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 的开发主要经过了几个阶段:预训练、监督微调 (SFT)、long-CoT 监督微调和强化学习 (RL)。
Kimi 在支持长上下文方面一直比较有优势,这次也是针对强化学习阶段提出长文本 RL,以此让模型在推理过程中给出更加详细的方案并提高回答的准确性。
本论文主要是介绍 Kimi k1.5 使用的 long-CoT 监督微调和强化学习 (RL)。
提示集的质量和多样性对强化学习 RL 的有效性有着至关重要的作用。Kimi k1.5 的论文总结了高质量提示集的三个特点:
为了实现对于提示词的评估,Kimi 这里基于模型自身能力,来评估每个提示词的难度:针对每个提示词,将微调后的 SFT 模型设置到较高的 temperature 并生成 10 次答案;其次计算这 10 次答案中的正确率,正确率越低难度越高。
其中还有一些情况如模型通过错误的推理得到正确的答案。对于这种情况论文中提出了一种简单而有效的方法来识别并过滤掉这类提示词:提示模型猜测可能的答案,并不要求任何 CoT 的推理步骤,如果模型在尝试了 N 次后得到了正确答案,则认为这种提示容易解答并过滤掉。Kimi 团队最终将 N 设置为 8。
基于上面提到的规则和过滤,再加上拒绝采样 (rejection samping) 的的方式,Kimi 团队产出了一些高质量的 CoT 数据集。生成的这些数据集旨在封装一些关键的推理过程:
通过微调的 Long-CoT 模型,可以生成更详细和逻辑连贯的结果,从而提高了在推理任务中的准确度。
前面我们主要说到了长文本的推理数据集,及其针对长文本推理数据的微调,下面主要是总结 Kimi k1.5 在长文本的强化学习中引入了哪些策略:
weighting 参数添加到原始奖励中。DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models
DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via…
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。