Re Reference AI

アーキテクチャ

MoEとは

Mixture of Experts / 専門家混合

入力ごとに一部の専門家サブネットワークだけを選択的に使う、スパースなニューラルネットワークアーキテクチャ

深層学習スパースモデル

ひとことで言うと

質問の内容に応じて、モデル内の一部の得意な部分だけを使う仕組み。

概要

MoE(Mixture of Experts, 専門家混合)とは、単一の大きなフィードフォワード層の代わりに複数の「専門家(expert)」と呼ばれるサブネットワークを用意し、入力トークンごとにゲート機構(ルーター)がそのうち一部の専門家だけを選択して計算させるニューラルネットワークアーキテクチャ。 全パラメータのうち実際に計算に使われるのは一部の専門家のみであるため、モデル全体の総パラメータ数を増やして表現力を高めつつ、1トークンあたりの実際の計算量(有効パラメータ数)は抑えられる点が特徴。 GPT-4やMixtral、DeepSeek-V3等、近年の大規模モデルで採用が広がっている。 一方で全専門家をメモリ上に保持する必要があるためモデル全体のメモリ使用量は大きく、ルーターが特定の専門家に処理を偏らせすぎないよう学習を安定させる工夫も必要になる。

背景

モデルの性能はパラメータ数の増加とともに向上する傾向があるが、全パラメータを毎回の計算に使う密なモデルでは、パラメータ数の増加がそのまま計算コストの増加に直結する。 MoEは、専門家ごとに入力を振り分け一部だけを計算に使うことで、計算コストを抑えたまま総パラメータ数を増やせるアーキテクチャとして考案された。

歴史

1991年: Jacobsらが専門家混合の概念を提案。 2017年: Shazeerらが「Outrageously Large Neural Networks」でRNNベースモデルにMoE層を導入し大規模化を実証。 2021年: Googleが数千億パラメータ規模のSwitch Transformerを発表。 2023年: MistralがオープンウェイトのMoEモデルMixtral 8x7Bを公開しMoEの実用性を広く示す。 2024-2025年: DeepSeek-V3等、MoEを採用した高性能なオープンウェイトモデルが相次いで登場。

アーキテクチャ

Transformerの各層にあるフィードフォワード層を、複数の専門家ネットワークに置き換える。 各トークンが入力されると、ルーター(ゲーティングネットワーク)がそのトークンにどの専門家を使うかを確率的または上位 k 個選択方式で決定し、選ばれた専門家の出力のみを計算・統合して次の層へ渡す。

ワークフロー

トークンをルーターへ入力 → 各専門家に対するスコアを計算 → 上位 k 個(または確率的)の専門家を選択 → 選ばれた専門家のみで計算 → 出力を重み付け統合 → 次の層へ渡す。

コード例

PyTorchによる簡易的なMoE層の実装例

import torch
import torch.nn as nn

class MoELayer(nn.Module):
    def __init__(self, dim, num_experts=8, top_k=2):
        super().__init__()
        self.router = nn.Linear(dim, num_experts)
        self.experts = nn.ModuleList(
            [nn.Sequential(nn.Linear(dim, dim * 4), nn.GELU(), nn.Linear(dim * 4, dim)) for _ in range(num_experts)]
        )
        self.top_k = top_k

    def forward(self, x):
        scores = self.router(x)
        weights, indices = torch.topk(scores.softmax(dim=-1), self.top_k, dim=-1)
        output = torch.zeros_like(x)
        for i in range(self.top_k):
            expert_idx = indices[..., i]
            for e, expert in enumerate(self.experts):
                mask = expert_idx == e
                if mask.any():
                    output[mask] += weights[..., i][mask].unsqueeze(-1) * expert(x[mask])
        return output

利点

  • 総パラメータ数を増やして表現力を高めつつ、1トークンあたりの計算量(有効パラメータ数)を抑えられる
  • 専門家ごとに異なるパターンやドメインを学習させる余地がある
  • 同程度の有効パラメータ数を持つ密なモデルと比べ、事前学習の効率が高いとされる

欠点

  • 全専門家をメモリ上に保持する必要があり、総メモリ使用量は密なモデルより大きくなる
  • 特定の専門家に入力が偏る「負荷の偏り」が起きやすく、学習を安定させる工夫(補助損失等)を要する
  • ルーティングの実装や分散学習・推論のインフラが密なモデルより複雑になる

比較

  • LLMMoEはLLMのフィードフォワード層に適用され、総パラメータ数と計算コストのトレードオフを改善するアーキテクチャ
  • TransformerMoEは、Transformerのフィードフォワード層を複数の専門家に置き換えたバリエーション
  • MistralMixtralはMoEアーキテクチャを採用した代表的なオープンウェイトモデル
  • DeepSeekDeepSeek-V3は、MoEアーキテクチャを大規模に活用した代表的なモデル
  • LlamaLlama 4では、MoEアーキテクチャが採用されている

関連用語

TransformerLLMMistralDeepSeekLlamaMixture-of-Depths

よくある質問

MoEモデルは通常のモデルよりメモリを使う?

全専門家をメモリ上に保持する必要があるため、総メモリ使用量は同等の計算コストを持つ密なモデルより大きくなる場合が多い。 一方、推論時の計算量(有効パラメータ数)は抑えられる。

有効パラメータ数とは?

総パラメータ数のうち、1回の推論で実際に計算に使われる専門家のパラメータ数を指す。 MoEモデルの計算コストは、総パラメータ数より有効パラメータ数に近い。

参考文献

関連する年表

Transformerの歴史

自己注意機構(Self-Attention)のみで構成されるTransformerアーキテクチャが2017年に登場して以降、自然言語処理から画像・音声まで広がっていった変遷をたどる。

アーキテクチャ7件のイベント / 2017 - 2023

関連Zenn記事