混合专家 (Mixture of experts) 是一种在神经网络领域发展起来的集成学习技术。
它涉及将预测建模任务分解为子任务,为每个子任务训练一个专家模型,开发一个门控模型,该模型根据要预测的输入学习信任哪个专家,然后组合预测结果。
尽管该技术最初是使用神经网络专家和门控模型来描述的,但它可以推广到使用任何类型的模型。因此,它与堆叠泛化 (stacked generalization) 表现出很强的相似性,属于被称为元学习 (meta-learning) 的集成学习方法类别。
在本教程中,您将了解混合专家方法在集成学习中的应用。
完成本教程后,您将了解:
- 集成学习的一种直观方法是将任务划分为子任务,并为每个子任务开发一个专家。
- 混合专家是一种集成学习方法,它寻求通过专家模型来明确地解决预测建模问题中的子任务。
- “分而治之”的方法与决策树的构建有关,而元学习器方法与堆叠泛化集成方法有关。
通过我的新书 《Python集成学习算法》 开启您的项目,其中包含分步教程和所有示例的Python源代码文件。
让我们开始吧。

专家混合集成简介
照片作者:Radek Kucharski,保留部分权利。
教程概述
本教程分为三个部分;它们是:
- 子任务与专家
- 混合专家
- 子任务
- 专家模型
- 门控模型
- 汇聚方法
- 与其他技术的关系
- 混合专家与决策树
- 混合专家与堆叠
子任务与专家
有些预测建模任务非常复杂,尽管它们可能适合自然地划分为子任务。
例如,考虑一个一维函数,它具有像二维中的S形状一样复杂的形状。我们可以尝试设计一个能够完全模拟该函数的模型,但如果我们知道函数的形式,即S形,我们也可以将问题分为三个部分:顶部曲线、底部曲线以及连接这两条曲线的线。
这是一种解决问题的分而治之方法,也是许多自动化预测建模方法以及更广泛的问题解决的基础。
这种方法也可以作为开发集成学习方法的基础进行探索。
例如,我们可以根据问题的领域知识将输入特征空间划分为子空间。然后,可以为每个子空间训练一个模型,该模型实际上是特定子问题的专家。然后,模型会学习在未来预测新样本时应该调用哪个专家。
子问题可能重叠,也可能不重叠,来自相似或相关子问题的专家可能能够为技术上超出其专业知识的样本做出贡献。
这种集成学习方法是混合专家技术的基础。
混合专家
混合专家(Mixture of Experts,简称MoE或ME)是一种集成学习技术,它实现了在预测建模问题的子任务上训练专家的思想。
在神经网络社区中,许多研究人员研究了分解方法。 […] 混合专家(ME)方法分解输入空间,使每个专家处理空间的不同部分。 […] 门控网络负责组合各个专家。
— 第73页,《使用集成方法进行模式分类》,2010年。
该方法有四个要素:
- 将任务划分为子任务。
- 为每个子任务开发一个专家。
- 使用门控模型来决定使用哪个专家。
- 汇聚预测和门控模型输出以进行预测。
下图取自2012年出版的《集成方法》第94页,有助于概述该方法的基本组成部分。

混合专家模型示例,包含专家成员和门控网络
来源:《集成方法》
子任务
第一步是将预测建模问题划分为子任务。这通常需要利用领域知识。例如,可以将图像划分为独立的元素,如背景、前景、对象、颜色、线条等。
… ME采用分而治之的策略,将复杂任务分解为几个更简单、更小的子任务,并为不同的子任务训练个体学习器(称为专家)。
— 第94页,《集成方法》,2012年。
对于那些任务的子任务划分不明显的问题,可以使用更简单、更通用的方法。例如,可以设想一种方法,按列组划分输入特征空间,或根据距离度量、内点和离群值来分离特征空间中的样本,以及更多。
… 在ME中,一个关键问题是如何找到任务的自然划分,然后从子解决方案中导出整体解决方案。
— 第94页,《集成方法》,2012年。
专家模型
接下来,为每个子任务设计一个专家。
混合专家方法最初是在人工智能神经网络领域开发和探索的,因此传统上,专家本身是用于预测数值(回归)或类别标签(分类)的神经网络模型。
应该清楚的是,我们可以为专家“插入”任何模型。例如,我们可以使用神经网络来表示门控函数和专家。其结果被称为混合密度网络。
— 第344页,《机器学习:概率视角》,2012年。
每个专家接收相同的输入模式(行)并做出预测。
门控模型
一个模型用于解释每个专家做出的预测,并帮助决定给定输入应该信任哪个专家。这被称为门控模型,或门控网络,因为传统上它是一个神经网络模型。
门控网络以提供给专家模型的输入模式作为输入,并输出每个专家在为该输入做出预测时应贡献的比例。
… 门控网络确定的权重是根据给定输入动态分配的,因为MoE有效地学习了特征空间的哪个部分由每个集成成员学习。
— 第16页,《集成机器学习》,2012年。
门控网络是该方法的核心,它有效地让模型学会为给定输入选择子任务的类型,并进而信任哪个专家来做出强有力的预测。
混合专家也可以被看作是一种分类器选择算法,其中个体分类器被训练成在特征空间的某个部分成为专家。
— 第16页,《集成机器学习》,2012年。
当使用神经网络模型时,门控网络和专家一起进行训练,以便门控网络学会何时信任每个专家进行预测。这种训练过程传统上使用期望最大化 (EM)算法实现。门控网络可能有softmax输出,为每个专家提供类似概率的置信度分数。
总的来说,训练过程试图达到两个目标:对于给定的专家,找到最优的门控函数;对于给定的门控函数,在门控函数指定的分布上训练专家。
— 第95页,《集成方法》,2012年。
汇聚方法
最后,混合专家模型必须做出预测,这通过汇聚或聚合机制来实现。这可能很简单,就是选择门控网络提供的最大输出或置信度的专家。
或者,可以做出加权求和预测,明确地结合每个专家做出的预测以及门控网络估计的置信度。您可以想象其他利用预测和门控网络输出来进行有效的方法。
汇聚/组合系统然后可以选择具有最高权重的单个分类器,或者计算每个类别的分类器输出的加权总和,并选择获得最高加权总和的类别。
— 第16页,《集成机器学习》,2012年。
想开始学习集成学习吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
与其他技术的关系
混合专家方法如今不太受欢迎,也许是因为它是在神经网络领域描述的。
尽管如此,该技术已经经历了25年以上的进步和探索,您可以在2012年的论文“混合专家二十年”中找到一个很好的总结。
重要的是,我建议考虑该技术的广泛意图,并探索如何在您自己的预测建模问题中使用它。
例如
- 您能否以明显或系统的方式将预测建模问题划分为子任务?
- 您能否为每个子任务训练专门的方法?
- 考虑开发一个模型来预测每个专家模型的置信度。
混合专家与决策树
我们还可以看到混合专家与分类和回归树(CART)之间存在关联。
决策树的拟合使用分而治之的方法来处理特征空间。每个分裂选择为输入特征的恒定值,每个子树可以被视为一个子模型。
混合专家主要在神经网络社区中进行了研究。在这个领域,研究人员通常采用分而治之的策略,尝试联合学习参数化模型混合,并使用组合规则获得整体解决方案。
— 第16页,《集成方法》,2012年。
在设计混合专家时,我们可以采用类似的递归分解方法将预测建模任务分解为子问题。这通常被称为层次化混合专家。
层次化混合专家(HME)过程可以看作是基于树的方法的一种变体。主要区别在于树分裂不是硬性决策,而是软性概率性决策。
— 第329页,《统计学习要素》,2016年。
与决策树不同,任务的划分通常是显式的和自顶向下的。此外,与决策树不同,混合专家试图考察所有专家子模型,而不是单个模型。
HME与CART实现树之间存在其他差异。在HME中,每个终端节点拟合的是线性(或逻辑回归)模型,而不是CART中的常量。分裂可以是多向的,不仅仅是二元的,并且分裂是输入线性组合的概率函数,而不是像CART标准用法那样是单个输入。
— 第329页,《统计学习要素》,2016年。
尽管如此,这些差异可能会启发在特定预测建模问题上的方法变体。
例如
- 考虑自动化或通用方法来划分特征空间或问题为子任务,以帮助拓宽该方法的适用性。
- 考虑探索那些信任最佳专家的组合方法,以及那些寻求跨专家加权共识的方法。
混合专家与堆叠
该技术不一定局限于神经网络模型,可以使用一系列标准的机器学习技术来替代,以达到类似的目的。
这样,混合专家方法属于一类更广泛的集成学习方法,其中还包括堆叠泛化,也称为堆叠 (stacking)。与混合专家类似,堆叠训练各种机器学习模型,然后学习一个更高阶的模型来最好地组合预测。
我们可以将这类集成学习方法称为元学习模型。也就是说,模型试图从其他低级模型的输出中学习或学习如何最好地组合这些输出。
元学习是从学习者(分类器)那里学习的过程。 […] 为了诱导元分类器,首先训练基分类器(第一阶段),然后训练元分类器(第二阶段)。
— 第 82 页,《使用集成方法进行模式分类》,2010 年。
与混合专家不同,堆叠模型通常都在同一训练数据集上拟合,例如,没有将任务分解为子任务。而且,与混合专家不同的是,组合低级模型预测的高级模型通常不接收提供给低级模型的输入模式,而是将每个低级模型的预测作为输入。
元学习方法最适合于某些分类器一致地正确分类,或一致地错误分类某些实例的情况。
— 第 82 页,《使用集成方法进行模式分类》,2010 年。
尽管如此,没有理由不能开发混合堆叠和混合专家模型,它们在给定预测建模问题上可能比单独使用任何一种方法表现更好。
例如
- 考虑将堆叠中的低级模型视为在训练数据的不同视角上进行训练的专家。也许这可以涉及使用一种更软性的方法来将问题分解为子问题,其中每个模型使用不同的数据转换或特征选择方法。
- 考虑将输入模式提供给堆叠中的元模型,以使低级模型的权重或贡献条件化于预测的具体上下文。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
论文
- 混合专家二十年, 2012.
书籍
- 使用集成方法进行模式分类, 2010.
- 集成方法, 2012.
- 集成机器学习, 2012.
- 数据挖掘中的集成方法, 2010.
- 统计学习基础, 2016.
- 机器学习:概率视角, 2012.
- 《用于模式识别的神经网络》, 1995.
- 深度学习, 2016.
文章
总结
在本教程中,您了解了混合专家方法在集成学习中的应用。
具体来说,你学到了:
- 集成学习的一种直观方法是将任务划分为子任务,并为每个子任务开发一个专家。
- 混合专家是一种集成学习方法,它寻求通过专家模型来明确地解决预测建模问题中的子任务。
- “分而治之”的方法与决策树的构建有关,而元学习器方法与堆叠泛化集成方法有关。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
首先,感谢Jason的文章,非常有帮助!是对实现混合专家主要概念的一个很好的总结。
我正试图将这项技术应用于一个在特征空间中有4个区分簇的问题。我的训练集存储了昂贵模型的150个模拟,我的想法是用本地专家为每个簇处理问题,以改进新的预测。然而,在用梯度提升(分类器)作为门控模型,以及用梯度提升(回归器)作为本地专家实现该方法后,我发现门控模型对于良好的最终预测至关重要,因为它决定使用哪个专家。我这里的问题是,门控模型需要被完美拟合,否则它会把错误传播给专家模型。您对改进门控模型有什么想法吗?我查阅了您关于梯度提升调优参数等的教程(非常棒且信息丰富!)。先谢谢您,此致,Marc
不客气。
恭喜您的进展!抱歉,我没有实现过该方法,我无法提供好的即时建议。
非常感谢您的时间,您在做非常宝贵的科学和技术传播工作。再次感谢!
感谢您的支持!
你好Jason。感谢您提供的好内容。我想在某种无监督问题中应用MoE,即异常检测,我希望使用不同的专家来更好地在视频中找到异常。我的数据集名为ucsd。我该如何训练我的门控模型?有什么想法吗?
目前没有,它是一种监督方法。
非常感谢您这篇精彩的文章。我只是想知道是否有任何MoE的示例代码可供参考。
目前我没有示例。
感谢您的好内容,我希望将来能有关于MOE模型用于分类或回归问题(例如使用时间序列数据与LSTM和MOE)的示例代码。我将继续关注您的内容,谢谢。
感谢您的建议!
这个引用
总的来说,训练过程试图达到两个目标:对于给定的专家,找到最优的门控函数;对于给定的门控函数,在门控函数指定的分布上训练专家。
并非来自“第95页,《集成机器学习》,2012年”,而是来自“集成方法:基础与算法”的第95页。
感谢指出。现已更正。