胡凯翔 :DeepSeek 为什么省钱
胡凯翔 :DeepSeek 为什么省钱
胡凯翔 :DeepSeek 为什么省钱 胡凯翔 :DeepSeek 为什么省钱 Modified January 29, 2025 1. 蒸馏的核心思想 想象一个大模型和一个小模型在处理同一个问题: Code block Plain Text 输入:"2+3=?" 大模型的思考过程: 2是数字,3是数字 这是加法运算 2+3=5 置信度:95% 小模型如果直接训练: 这是数学问题 答案是5 置信度:70% 蒸馏的关键在于:教会小模型学习大模型的"思考过程"和"确信程度",而不仅仅是答案。 2. 技术实现方式 2.1 知识表示 大模型输出的不只是最终答案,而是一个概率分布: Code block Python 简化示例:大模型对"2+3=?"的完整输出可能是 { "5": 0.95, 95%确信是5 "6": 0.03, 3%觉得可能是6 "4": 0.02 2%觉得可能是4 } 2.2 温度调节 使用温度参数(Temperature)来控制输出的"软标签": Code block Python 温度越高,分布越平滑 T = 2.0 温度参数 softmax(logits/T) = { "5": 0.80, "6": 0.12, "4": 0.08 } 这些"软标签"比简单的对错标签(0/1)包含更多信息。 3. 训练过程 3.1 基本流程 Code block Python 伪代码展示核心思想 for 输入 in 训练数据: 1. 获取教师模型(大模型)的详细输出 教师输出 = 大模型(输入, temperature=T) 2. 获取学生模型(小模型)的输出 学生输出 = 小模型(输入, temperature=T) 3. 计算损失:让学生输出尽量接近教师输出 损失 = KL散度(教师输出, 学生输出) 4. 更新小模型参数 小模型.反向传播(损失) 3.2 具体实现中的关键点 1. 损失函数设计 Code block Python 通常结合两种损失 总损失 = α 蒸馏损失 + (1 α) 原始任务损失 其中: 蒸馏损失 = KL散度(教师软标签, 学生软标签) 原始任务损失 = 交叉熵(真实标签, 学生输出) 2. 批处理优化 Code block Python 实际训练中的批处理 batch size = 32 for batch in 数据加载器: 教师批量输出 = 大模型(batch) 学生批量输出 = 小模型(batch) 并行计算损失 batch loss = 计算批量损失(教师批量输出, 学生批量输出) 4. DeepSeek的创新 他们的80万样本训练过程可能是这样的: Code block Python DeepSeek的蒸馏过程(推测) 1. 样本生成 samples = [] for i in range(800000): prompt = 生成多样化的提示() response = DeepSeek R1.generate(prompt) samples.append((prompt, response)) 2. 质量过滤 filtered samples = 质量过滤(samples) 3. 蒸馏训练 for epoch in range(训练轮数): for prompt, teacher response in filtered samples: 教师模型(DeepSeek R1)的输出 teacher output = 处理教师响应(teacher response) 学生模型(较小模型)的输出 student output = 小模型(prompt) 优化学生模型 loss = 计算损失(teacher output, student output) 更新模型参数(loss) 5. 为什么有效? 1. 信息压缩 • 大模型学到的"精华"被压缩到小模型中 • 类似于把一本厚书的核心内容提炼成精简笔记 2. 概率分布学习 • 小模型不只学习"答案" • 还学习"思考过程"和"不确定性" 3. 泛化能力 • 通过学习大模型的"思维方式" • 而不是简单记忆答案 这就是为什么经过蒸馏的小模型能在保持相对较小体积的同时,展现出接近大模型的能力。 蒸馏的过程: 一个例子: 温度调节: 1. 蒸馏的核心思想 想象一个大模型和一个小模型在处理同一个问题: 蒸馏的关键在于:教会小模型学习大模型的"思考过程"和"确信程度",而不仅仅是答案。 2. 技术实现方式 2.1 知识表示 大模型输出的不只是最终答案,而是一个概率分布: 2.2 温度调节 使用温度参数(Temperature)来控制输出的"软标签": 这些"软标签"比简单的对错标签(0/1)包含更多信息。 3. 训练过程 3.1 基本流程 3.2 具体实现中的关键点 1. 损失函数设计 2. 批处理优化 4. DeepSeek的创新 他们的80万样本训练过程可能是这样的: 5. 为什么有效? 1. 信息压缩 • 大模型学到的"精华"被压缩到小模型中 • 类似于把一本厚书的核心内容提炼成精简笔记 2. 概率分布学习 • 小模型不只学习"答案" • 还学习"思考过程"和"不确定性" 3. 泛化能力 • 通过学习大模型的"思维方式" • 而不是简单记忆答案 这就是为什么经过蒸馏的小模型能在保持相对较小体积的同时,展现出接近大模型的能力。 蒸馏的过程: 一个例子: 温度调节: 🤖 作者 user 3127 作者 user 3127 基本术语解释: 1. DeepSeek R1: 这是一个新的人工智能语言模型,类似于 GPT 或 Claude。 2. PRM (过程奖励模型): • 这是一种用来评估和改进 AI 模型表现的方法 • 简单来说,就像给 AI 打分,告诉它哪些回答做得好,哪些需要改进 3. MCTS (蒙特卡洛树搜索): • 这是一种决策算法 • 可以理解为 AI 在做决定时,会提前模拟很多种可能的情况,然后选择最好的那个 4. GRPO & Hopper GPU: • GRPO 是一种训练 AI 的方法 • Hopper GPU 是 NVIDIA 公司的高端计算芯片 • 文章说他们用的是较普通的方法,可能是因为没有太多高端设备 5. SFT (监督微调) 和 RL (强化学习): • SFT:通过人工标注的数据来教 AI • RL:让 AI 通过不断尝试自己学习 • 文章提到他们直接使用了 RL,跳过了常规的 SFT 步骤 6. 模型蒸馏: • 这是一种技术,把大模型的"知识"转移到小模型中 • 就像把老师的知识教给学生一样 7. 量化(3位量化, 4 bpw): • 这是一种压缩 AI 模型的技术 • 让模型变得更小,运行更快,但尽量不影响性能 DeepSeek为什么能这么省钱? 1. 高效的硬件使用策略 • 使用性能较普通的 GPU(而不是最新最贵的 Hopper GPU) • 通过优化算法(如 GRPO)来弥补硬件性能的不足 • 在 M2 Ultras 上运行时采用了高效的分布式计算方案(mlx.distributed) 2. 创新的训练方法 • 直接使用强化学习(RL),跳过了传统的监督微调(SFT)步骤 ◦ 这减少了一个训练阶段,节省了大量计算资源和时间 ◦ 传统方法通常需要:预训练 → SFT → RL ◦ DeepSeek:预训练 → 直接 RL ◦ 这减少了一个训练阶段,节省了大量计算资源和时间 ◦ 传统方法通常需要:预训练 → SFT → RL ◦ DeepSeek:预训练 → 直接 RL 3. 高效的模型压缩 • 使用 3 位量化技术( 4 bpw) ◦ 这大大减少了模型的存储和运行成本 ◦ 在保持性能的同时显著降低了资源消耗 ◦ 这大大减少了模型的存储和运行成本 ◦ 在保持性能的同时显著降低了资源消耗 4. 避免无效尝试 • 从失败尝试中吸取教训(如 PRM 和 MCTS) • 及时放弃无效路径,集中资源在有效方法上 成本对比 • 文章提到其成本仅为 O1(可能指 OpenAI)的三十分之一 • 同时在 Livebench 和 Aider 排行榜上的表现仅次于 O1 • 这说明他们在保持高性能的同时,显著降低了成本 创新的蒸馏技术 • 使用 80 万个由 DeepSeek R1 生成的样本来训练小模型 • 这种方法可以高效地将大模型的能力转移到小模型上 • 不需要额外的人工标注数据,降低了数据收集和处理成本 总的来说,DeepSeek 通过创新的训练方法、高效的资源使用和精明的技术选择,实现了高性价比的模型开发。他们没有一味追求使用最昂贵的硬件,而是找到了更智能的方法来达到相似的效果。 从专业化的角度,我能理解的语言,帮我讲述蒸馏的工作原理