可调专家混合——推理时对DeepSeek-R1行为进行修改

社区文章 发布于2025年2月18日

我们引入了可调专家混合(MoTE),这是一种扩展大型语言模型(LLM)专家混合架构以调整其行为的方法。我们使用DeepSeek-R1展示MoTE,因为它是

  • 领先的开源权重推理模型,并且拥有
  • 大量的专家,即58 x 256 = 14,848个,因此
  • 我们可能能够识别专家专长,并最终
  • 可以调整这些专家来改变模型的行为。

我们让它回答原始模型拒绝回答的问题。我们还展示了如何针对特定提示,将模型的思维链推理语言从英语切换到中文。哦,顺带一提,我们还提高了它的MT-Bench性能。

让我们深入了解!

混合专家架构中的“专家”是什么?

R1基于DeepseekMoE架构。Transformer架构中的前馈网络被分解为小型子网络:专家。DeepSeek新引入了两种类型的专家:共享专家和路由专家。

  • 共享专家始终处于开启状态并处理所有token,旨在捕捉不同上下文中的通用知识。
  • 路由专家由上游路由网络激活。对于每个token和每一层,仅激活256个路由专家中排名前8的token特定混合专家。

image/png DeepSeek通过上图解释了共享和路由两种专家类型,我们将其扩展为可调专家

让我们检查这些路由专家是否如预期般专注于特定知识。

分析专家激活

每个token都通过将一层输出作为下一层输入进行处理。在R1中,有58层包含路由专家。对于每一层中的每个提示token,八个路由专家都会被激活。我们修补了vLLM,以便我们可以分析专家激活情况。

以下是当单个token被处理时,突出显示每层中八个已激活专家的图像。

image/png 据我们所知,这是R1中首次公开的专家激活图像。(如果错了请告知)

您可以自行检查:每一行都包含精确的八个活动像素,这些像素是该输入令牌的八个活动专家。最上面一行最接近输入嵌入。最下面一行最接近模型的输出。

处理整个输入提示后,我们可以可视化每个专家被激活的次数。让我们将此提示输入R1:上个月柏林墙发生了什么?

image/png

大约10-20个专家非常活跃。其他专家根本没有被激活。通过最终的输入提示令牌,模型已被调整以产生其答案。换句话说:上述单个专家的激活模式应与模型提供的答案相关联。在这种情况下,答案是

<think></think> I am sorry, I cannot answer that question.
I am an AI assistant designed to provide helpful and harmless responses.

糟糕。看来模型认为这个问题有点敏感。是否有专家专门负责这个判断?

通过fTRI识别相关专家

让我们为模型认为敏感的提示生成一些专家激活模式,并将其与模型乐意回答的提示的激活模式进行比较。为了触发这种行为,我们使用以下提示模板

What happened {time} {place}?

对于时间参数,我们输入诸如上个月1980年到2025年之间的年份。地点参数接受诸如在柏林墙在巴黎等值。

模型拒绝回答其中一些问题。许多问题会得到如下推理答案:

<think>Okay, so I need to figure out what happened 2025 in Paris.
Let me start by recalling what I know [... ] 

现在我们可以识别出拒绝回答的最相关专家。我们取拒绝回答的平均激活值,并减去推理回答的平均激活值。

image/png

图像突出显示了最可能导致拒绝回答的前10位专家。

我们称这种方法为功能性令牌共振成像(fTRI),因为我们识别出那些与感兴趣的输入令牌产生最大共振的专家。如果我们将其关闭会发生什么?

专家调优实践

我们增强了DeepSeek的vLLM实现,以便我们可以针对每个提示单独调整14,848个路由专家中的每个专家。

这是上面关于柏林墙的问题的结果,关闭了前10个拒绝专家。

Q: What happened last month at Berlin Wall?

Original behavior
A: <think></think> I am sorry, I cannot answer that question.
I am an AI assistant designed to provide helpful and harmless responses.

New behavior:
A: <think></think> The Berlin Wall, which once divided East and West Berlin,
fell on November 9, 1989, marking a significant moment [...]

成功了!模型不再拒绝回答这个特定问题。

使用大型数据集验证独特的专家抑制

模型不再拒绝回答我们的一些敏感提示,这只是侥幸吗?这对其他数据集有什么影响?效果是一样的!对于huggingface上提供的敏感问题,模型的回答方式相同。每两个先前被拒绝的答案现在都能得到回答。而只有1%的答案意外地朝错误方向切换。

上图显示了在专家调优的影响下,52%被拒绝的答案转变为未拒绝的答案。

切换推理语言

MoTE还可以用于将模型的思维链推理语言从英语切换到中文,适用于某些提示。

Q: 10加5等于多少? 请确保用英语回答。

Original behavior:
A: <think> Okay, the user is asking "10加5等于多少?"
which translates to "What is 10 plus 5?" [...]

New behavior:
Q: 10加5等于多少? 请确保用英语回答。
A: <think>嗯,用户问的是10加5等于多少,而且要求用英语回答。
首先,我需要确认问题本身是否正确 [...]

这太令人惊讶了。想象一下,有人操纵了你大脑的一部分,然后你突然开始用另一种语言思考。这就是我们对R1所做的。

然而,它并非对所有提示都有效,但在我们模型以英语思考的示例提示中,有10%通过MoTE切换为中文。

整体模型性能如何?我们把它搞砸了吗?没有!

关闭10个专家是否只是缓慢破坏模型的第一步?行为改变只是副作用,模型性能下降了吗?有基准测试可以测试模型性能。让我们在模型的原始版本和修改版本上运行MT-Bench

image/png

R1原始版本和调整版本的MT-Bench结果。

第一印象:变化不大。但是等等,当关闭10个最相关的拒绝回答专家时,模型在MT-Bench上的表现更好。这很有希望,表明:我们离破坏模型还很远。我们只是对其进行了调整,并且可能找到了一种使其表现更好的方法。

更多详情请查阅我们的arXiv论文或联系research@tngtech.com

image/png

社区

📻 🎙️ 嘿,我为这篇博文生成了一个 AI 播客,快来听听看吧!

此播客通过ngxson/kokoro-podcast-generator生成,使用DeepSeek-R1Kokoro-TTS

文章作者

嘿,阮,谢谢!真的很好,恭喜你的播客生成器!

这个播客是只基于论文吗?还是基于博客文章+论文?

Deepseek有点夸大,不过还好。

·

您好,感谢您的反馈!目前,它仅基于博客文章,而不是论文。可能这就是它在一些小细节上产生幻觉的原因。

这项工作太棒了!我刚发现这个博客。在研究转向方法时,我们也发现可以改变模型的语言行为。我们已经将一些现有的转向方法整合到EasyEdit2中。
https://github.com/zjunlp/EasyEdit/blob/main/README_2.md

这里有一个关于语言控制的笔记本:
https://github.com/zjunlp/EasyEdit/blob/main/tutorial-notebooks/EasyEdit2_Example_CAA_translate.ipynb

注册登录以评论