惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

豆逗子的小黑屋

GEMINI-CLI settings 参数详情 使用 sing-box Tun 模式实现 V2rayU 的透明代理 浅析 Claude Code 的执行与提示词 多模态模型是如何处理和理解图片的? 从配料表出发:便秘的猫应该怎么选主食 盘点开源的 DeepResearch 实现方案 使用 TiDB Vector 构建 LightRAG 知识库 从论文到源码:详解 RAG 算法 云南之行——游在大理食在昆明 浅入浅出 Rerank 模型 一年同行:我的TiDB社区之旅 读书笔记《大语言模型》 TiDB Vector + Dify 快速构建 AI Agent 基于 LLM 推动游戏叙事 HTTP/2 和 CONTINUATION Flood 混合专家模型 (MoE) 笔记 报告分享: IMF第四次磋商报告 和 美联储研究笔记 使用 Coze 搭建 TiDB 助手 2023年总结 读书笔记《大规模语言模型:从理论到实践》 TiDB知识点梳理 (PCTA 笔记) 向量相似性检索方法 Java & Go 线程模式对比 Hugo + umami 博客统计面板 资产配置 101 探究 Spring-Boot 内置Server 搭建Go版本Kubernetes微服务示例 为什么Spring可以“自己注入自己” Go语言指针性能 从固定走向浮动 ——《时运变迁》读书笔记 Netty 源码分析及内存溢出思路 博客搭建简述 推荐 笔记 看得见的手——《置身事内》读书笔记 2022年初读书回顾 荐书:《走出唯一真理观》 nintendo switch 关于 邮箱
浅谈 DeepSeek-R1 和 Kimi k1.5 论文中的思维链 + 强化学习
2025-02-01 · via 豆逗子的小黑屋

引言 #

24年 1月份的时候,晚点聊 Late Talk 邀请了再次创业的袁进辉讨论创业方向,播客节目中提到了 ”大模型推理需求会超过训练“ 的观点令人不明觉厉。

彼时的基础模型团队们,都还在沿着预训练 Scaling Laws 的路继续冲刺。

直到 9 月份 OpenAI 推出了 O1——通过强化学习 (Reinforcement Learning,也被简称为 RL) 教会模型使用思维链 (Chain of Thought) 的推理过程,并在推理过程中引入测试时间计算 (test-time compute),以此大幅提高了模型的逻辑处理能力、数学能力等。但 OpenAI 没有披露更多的技术细节,只是给出了一个技术方向。

最近 DeepSeek-R1Kimi 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 进行了蒸馏,并将推理能力赋予小的稠密模型。

DeepSeek-R1-Zero 模型架构图,展示了基于预训练模型通过 RL 和 CoT 训练的流程 DeepSeek-R1 模型架构图,展示了包含 SFT、RL 和模型蒸馏的完整训练流程

下面我们会分别针对强化学习、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) 的规模相同,大大增加了内存和计算的成本和负担,而且去掉价值模型也可以降低整个算法中的复杂性。

GRPO.png

根据论文中的描述,算法的大致流程如下:

GRPO-Algorithm.png

奖励模型训练 #

Deepsee-R1 采用了基于规则的奖励模型,主要分为以下两种:

  1. Accuracy rewards 准确率奖励:用于评估模型的最终响应是否正确,同时需要以指定输出格式提供最终答案。
  2. 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 强化学习。这部分同样是使用长度惩罚,以此进一步打压那些正确但是更长的回答。

参考 #

DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models

DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via…

Kimi k1.5: Scaling Reinforcement Learning with LLMs

89. 逐句讲解DeepSeek-R1、Kimi K1.5、OpenAI o1技术报告——“最优美的算法最干净”