SD-ZERO:基于稀疏奖励的自我蒸馏,实现LLM高效自我进化

SD-ZERO自我蒸馏稀疏奖励
于 2026-05-28 03:18:54 修改
·本内容遵循CC 4.0 BY-SA版权协议

1. 项目概述:从稀疏奖励到密集监督的自我进化之路

在大型语言模型(LLM)的训练与优化领域,我们长期面临一个核心矛盾:强化学习(RL)的通用性与知识蒸馏(KD)的效率性难以兼得。强化学习只需要一个简单的二元奖励信号(例如,最终答案是否正确),这使得它能应用于几乎任何有明确对错判定的任务。然而,这种“稀疏奖励”就像在黑暗中摸索,模型需要生成海量样本、反复试错,才能偶然撞上正确的路径,训练成本极高。另一方面,知识蒸馏通过一个强大的教师模型,为学生的每一步推理(即每个词元)提供“密集监督”,学习路径清晰高效,但获取这样的教师模型或高质量的演示数据本身就是一个昂贵甚至不可能完成的任务。

那么,有没有一种方法,能让模型仅凭自身生成的、可能错误的尝试,以及一个简单的对错信号,就为自己创造出密集的、词元级别的指导呢?这正是SD-ZERO(Self-Distillation Zero)试图回答的问题。它不是一个简单的技巧叠加,而是一种全新的训练范式转变。其核心思想极具启发性:让同一个模型“精神分裂”,同时扮演“学生”(生成器)和“老师”(修订者)。学生负责答题,老师则负责批改学生的作业(即初始响应),并根据对错给出一个修订版。最关键的一步在于,我们不是简单地用修订版答案去训练学生,而是将老师“批改作业时的思考过程”——即它生成修订版时每一步的词元概率分布——作为监督信号,蒸馏回学生模型。这相当于将一句“你做错了”的模糊批评,转化成了“你第三步的公式用错了,应该这样改;第五步的逻辑跳跃了,应该补充这个条件”的详细批注。

我在实际跟进和复现这类方法时发现,其魅力不仅在于性能提升,更在于它揭示了模型自我反思与进化的潜力。它不需要我们人类提供“标准答案”,只需要我们告诉模型“对”或“错”。剩下的,模型可以自己教自己。这对于缺乏高质量标注数据但能自动判题(如数学、编程)的领域,无疑打开了一扇新的大门。接下来,我将深入拆解SD-ZERO的两阶段流程、背后的设计逻辑、实操中的关键细节,并分享我在探索过程中积累的经验与避坑指南。

2. SD-ZERO核心机制与两阶段训练全解析

SD-ZERO的训练流程清晰地分为两个阶段,这两个阶段环环相扣,共同完成了从“学会修订”到“内化修订”的进化。理解这两个阶段的区别与联系,是掌握该方法的关键。

2.1 第一阶段:自我修订训练——让模型学会“批改自己的作业”

第一阶段的目标很明确:赋予基础模型自我修订的能力。许多现有的开源模型(如Qwen、Llama)已经具备不错的生成能力,但如果你直接让它“看看刚才的回答哪里错了并改正”,它往往表现不佳,要么重复错误,要么生成无关内容。SRT阶段就是为了解决这个问题。

2.1.1 数据收集:构建修订轨迹数据集

这个过程是自动化的,但有几个设计细节至关重要:

  1. 采样初始响应:对于训练集中的每个问题 x,我们从基础模型 π_θ 中采样多个(例如4-8个)初始回答 y_init。这里的关键是多样性。如果只采样一个,可能永远得不到错误的样本用于学习修订;如果采样太多,计算成本会剧增。我的经验是,对于数学或代码问题,采样4-6个能在成本与覆盖率间取得较好平衡。

  2. 验证与构建提示:对每个 y_init,使用一个验证器(Verifier)判断其最终答案是否正确,得到二元奖励 r ∈ {0, 1}。这个验证器可以是一个简单的字符串匹配(提取最终答案框),也可以是调用Python解释器执行代码。根据奖励,我们构建一个控制短语 P_r

    • 如果 r=1(正确):P_r = “Let me rephrase the above solution.” (让我重新表述上述解法。)
    • 如果 r=0(错误):P_r = “Wait, this response is not correct, let me start over.” (等等,这个回答不正确,让我重新开始。)

    注意:这个提示词的设计是经验性的,但非常有效。“Rephrase”的指令对于正确样本至关重要,它鼓励模型学习更简洁、等效的表达,而不是单纯复制,这为后续的蒸馏阶段压缩生成长度埋下了伏笔。

  3. 生成修订响应:将 (x, y_init, P_r) 拼接作为新的输入,再次输入同一个模型 π_θ,让它生成修订后的回答 y_revised

  4. 过滤与保留:我们只保留那些 y_revised 被验证为正确的 (x, y_init, P_r, y_revised) 四元组,构成自我修订轨迹数据集 D_REVISION。这一步的过滤是质量的保证,确保模型学习的是“从错误到正确”或“从冗长到精炼”的有效修订模式。

2.1.2 训练目标:双重任务学习

SRT阶段的损失函数 L_SRT 由两部分组成,这是让模型同时掌握“修订”和“生成”两个角色的精妙之处:

  • 修订损失 L_revision:训练模型在给定问题 x、初始尝试 y_init 和奖励提示 P_r 的条件下,生成修订答案 y_revised。这直接强化了模型的修订能力。

    PYTHON
    # 伪代码示意损失计算
    # 输入: x, y_init, P_r, y_revised
    # 模型需要预测 y_revised 的每一个词元
    loss_revision = -log(π_θ(y_revised | x, y_init, P_r))
  • 生成损失 L_generation:训练模型仅根据问题 x,生成完整的正确响应序列 [y_init, P_r, y_revised]。注意,这里的目标序列包含了初始错误、修订提示和修订答案。这看似奇怪,实则用意深远:

    1. 防止灾难性遗忘:它确保了模型在学习了修订之后,依然保有从零开始生成完整推理链的能力。
    2. 隐式学习修订时机:模型需要学会在什么情况下该输出“Wait, this is wrong...”。这实际上是将修订决策过程内化到了生成过程中。在推理时,模型可能会在内心“模拟”一次修订,但直接输出最终的正确路径。

最终的损失是两者的简单加和:L_SRT = L_revision + L_generation。在实操中,我们通常在一个批次中混合两种类型的训练样本,让模型同时进行学习。

2.1.3 阶段成果与潜在问题

经过SRT训练后,我们得到SRT模型。这个模型已经具备了强大的自我修订能力。实验表明,它的“修订增益”(即给定一个错误回答后,能将其修订正确的概率提升)远超基础模型。然而,这也带来了一个新问题:模型在作为生成器时,会变得极其“话痨”。因为它内化了“发现错误->启动修订”的行为模式,在生成答案时,会频繁插入“等等,这里好像不对,我重新想一下……”这样的显式修订语句,导致响应长度暴增(如图3所示,可能增加2倍以上)。虽然最终答案正确率提高了,但推理效率(Token数/问题)却下降了。

2.2 第二阶段:策略内自我蒸馏——将“批改能力”内化为“一次做对”

第二阶段的目标,正是为了解决SRT模型“过度显式修订”的问题。它的核心思想是:既然修订者(老师)知道如何把学生的错误答案改对,那么为什么不直接把老师“批改时的思考”(即词元级分布)教给学生,让学生下次一开始就朝着正确的方向思考呢?

2.2.1 蒸馏过程详解

  1. 角色冻结:我们将第一阶段训练好的SRT模型的参数 θ_SRT 固定,作为教师(修订者)。初始化一个学生(生成器) 模型,其参数 θ 初始化为 θ_SRT,但这个学生的参数在第二阶段是可以更新的。
  2. 策略内采样:对于一个新的问题 x,我们使用当前的学生模型(生成器)来生成一个回答 y ~ π_θ(· | x)。因为是用来训练学生自己的,所以这叫“策略内”采样。
  3. 教师提供密集反馈:将学生生成的这个回答 y 连同其正确性奖励 r(同样通过验证器得到),构建提示 (x, y, P_r),输入给冻结的教师模型(SRT模型)。教师模型会输出在每一个词元位置 t 上的完整概率分布 π_θ_SRT(· | x, y, P_r, y_<t)
    • 这个分布蕴含了丰富的信息:如果 y 整体正确,教师分布会倾向于给出一个更精炼的复述;如果 y 有错误,教师分布会在错误发生的词元位置强烈地指向正确的表达。
  4. KL散度蒸馏:学生的目标是让自己的生成分布 π_θ(· | x, y_<t) 尽可能靠近教师在上一步提供的修订分布。因此,损失函数是两者之间的KL散度:
    PYTHON
    # 对于每个生成的词元位置 t
    # 学生分布:π_θ(· | x, y_<t)
    # 教师分布:π_θ_SRT(· | x, y, P_r, y_<t)
    loss = KL_Divergence(学生分布 || 教师分布)

2.2.2 为何蒸馏有效:词元级自我定位

这是SD-ZERO最精妙的地方。教师模型接收的只是一个二元的“对/错”信号,但它输出的词元级监督却是高度局部化的。如图4所示:

  • 对于错误的学生生成,教师的KL散度损失(可视为惩罚信号)会集中在一小部分关键的“错误词元”上。例如,在一个几何证明中,错误使用了对称性假设,那么教师模型会在“symmetry”、“property”等关键token上给出与学生截然不同的概率分布,从而精准地定位错误。
  • 对于正确的学生生成,教师的反馈则相对均匀,主要是引导学生走向一个更简洁、等效的表达。

这相当于把一句“第5行错了”,变成了“第5行的‘symmetry’这个词用在这里不成立,应该改为‘coordinate-based’方法,具体来说……”。学生通过匹配教师的分布,不仅知道哪里错了,还知道了应该怎么想、怎么写。

2.2.3 阶段成果:效率与性能的双重提升

经过自我蒸馏,我们得到最终的SD-ZERO模型。它实现了两个关键转变:

  1. 内部化修订:模型不再需要显式地输出修订语句。它学会了在内部进行“快速模拟”,提前规避已知的错误模式,直接生成更优的推理路径。如图6所示,模型响应中的“Wait, let me start over”等关键词频率大幅下降。
  2. 生成效率提升:由于内部化,生成的答案变得更直接、更简洁。如图3所示,SD-ZERO模型的平均响应长度比SRT模型减少了约一半,甚至比原始基础模型还要短,同时准确率达到了最高。

3. 实操要点与核心环节实现

理解了原理,我们来看看如何具体实现SD-ZERO。这里我结合自己的实验经验,梳理出关键步骤和配置。

3.1 环境与数据准备

基础模型选择:SD-ZERO对基础模型有一定要求,它需要具备基本的推理和指令跟随能力。论文中使用了Qwen2.5-7B-Instruct和Olmo2-7B-Instruct,这些都是经过指令微调且数学/代码能力较强的模型。我建议从类似规模的指令微调模型开始,如Llama-3.1-8B-Instruct、DeepSeek-Coder-7B-Instruct等。

训练数据构建

  1. 问题集:你需要一个包含问题 x 和标准答案 a 的数据集。论文使用了OpenR1-Math(竞赛数学)和Codeforces(编程)的数据。关键是不要使用现成的“解题过程”,我们只需要问题和最终答案。
  2. 验证器:这是自动化的核心。
    • 数学:可以编写一个简单的解析器,从模型生成的文本中提取 \boxed{}The answer is 格式的最终答案,与标准答案进行字符串匹配或数值比较。
    • 代码:需要搭建一个安全的代码执行环境(如Docker沙箱),将模型生成的代码放入其中运行,用测试用例验证输出是否正确。
  3. 数据划分:将数据集划分为两部分。例如,用前6000个问题做SRT(第一阶段),剩下的问题做Self-Distillation(第二阶段)。论文发现,在总数据量固定时,给第二阶段分配更多数据通常效果更好,因为蒸馏阶段的数据利用效率更高。

3.2 第一阶段:自我修订训练实现细节

PYTHON
# 伪代码框架 - SRT 数据收集与训练
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
 
model = AutoModelForCausalLM.from_pretrained("base-model")
tokenizer = AutoTokenizer.from_pretrained("base-model")
 
revision_traces = []
for problem, answer in tqdm(train_set_phase1):
for _ in range(num_samples_per_problem): # 例如,采样4次
# 1. 生成初始响应
input_ids = tokenizer(problem, return_tensors="pt").input_ids.to(device)
with torch.no_grad():
output = model.generate(input_ids, max_new_tokens=512, temperature=0.7)
y_init = tokenizer.decode(output[0], skip_special_tokens=True)
# 2. 验证正确性,构建提示
is_correct = verifier(y_init, answer)
prompt_pr = "Let me rephrase the above solution." if is_correct else "Wait, this response is not correct, let me start over."
# 3. 生成修订响应
revision_input = f"{problem}\n\nInitial attempt: {y_init}\n\n{prompt_pr}\n"
rev_input_ids = tokenizer(revision_input, return_tensors="pt").input_ids.to(device)
with torch.no_grad():
rev_output = model.generate(rev_input_ids, max_new_tokens=512, temperature=0.7)
y_revised = tokenizer.decode(rev_output[0], skip_special_tokens=True)
# 4. 过滤:只保留修订后正确的样本
if verifier(y_revised, answer):
revision_traces.append({
"problem": problem,
"y_init": y_init,
"prompt_pr": prompt_pr,
"y_revised": y_revised,
"full_correct_seq": f"{y_init}\n{prompt_pr}\n{y_revised}" # 用于L_generation
})
 
# SRT 训练循环
optimizer = torch.optim.AdamW(model.parameters(), lr=5e-6)
for epoch in range(num_epochs):
for batch in dataloader(revision_traces):
# 计算 L_revision
rev_inputs = tokenizer(batch["problem"] + "\n" + batch["y_init"] + "\n" + batch["prompt_pr"], ...)
rev_labels = tokenizer(batch["y_revised"], ...).input_ids
loss_rev = model(input_ids=rev_inputs, labels=rev_labels).loss
# 计算 L_generation
gen_inputs = tokenizer(batch["problem"], ...)
gen_labels = tokenizer(batch["full_correct_seq"], ...).input_ids
loss_gen = model(input_ids=gen_inputs, labels=gen_labels).loss
# 总损失
loss = loss_rev + loss_gen
loss.backward()
optimizer.step()
optimizer.zero_grad()

关键超参数经验

  • 采样温度:在数据收集时,使用适中的温度(如0.7)以增加初始响应的多样性。
  • 学习率:SRT阶段是对已有模型的微调,学习率不宜过大,通常选择5e-6到1e-5。
  • 批次大小:根据GPU内存调整,确保能放下较长的序列(因为 full_correct_seq 可能很长)。

3.3 第二阶段:自我蒸馏实现细节

PYTHON
# 伪代码框架 - Self-Distillation 训练
teacher_model = srt_model # 冻结的SRT模型
student_model = copy.deepcopy(srt_model) # 可训练的学生模型
teacher_model.eval()
 
optimizer = torch.optim.AdamW(student_model.parameters(), lr=1e-6) # 蒸馏学习率通常更小
 
for problem, answer in tqdm(train_set_phase2):
# 1. 学生(生成器)策略内采样
with torch.no_grad():
# 使用学生模型生成
input_ids = tokenizer(problem, return_tensors="pt").input_ids.to(device)
student_output = student_model.generate(input_ids, max_new_tokens=512, temperature=0.7, output_scores=True, return_dict_in_generate=True)
y_student = tokenizer.decode(student_output.sequences[0], skip_special_tokens=True)
# 2. 验证学生回答,构建教师输入
is_correct = verifier(y_student, answer)
prompt_pr = "Let me rephrase..." if is_correct else "Wait, this is not correct..."
teacher_input_text = f"{problem}\n\nStudent attempt: {y_student}\n\n{prompt_pr}\n"
# 3. 获取教师模型的词元级分布(需要逐词元进行)
teacher_inputs = tokenizer(teacher_input_text, return_tensors="pt").to(device)
student_inputs = tokenizer(problem, return_tensors="pt").to(device)
# 我们需要对齐学生生成序列的长度
student_generated_ids = student_output.sequences[0] # 包含问题token和学生生成token
loss = 0
# 假设我们只对学生生成的部分计算KL散度(跳过问题部分)
for t in range(len(student_inputs['input_ids'][0]), len(student_generated_ids)):
# 学生当前步的输入是之前所有token
student_input_ids = student_generated_ids[:t].unsqueeze(0)
with torch.no_grad():
# 获取教师模型在当前位置的logits
teacher_logits = teacher_model(input_ids=teacher_inputs['input_ids'], attention_mask=teacher_inputs['attention_mask']).logits
# 注意:这里需要根据教师输入的序列长度和当前t进行复杂的对齐,简化表示
teacher_probs = torch.softmax(teacher_logits[:, -1, :], dim=-1) # 假设对齐到教师输出的最后一个位置
# 获取学生模型在当前位置的logits
student_logits = student_model(input_ids=student_input_ids).logits
student_probs = torch.softmax(student_logits[:, -1, :], dim=-1)
# 计算KL散度损失 (学生 || 教师)
kl_loss = F.kl_div(student_probs.log(), teacher_probs, reduction='batchmean', log_target=False)
loss += kl_loss
loss.backward()
optimizer.step()
optimizer.zero_grad()

实操难点与技巧

  1. 序列对齐:上述伪代码中,教师输入和学生输入的序列结构不同,需要精细地设计注意力掩码和位置索引,以确保教师在每个时间步 t 提供的分布,对应的是学生生成的第 t 个词元应该是什么。这是实现中最容易出错的部分。一个常见的做法是将学生的整个生成序列 y_student 作为上下文,与 P_r 拼接后输入教师,然后取教师模型对应位置(通常是 y_student 之后的位置)的分布。
  2. 蒸馏温度:在计算softmax获得概率分布时,可以引入温度系数 τ(如 τ=1.0)。τ > 1 会平滑分布,让学生学习更泛化的知识;τ=1 则保持原分布。论文中未明确提及,但这是一个可调节的超参数。
  3. 学习率:蒸馏阶段的学习率通常比SRT阶段更小(例如1e-6),因为这是一个精调过程,目标是让学生的输出分布缓慢地向教师对齐,避免破坏已有的能力。

3.4 迭代自我进化:教师同步

SD-ZERO的一个迷人特性是迭代自我进化。在第一轮自我蒸馏后,学生模型的能力(包括生成和修订)都得到了提升。此时,我们可以将冻结的教师模型参数 θ_SRT 更新为当前的学生模型参数 θ,然后继续进行新一轮的自我蒸馏。如图5所示,这种“教师同步”能带来额外的性能提升(约3%),形成一个自我加强的循环。

实现流程

  1. 使用 θ_SRT 作为教师,训练学生 θ 一个epoch。
  2. 将教师参数更新为 θθ_SRT = θ.clone().detach()
  3. 用新的教师继续训练学生(可以重置优化器状态,使用更小的学习率)。
  4. 重复步骤2-3数次。

这个过程类似于“Born-again Networks”,但完全在自我监督的框架内进行。它表明,一旦模型通过SRT获得了初步的自我修订能力,它就可以通过这种自我蒸馏循环不断进化,所需的外部信号仅仅是最初的二元奖励。

4. 效果验证、对比分析与避坑指南

4.1 性能对比与核心优势

在数学(AIME, MATH, AMOBench)和代码(Codeforces, LiveCodeBench)基准测试上,SD-ZERO相比基线方法展现出了显著优势:

方法 所需监督信号 训练样本效率 推理效率(响应长度) 平均性能增益(vs. Base)
SFT 高质量解题过程(强教师) 低(需外部数据) 中等 轻微提升或下降
RFT 自身正确样本(过滤后) 中(需大量采样以获足够正例) 中等(~5%)
GRPO 二元奖励(稀疏) 低(需每组问题采样多个响应) 中等(~5-7%)
SDFT 高质量解题过程(作为教师) 中等 中等(依赖教师质量)
SRT (Phase1) 二元奖励 + 自身修订轨迹 (显式修订) 高(~8-9%)
SD-ZERO 仅二元奖励 (内部化) 最高(~10-11%)

SD-ZERO的核心优势总结

  1. 无需外部教师或高质量数据:仅依赖模型自身的生成和简单的对错判断,极大降低了数据获取门槛。
  2. 样本效率高:自我蒸馏阶段每个问题只需采样一个响应,相比需要采样多个响应进行对比的RL方法(如GRPO)更高效。
  3. 推理效率高:最终模型内化了修订过程,直接生成简洁、正确的答案,响应长度显著缩短。
  4. 性能提升显著:在多个基准测试上实现了约10%的绝对精度提升,超越所有基线方法。

4.2 常见问题与排查技巧

在复现和应用SD-ZERO的过程中,我遇到了不少坑,这里总结出来供大家参考。

问题1:SRT阶段收集不到足够多的有效修订轨迹。

  • 现象:模型修订成功率很低,大部分 y_revised 仍然是错误的,导致 D_REVISION 数据集很小。
  • 可能原因与解决
    • 基础模型修订能力太弱:如果基础模型完全不具备自我批判和修正的能力,SRT将无从学起。解决方案:可以先在少量人工构建的“问题-错误答案-修订答案”三元组上进行少量监督微调(SFT),给模型注入初步的修订概念。
    • 提示词 P_r 设计不佳:过于模糊的指令可能无法激发模型的修订行为。解决方案:可以尝试更具体、更强烈的指令,例如对于错误答案:“上述解答中存在一个关键错误。请仔细检查每一步,找出错误所在,然后给出一个完全正确且清晰的解答。” 并进行A/B测试。
    • 采样温度过低:在生成 y_revised 时,如果温度设为0(贪婪解码),模型可能陷入局部最优,无法跳出原有错误思维。解决方案:适当提高温度(如0.8-1.0),增加修订生成的多样性。

问题2:自我蒸馏阶段训练不稳定,损失震荡或模型性能下降。

  • 现象:KL散度损失剧烈波动,或者模型在蒸馏后生成质量反而变差。
  • 可能原因与解决
    • 教师与学生分布差异过大:如果SRT模型训练不充分,其修订分布本身就不稳定或质量不高,用它来指导学生会导致误导。解决方案:确保SRT阶段训练充分,并在蒸馏前评估教师模型在验证集上的修订成功率。
    • 学习率过高:蒸馏是一个精细的分布对齐过程,过高的学习率会破坏学生模型已有的知识。解决方案:使用更小的学习率(如1e-6到5e-6),并配合学习率预热(warmup)。
    • 序列对齐错误:这是代码实现中最常见的Bug。如果教师和学生在时间步上没有正确对齐,学生学到的就是混乱的信号。解决方案:在训练初期,打印出前几个批次中,教师和学生对于相同前缀的下一个词元的Top-5预测,进行人工比对,确保两者是相关的。
    • 灾难性遗忘:学生模型在匹配教师修订分布时,可能忘记了如何独立生成答案。解决方案:可以在蒸馏损失中混合一部分传统的语言建模损失(即让模型同时学习预测自身的原始生成),但这需要谨慎调整混合权重。

问题3:最终SD-ZERO模型仍然存在显式修订语言。

  • 现象:模型在推理时,还是会输出“I think I made a mistake...”之类的话。
  • 可能原因与解决
    • 蒸馏不充分:自我蒸馏的训练步数或数据量可能不足,未能完全将显式行为内化。解决方案:增加第二阶段训练的数据量或epoch数。
    • SRT阶段数据过拟合:如果SRT数据中显式修订的模式过于强烈,模型可能形成了很强的条件反射。解决方案:在构建 D_REVISION 时,可以尝试对 y_revised 进行后处理,删除或简化那些过于模板化的修订开头语句(如“Wait, ...”),迫使模型学习更本质的修订逻辑。

问题4:迭代自我进化效果不显著甚至倒退。

  • 现象:进行教师同步后,后续几轮训练的性能提升微乎其微,或者开始下降。
  • 可能原因与解决
    • 模型坍塌:在多次自我循环中,模型的输出分布可能逐渐变得单一、保守,失去了多样性。解决方案:在蒸馏时,对教师模型的输出分布应用较高的温度(τ > 1),以保留更多可能性,防止学生过度拟合到教师当前的特定模式。
    • 错误累积:如果教师模型本身在某些问题上给出了错误的修订指导,学生学会后,在下一轮成为教师时会放大这个错误。解决方案:定期在保留的验证集上评估教师模型的修订质量。可以考虑只同步那些在验证集上性能有提升的检查点,或者以指数移动平均(EMA)的方式更新教师参数,而不是完全替换。

4.3 拓展思考与应用场景

SD-ZERO的范式并不局限于数学和代码推理。任何能够提供二元奖励(是/否,好/坏)的序列生成任务,理论上都可以尝试套用此框架。

  • 事实核查与修正:模型生成一个陈述,奖励信号是该陈述是否与知识库一致。模型可以学习如何将错误的陈述修订为正确的。
  • 风格迁移与润色:奖励信号是文本是否符合目标风格(如正式/非正式)。模型可以学习如何将不符合风格的文本修订成符合的。
  • 安全对齐:奖励信号是输出是否安全/无害。模型可以学习如何将有害的回复修订为无害的。

然而,将SD-ZERO应用到非确定性奖励稀疏且复杂的领域(如开放域对话、创意写作)仍然是一个挑战。核心难点在于二元奖励的定义和获取。在这些领域,或许需要结合更复杂的奖励模型(RM)或基于人类反馈的强化学习(RLHF)来提供更细粒度的信号,而SD-ZERO可以作为一个强大的“内部消化”模块,将稀疏的RM分数或偏好反馈转化为密集的、词元级的自我改进信号。

从我个人的实践来看,SD-ZERO代表了一种更接近人类学习方式的模型训练思路:通过反思错误来进步。它不需要一个全知全能的“名师”手把手教导,只需要一个能指出对错的“考官”,模型就能自己摸索出更优的解法。这种利用模型自身能力进行自我迭代进化的方向,无疑是降低LLM训练成本、提升其自主性的一个极具潜力的路径。

LLM论文日更】| 分而治之?你应该从哪一部分蒸馏你的LLM
本文围绕大规模语言模型(LLMs)中复杂推理任务的分解与解决展开研究。提出将推理任务分为问题分解和解决两阶段,从大型LLM蒸馏出问题分解能力。通过在多个数据集实验,验证了蒸馏后的分解器能降低推理成本,且分解能力泛化性强,还分析了论文优缺点及未来研究方向。
OptimaAI
1098
【AI】知识蒸馏-简单易懂版
本文介绍了知识蒸馏这一模型压缩方法,采用“教师 - 学生”模式,小模型模仿大模型。阐述了Softmax引入温度参数T的原因,以平滑概率分布助学生模型学习。还介绍了蒸馏过程及损失函数,指出LLM蒸馏损失函数用KL散度,因其比交叉熵更适合。
天然玩家
1332
Agent也能蒸馏了!性能超好
大模型运行成本高,小模型存在学不会、记不住、算不准的痛点。论文提出Agent蒸馏方法,让小模型学会用检索和代码工具,还采用首思前缀和自我纠错方法辅助学习。结果显示,经Agent蒸馏的小模型性能直逼大模型,未来低成本Agent时代可期。
AI大模型学习不迷路
995
揭秘DeepSeek的「瘦身魔法」如何用模型蒸馏实现高效推理?
DeepSeek团队通过模型蒸馏技术,将大型语言模型的知识转移到小型模型中,显著提升了推理速度并降低了显存占用。文章详细介绍了DeepSeek的蒸馏架构设计、实战代码、参数共享的陷阱以及生产环境优化技巧,并展示了在生产环境中实现的高性能成果。
Leaton Lee
1267
【干货】解密LLM稀疏UNCOMP框架如何实现60倍加速与4.74%内存压缩!
本文提出UNCOMP框架,通过截断矩阵熵理论揭示LLM深层稀疏性机制,指导隐藏状态与KV Cache的联合压缩。实现实测预填充阶段60倍加速,KV Cache压缩至4.74%,同时保持模型性能稳定,为大模型推理优化提供新的理论与实践路径。
AI Agent 0.0
614
SD-RPN蒸馏区域提议网络在多模态大模型中的应用
SD-RPN是一种面向多模态大模型(MLLM)的自蒸馏区域提议网络,通过教师-学生双路架构(EMA更新教师分支+轻量学生分支)、多任务损失(提议质量、特征一致性、多样性正则)及弱/强数据增强协同,在仅用图像级弱监督下显著提升novel类别检测AP(+12.7%),降低标注成本80%。支持与LLM高效协同、内存优化部署,并已在COCO/LVIS/电商等场景验证有效性。
weixin_30644369
344
香港大学开源革命性AI Agent框架AutoAgent,全自动且高度自我进化
AutoAgent是全自动且高度自我进化的框架,用户用自然语言就能创建并部署LLM Agent。它有多项核心特性,如GAIA基准测试冠军、内置自管理向量数据库等。还介绍了使用方法,包括用户模式、Agent编辑器等。此外,分享了大模型和AI产品经理的学习资料。
程序员辣条
1232
大模型知识蒸馏技术(2)——蒸馏技术发展简史
本文介绍大模型知识蒸馏技术发展历程。2006年,Geoffrey Hinton等人在模型压缩领域开展开创性研究,探索模型压缩、应用软标签,验证了压缩效果。2015年,Hinton等人正式提出知识蒸馏概念,引入软标签和温度参数,通过实验验证其有效性,为后续研究提供方向。
谷哥的小弟
2368
AI模型压缩加速全攻略量化、剪枝、蒸馏三大核心技术详解!
本文详细介绍AI模型压缩与加速的三大核心技术量化、剪枝和知识蒸馏。量化通过降低参数精度减少存储与计算开销;剪枝去除冗余结构以减少参数量;知识蒸馏则利用大模型指导小模型训练。工业部署中常采用‘剪枝+量化+蒸馏’组合策略,并结合推理引擎优化,实现高效推理。
AI大模型学习不迷路
968
本周大模型新动向渐进渲染蒸馏技术突破,联邦智能新进展!
本周大模型领域有多项新进展。提出Fwd2Bot压缩方法优化LVLM视觉标记;PRD训练方案让SD模型适应文本到网格生成;解决长视频理解难题;分析R1 - Zero类训练并提出改进;还有社交导航架构、增强LRMs事实性的ReaRAG及联邦智能技术等。
AITIME论道
1109
什么是数据蒸馏和知识蒸馏,一篇文章让你搞明白!
本文介绍了数据蒸馏和知识蒸馏。数据蒸馏关注数据处理优化,从原始数据中提取有代表性子集;知识蒸馏是模型压缩和知识迁移方法,将教师模型知识转移到学生模型。此外,还分享了AI大模型学习资料及学习阶段,掌握相关技能可应对实际项目需求。
DeepSeek-R2
835
大模型知识传承秘籍收藏这篇小白也能看懂的知识蒸馏入门指南
本文系统介绍大模型知识蒸馏核心技术,涵盖预训练与训后两大传授时机,重点剖析软标签蒸馏(保留推理过程但数据量大)、硬标签蒸馏高效简洁但易致幻觉)及共蒸馏(师生协同优化)三种主流范式,并指出其在模型轻量化、性能迁移与产业落地中的关键作用。
AI大模型入门学习教程
315
Jetson Orin NX 16GB LLM部署,量化及蒸馏完整技术指南
本文介绍在Jetson Orin NX 16GB上部署LLaMA 3.2 3B-Instruct模型的全流程,涵盖硬件配置、系统优化、模型量化、知识蒸馏及多种部署方案对比,重点针对边缘计算场景下的性能与资源平衡进行技术解析。
Robot侠
1680
DeepSeek R1技术报告总结
本文围绕 DeepSeek-R1 系列模型展开,该模型基于纯强化学习提升大语言模型推理能力。包含 DeepSeek-R1-Zero 和 DeepSeek-R1 两个版本,前者纯强化学习驱动自进化,后者结合冷启动与多阶段优化。还介绍了蒸馏模型效率突破,也提及过程奖励模型和蒙特卡洛树搜索的失败尝试,并给出相关启示。
SmallerFL
2101
LLM - 推理大语言模型 DeepSeek-R1 论文简读
本文对DeepSeek-R1论文进行简读。该模型通过强化学习显著提升大语言模型推理能力,采用特殊训练策略,如冷启动数据微调、多阶段强化学习等。还介绍了其框架、开发流程、蒸馏应用,以及训练时采用的基于规则的奖励系统。
ManonLegrand
1046
SpecFormer基于位置无关参数的推测解码新架构,提升LLM推理效率
SpecFormer是一种基于双向注意力与位置无关参数的推测解码架构,专为提升大语言模型推理效率而设计。该架构通过上下文因果注意力和草稿双向注意力机制,结合分组RMS归一化、自蒸馏训练及批内梯度累积策略,在大批量场景下实现高效稳定的加速,尤其在小规模模型上表现突出,显著提升了LLM推理的可扩展性。
大模型学习路线
1201
突然发现图解深度学习、数据蒸馏和知识蒸馏,真的好清晰!
博客介绍了深度学习中的数据蒸馏和知识蒸馏。数据蒸馏关注数据处理优化,从原始数据中提取更具代表性子集;知识蒸馏是模型压缩和知识迁移方法,将大型教师模型知识转移到小型学生模型。还分享了大模型和AI产品经理的学习资料,包括路线图、视频教程等。
AI大模型-大飞
680
复旦:LLM无监督对话查询重写
文章介绍了名为ConvSearch - R1的自驱动框架,用于会话查询重组(CQR)。该框架利用强化学习,通过检索信号优化重写,消除了对外部监督的依赖。采用两阶段方法,结合自驱动策略预热和检索引导的强化学习。实验表明,它在多个数据集上显著优于现有方法,降低了数据获取成本。
大模型任我行
1079
DeepSeek最新论文原生稀疏注意力
DeepSeek团队发布新论文介绍原生稀疏注意力机制NSA。长文本建模中传统注意力机制计算复杂度高,NSA通过算法创新、硬件对齐优化和端到端训练,在处理长文本时更高效。实验证明其性能与效率双赢,还给出AI大模型学习路线等资源。
智泊AI大模型课程
1383
AIGC模型的量化和稀疏优化 Empower Risk RCA with LLM.pdf
通过LLM模型优化和推理优化,可以有效地减少计算量和稀疏并行化,以及存储密集型的优化。
每天读点书学堂
全球机器学习技术大会-刘松伟-AIGC模型的量化和稀疏优化
LLM模型优化和推理优化方面,通过算量、稀疏化、缓存优化、存储优化、计算优化等多维度措施来提升效率。而在SD模型优化方面,则更侧重于计算密集型优化策略。
qq_34043145
7