DeepSeek-R1:开源Top推理模型的实现细节、使用与复现

核心观点

● 直接用强化学习就可以让模型获得显著的推理能力,说明并不一定需要SFT才行。
● 强化学习并不一定需要复杂的奖励模型,使用简单的规则反而取得意想不到的效果。
● 通过知识蒸馏让小模型一定程度上也有推理能力,甚至在某些场景下的表现超过了Top模型,比直接在小模型上进行强化学习更好。

DeepSeek-R1-Zero:纯强化学习的推理能力

在这里插入图片描述

训练模版

DeepSeek团队设计了如下的训练模型,要求模型按照如下格式进行输出:首先进行推理过程,然后给出最终答案。通过限制输出的结构格式,避免内容偏见,并且可以观察模型在强化学习过程中的推理进展。
在这里插入图片描述

奖励模型

DeepSeek-R1-Zero的训练信号来源于奖励系统,主要包括两种奖励类型:
● 准确性奖励:评估模型回答的正确性,适用于数学问题和LeetCode问题,通过规则验证答案。
● 格式奖励:要求模型将思考过程放在特定标签之间(<think></think>)。
不使用神经奖励模型,这是因为可能导致奖励黑客问题,且重训练需要额外资源,复杂化训练流程。

顿悟时刻

论文中展示了一个 R1-Zero 在解决一道数学题时的中间版本输出,被称为模型的「顿悟时刻」。在这个例子中,模型在推理过程中突然意识到可以“重新评估”之前的步骤,并尝试用一种新的方法来解题,这种思维与人类似,说明模型初步掌握了人类思维的推理能力(红色字体部分)。

在这里插入图片描述

性能表现

在这里插入图片描述

DeepSeek-R1-Zero的自我进化过程显示出其在强化学习下的推理能力提升,能够处理复杂推理任务。此外,模型在训练过程中思考时间持续改善,能够生成数百到数千个推理标记,促进深度思考,从而实现更加强大和正确的推理能力。

DeepSeek-R1:多阶段训练推理能力

在这里插入图片描述

从Zero的训练过程中很容易得到启发:如果在训练初期先进行一部分高质量COT数据的微调,能否显著增强模型的推理能力,又或者加速收敛?

冷启动阶段

针对Zero模型不稳定的情况,尝试先通过收集数千条长CoT数据对模型进行微调。增加这一阶段有两个好处:

  1. 赠加模型的可读性,在SFT阶段可以设计易读的输出格式,包含推理过程和总结,从而过滤不友好的响应格式。
  2. 增加模型的推理能力,通过人类先验设计的模式,可以观察到DeepSeek-R1表现优于DeepSeek-R1-Zero,这是因为迭代训练更适合推理模型。

基于推理性能的强化学习优化

在对DeepSeek-V3-Base进行冷启动数据微调后,采用与DeepSeek-R1-Zero相同的大规模强化学习训练,重点提升模型在编码、数学、科学和逻辑推理等推理密集型任务中的能力。训练过程中发现CoT在多语言提示中常出现语言混合,为此还需要引入语言一致性奖励,需要计算CoT中目标语言单词的比例。尽管这个训练目标会在一定程度上降低模型的推理能力,但其实一致的语言表达会更加符合我们的使用需求。最终奖励通过将推理任务的准确性与语言一致性奖励直接相加形成,随后对微调后的模型进行训练,直至在推理任务上收敛。

第二次微调

在推理导向的强化学习收敛后,利用检查点收集监督微调(SFT)数据,增强模型在写作、角色扮演等任务的能力。使用以下方法收集到的约80万条样本对DeepSeek-V3-Base进行第两轮的微调。

  1. 推理数据:通过拒绝采样从强化学习训练的检查点生成推理轨迹,扩展数据集,包含使用生成奖励模型的数据,过滤混合语言、长段落和代码块,最终收集约60万条推理相关训练样本。
  2. 非推理数据:采用DeepSeek-V3的Pipeline,重用部分SFT数据,针对某些任务生成潜在的思维链,最终收集约20万条非推理训练样本。

第二次强化学习

这阶段论文中没有给出具体的实现步骤,仅提供了一段文字概述。在第二次微调后,同样需要再进行一轮强化学习,这一阶段主要是为了提升模型的有用性和无害性,同时改善推理能力。推理数据遵循DeepSeek-R1-Zero方法,利用基于规则的奖励指导数学、代码和逻辑推理,一般数据使用奖励模型捕捉复杂场景中的人类偏好。整合奖励信号和多样数据分布,训练出在推理上表现优异的模型,同时优先考虑有用性和无害性。有用性评估集中在最终摘要,强调响应的实用性和相关性。无害性评估涵盖整个响应,识别和减轻潜在风险、偏见或有害内容。

模型蒸馏:为小模型带来推理能力

为了证明蒸馏也能为小模型带来一定程度的推理能力,仅使用SFT,不包括强化学习阶段,通过使用800k样本对开源模型Qwen和Llama进行直接微调,提升了小型模型的推理能力。
在这里插入图片描述

DeepSeek团队还对比了经过大规模强化学习的模型和经过R1蒸馏后的模型的推理能力,如下表展示:
在这里插入图片描述

从这个结果可以得出两个结论:1)将更强大的模型蒸馏成更小的模型会产生优异的结果,而本文提到的依赖于大规模强化学习的较小模型需要巨大的计算能力,甚至可能无法达到蒸馏的性能。2)虽然蒸馏看起来既经济又有效,但想要实现智能推理可能仍然需要更强大的基础模型和更大规模的强化学习。

本地使用

在这里插入图片描述

Ollama已经提供了6个蒸馏模型的使用,最低只需要4GB显存即可调用。

ollama run deepseek-r1:1.5b

在这里插入图片描述

复现

在这里插入图片描述

针对DeepSeek团队没有开放的一些具体细节,HF团队创建了一个项目,旨在完全复现出R1的训练、评估、数据、以及权重等,足以看出开源界对R1系列模型的期待。
项目地址:open-r1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/961306.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux 阻塞IO

Linux 阻塞IO 阻塞IO是最常见的IO&#xff0c;我们使用的 scanf()、cin 等都是阻塞IO。

Ubuntu 安装 QGIS LTR 3.34

QGIS官方提供了安装指南&#xff1a;https://qgis.org/resources/installation-guide/#linux。大多数linux发行版将QGIS拆分为几个包&#xff1a;qgis、qgis-python、qgis-grass、qgis-plugin-grass、qgis-server&#xff0c;有的包最初安装时被跳过&#xff0c;可以在需要使用…

Spring Boot - 数据库集成05 - 集成MongoDB

Spring Boot集成MongoDB 文章目录 Spring Boot集成MongoDB一&#xff1a;使用前的准备1&#xff1a;依赖导入 & 配置2&#xff1a;实体类创建 二&#xff1a;核心 - MongoRepository三&#xff1a;核心 - MongoTemplate1&#xff1a;集合操作2&#xff1a;文档操作(重点)3&…

SpringCloud系列教程:微服务的未来(十八)雪崩问题、服务保护方案、Sentinel快速入门

前言 在分布式系统中&#xff0c;雪崩效应&#xff08;Avalanche Effect&#xff09;是一种常见的故障现象&#xff0c;通常发生在系统中某个组件出现故障时&#xff0c;导致其他组件级联失败&#xff0c;最终引发整个系统的崩溃。为了有效应对雪崩效应&#xff0c;服务保护方…

Golang Gin系列-7:认证和授权

在本章中&#xff0c;我们将探讨Gin框架中身份验证和授权的基本方面。这包括实现基本的和基于令牌的身份验证&#xff0c;使用基于角色的访问控制&#xff0c;应用中间件进行授权&#xff0c;以及使用HTTPS和漏洞防护保护应用程序。 实现身份认证 Basic 认证 Basic 认证是内置…

C++ 中用于控制输出格式的操纵符——setw 、setfill、setprecision、fixed

目录 四种操纵符简要介绍 setprecision基本用法 setfill的基本用法 fixed的基本用法 setw基本用法 以下是一些常见的用法和示例&#xff1a; 1. 设置字段宽度和填充字符 2. 设置字段宽度和对齐方式 3. 设置字段宽度和精度 4. 设置字段宽度和填充字符&#xff0c;结合…

06_改善播放效果--优先级与阻塞

一、声明 本文章的程序是基于05篇的程序改善的&#xff0c;所以CubeMx的配置看05篇的就好 且此篇文章由于红外遥控暂时未使用&#xff0c;还不知其是否能成功显示现象 二、keil5代码 这个优先级要1&#xff0c;但是如果只是这个优先级1的话&#xff0c;那么我的LED灯闪烁的任务…

【Rust自学】16.3. 共享状态的并发

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 16.3.1. 使用共享来实现并发 还记得Go语言有一句名言是这么说的&#xff1a;Do not commun…

项目集成Nacos

文章目录 1.环境搭建1.创建模块 sunrays-common-cloud-nacos-starter2.目录结构3.pom.xml4.自动配置1.NacosAutoConfiguration.java2.spring.factories 5.引入cloud模块通用依赖 2.测试1.创建模块 sunrays-common-cloud-nacos-starter-demo2.目录结构3.pom.xml4.application.ym…

计算机网络 (59)无线个人区域网WPAN

前言 无线个人区域网&#xff08;WPAN&#xff0c;Wireless Personal Area Network&#xff09;是一种以个人为中心&#xff0c;采用无线连接方式的个人局域网。 一、定义与特点 定义&#xff1a;WPAN是以个人为中心&#xff0c;实现活动半径小、业务类型丰富、面向特定群体的无…

Python 之 Excel 表格常用操作

示例文件 test.xlsx 将各个表单拆分成单独的 Excel 文件 import os.pathimport openpyxl import pandasdef handle_excel(file_path):dirname os.path.dirname(file_path)basename os.path.basename(file_path).split(".")[0]wb openpyxl.load_workbook(file_pat…

01学习预热篇(D6_正式踏入JVM深入学习前的铺垫)

目录 学习前言 一、虚拟机的结构 1. Java虚拟机参数设置 2. java 堆 3. 出入栈 4. 局部变量表 1> 局部变量的剖析 2> 局部变量的回收 5. 操作数栈 1> 常量入栈指令 2> 局部变量值转载到栈中指令 3> 将栈顶值保存到局部变量中指令 6. 帧数据区 7. 栈…

知识库建设对提升团队协作与创新能力的影响分析

内容概要 在当今快速变革的商业环境中&#xff0c;知识库建设的重要性愈发凸显。它不仅是信息存储的载体&#xff0c;更是推动组织内部沟通与协作的基石。通过系统整理与管理企业知识&#xff0c;团队成员能够便捷地访问相关信息&#xff0c;使得协作过程更为流畅&#xff0c;…

C语言字符串详解

1. C语言中的字符串基础 C语言中的字符串是程序设计中不可忽视的部分。与现代高级编程语言不同&#xff0c;C语言对字符串的处理方式直接、灵活&#xff0c;并且强大。在C语言中&#xff0c;字符串并不是一种特殊的数据类型&#xff0c;而是字符数组的一种表现形式。字符串通常…

神经网络的通俗介绍

人工神经网络&#xff0c;是一种模仿人类大脑工作原理的数学模型。人类的大脑是由无数的小“工作站”组成的&#xff0c;每个工作站叫做“神经元”。这些神经元通过“电线”互相连接&#xff0c;负责接收、处理和传递信息。 一、人类大脑神经网络 人类大脑的神经网络大概长这…

SpringBoot中Excel表的导入、导出功能的实现

文章目录 一、easyExcel简介二、Excel表的导出2.1 添加 Maven 依赖2.2 创建导出数据的实体类4. 编写导出接口5. 前端代码6. 实现效果 三、excel表的导出1. Excel表导入的整体流程1.1 配置文件存储路径 2. 前端实现2.1 文件上传组件 2.2 文件上传逻辑3. 后端实现3.1 文件上传接口…

vim交换文件的工作原理

在vim中&#xff0c;交换文件是一个临时文件&#xff0c;当我们使用vim打开一个文件进行编辑&#xff08;一定得是做出了修改才会产生交换文件&#xff09;时候&#xff0c;vim就会自动创建一个交换文件&#xff0c;而之后我们对于文件的一系列修改都是在交换文件中进行的&…

C++/stack_queue

目录 1.stack 1.1stack的介绍 1.2stack的使用 练习题&#xff1a; 1.3stack的模拟实现 2.queue的介绍和使用 2.1queue的介绍 2.2queue的使用 2.3queue的模拟实现 3.priority_queue的介绍和使用 3.1priority_queue的介绍 3.2priority_queue的使用 欢迎 1.stack 1.1stack…

5分钟带你获取deepseek api并搭建简易问答应用

目录 1、获取api 2、获取base_url和chat_model 3、配置模型参数 方法一&#xff1a;终端中临时将加入 方法二&#xff1a;创建.env文件 4、 配置client 5、利用deepseek大模型实现简易问答 deepseek-v3是截止博文撰写之日&#xff0c;无论是国内还是国际上发布的大模型中…

机器学习day4

自定义数据集 使用pytorch框架实现逻辑回归并保存模型&#xff0c;然后保存模型后再加载模型进行预测 import numpy as np import torch import torch.nn as nn import torch.optim as optimizer import matplotlib.pyplot as pltclass1_points np.array([[2.1, 1.8],[1.9, 2…