TL

Mixture-of-Depths(動的計算配分)

全トークンを全層に通すのは無駄――簡単なトークンは層を飛ばせばいい。ルータが層ごとに処理する少数トークンだけを選ぶ Mixture-of-Depths を押さえれば、計算量を固定したまま深さを稼ぐ設計が腑に落ちます。

応用MoDLLM動的計算配分条件付き計算ルーティング最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.MoD は各 Transformer ブロックにルータを置き、系列内でスコア上位の少数トークンだけを attention と MLP に通す。残りは残差接続で層をスキップし、トークンごとに実効的な深さを変えて計算を節約する。
  • 2.1ブロックが処理するトークン数を固定の容量(例:系列長の12.5%)に絞るため、総 FLOPs は入力に依らず静的に決まる。動的なのは「どのトークンを通すか」で、計算量そのものは事前に確定するのが要。
  • 3.MoE が FFN を横方向(どのエキスパートか)に疎化するのに対し、MoD は縦方向(この層を通すか否か)に疎化する。直交する軸なので両者は併用でき、MoDE として組み合わせられる。

なぜ「トークンごとに深さを変える」のか

標準的な Transformer は、すべてのトークンをすべての層に一律で通します。文の途中の「、」も、意味の要となる名詞も、まったく同じ回数だけ attention と MLP を潜るわけです。しかし直感的には、必要な計算量はトークンごとに違うはずです。冗長な機能語に深い層をフルに割くのは、計算予算の無駄遣いに見えます。

Mixture-of-Depths(MoD) は、この一律処理をやめる仕組みです。各ブロックに小さなルータを置き、そのブロックで実際に処理する少数のトークンだけを選抜します。選ばれなかったトークンは、層の計算を丸ごとスキップして残差接続だけで次へ流れます。結果として、トークンごとに「実際に通った層の数」=実効的な深さが変わります。これが「動的計算配分(dynamic compute allocation)」と呼ばれる所以です。

この記事のスコープ

MoD は条件付き計算(conditional computation)の一種で、スケーリング則 が示す「深く大きいほど強い」と「計算予算は有限」の綱引きを、深さ方向の疎性で解く試みです。近い発想の Mixture of Experts と対比しながら読むと、両者が疎化する「向き」の違いが際立ちます。

容量制約:総 FLOPs を静的に固定する

MoD の設計で最も重要なのは、1ブロックが処理できるトークン数に固定の上限(容量)を設ける点です。系列長を T、容量比を c(例 0.125)とすると、そのブロックが処理するのは上位 c × T 個のトークンだけと決め打ちします。

容量 C = c × T          # 例: c=0.125 なら系列の 12.5% のトークンだけ処理

そのブロックで:
  選抜された C 個   ──▶ [self-attention + MLP] を通る
  残りの T − C 個   ──▶ 残差接続だけで素通り(層をスキップ)

ここが MoD の肝です。容量 C は入力内容に依存しない固定値なので、モデル全体の総 FLOPs は系列長さえ決まれば静的に確定します。「動的」なのはあくまでどのトークンを通すかという中身であって、計算量そのものは事前に分かる。これにより計算グラフのサイズが一定になり、行列積の形も固定できるため、ハードウェア上で効率よく実行できます。

「動的な計算量」ではなく「動的な割り当て」

MoD をearly-exit(層の途中で打ち切る動的深さ)と混同しないでください。early-exit は入力ごとに実行される層数=計算量そのものが変わり、バッチ内でトークンごとに違う経路長になるため実装が難しい。MoD は容量を固定することで総計算量は据え置きのまま、その予算を賢く配分する方向に問題を変換しています。

ルータの動作:スカラースコアと Top-k 選抜

ルータの実体は、MoE のルータ と同じく小さな線形層1枚です。ただし出力が違います。MoE のルータが「どのエキスパートか」を選ぶために E 個のロジットを出すのに対し、MoD のルータは各トークンに対して**スカラー値1つ(ルータ重み)**を出すだけです。

r_t = x_t · w_router        # w_router は [隠れ次元 × 1]、トークン t のスカラースコア

このブロック内の全 T トークンについて r_t を並べ、
  top_idx = argtopk(r, C)   # 上位 C 個のトークン番号を選抜

選ばれた C 個のトークンは attention と MLP を通り、その出力にルータ重み r_t を掛けてから残差に加算します。

選ばれた t:   y_t = x_t + r_t · Block(x_t)      # r_t 経由で勾配が流れる
選ばれない t: y_t = x_t                          # ブロックは素通り

MoE と同じ論点がここにも現れます。「上位 C 個を選ぶ」argtopk は微分不可能な離散操作です。それでもルータが学習できるのは、選ばれたトークンの出力に掛かる r_t を経由して勾配が流れるからです。あるトークンをブロックに通すことが損失を下げるなら、その r_t を大きくする(=スコアを上げる)向きに w_router が更新されます。選抜は離散だが、選抜後の連続的な重み付けが学習信号になる――MoE と共通の設計思想です。

なぜ attention でスキップが効くのか

スキップされたトークンは、そのブロックでは Key/Value を提供しません。つまり選抜されたトークンは、同じく選抜された少数トークンの間だけで attention を張ります。計算量が C × C に縮むうえ、残差接続 がスキップ経路を担保するので、飛ばされたトークンの情報も後続の層で再び選抜されれば拾い直せます。トークンは層ごとに通ったり飛ばされたりを繰り返します。

因果性の問題:推論時にどう Top-k を作るか

Top-k 選抜には見落としやすい欠陥があります。上位 C 個を決めるには系列内の全トークンのスコアを見て順位付けする必要があるため、これは本質的に**非因果的(non-causal)**な操作です。学習時は系列全体が手元にあるので問題ありませんが、自己回帰生成では未来のトークンがまだ存在せず、あるトークンが上位に入るかを今の時点で判定できません。

原論文はこれを2通りで解決します。

方式やり方性質
補助損失各トークンが上位 C に入るか否かを、ルータ重みから二値予測する補助タスクを同時学習追加パラメータ不要/学習が少し複雑
補助予測器選抜判定だけを行う小さな予測器(第2のルータ)を別途置くパラメータ微増/本体の学習を乱しにくい

どちらも狙いは同じで、「系列全体を見ないと決まらない Top-k」を、各トークン単体で因果的に近似できるようにすることです。これで推論時も、過去だけを見てそのトークンをブロックに通すか判断できます。学習時の理想的な Top-k と、推論時の因果的な近似とのズレが MoD 固有の注意点になります。

Mixture-of-Experts との違い:疎化する「向き」

MoD と MoE は「疎な活性化で計算を節約する」点で似ていますが、疎にする軸が直交しています。ここを取り違えると設計を誤ります。

観点MoE(横方向の疎性)MoD(縦方向の疎性)
疎化する軸幅:FFN をどのエキスパートに送るか深さ:この層をそもそも通すか否か
全トークンの扱い全トークンが必ず層を通る(行き先が違うだけ)一部トークンは層を丸ごとスキップ
ルータ出力エキスパート数 E 個のロジットトークンごとにスカラー1個
容量の対象1エキスパートが受けるトークン数の上限1ブロックが処理するトークン数の上限
増える主コスト全エキスパート常駐のメモリ・通信因果ルーティングの近似ズレ

要点は、MoE では全トークンが必ずどこかの FFN を通る――疎なのは「どの重みを使うか」であって、層を飛ばすわけではない、ということです。対して MoD は層そのものをスキップします。MoE が「同じ計算量で容量(総パラメータ)を増やす」道具なのに対し、MoD は「同じ深さ・同じ品質を、より少ない計算量で実現する」道具、と役割が対照的です。

MoD × MoE = MoDE

軸が直交するので両者は併用できます。あるブロックについて「まず MoD で処理するトークンを選び、選ばれたトークンだけを MoE のエキスパートに振り分ける」構成が Mixture-of-Depths-and-Experts(MoDE) です。深さ方向と幅方向の疎性を同時に効かせ、計算予算をさらに切り詰めます。

実装上の勘所と効果

MoD ブロックは通常、全層ではなく1層おきに配置します。連続でスキップを許すと情報が伝わらなくなりうるため、密なブロックと MoD ブロックを交互に挟む構成が安定します。容量比 c は品質と計算量の直接のつまみで、小さくするほど FLOPs は減りますが、飛ばされるトークンが増えて品質が落ちるリスクが上がります。

効果の出方は独特です。MoD は同じ FLOPs 予算のもとで層数を増やせる(各層が一部トークンしか処理しないぶん、浮いた計算で深さを稼げる)ため、同一計算量で密モデルを上回る、あるいは同等品質を少ない FLOPs・速いステップで達成する、という形で効きます。とくに1回の前方計算の FLOPs を大きく削れるので、KV キャッシュと推論最適化 で扱う推論コストの観点でも利点があります。

押さえどころ
  • MoD は各ブロックにルータを置き、スコア上位の少数トークンだけを attention と MLP に通す。残りは残差でスキップし、トークンごとに実効的な深さを変える。
  • 1ブロックの処理トークン数を固定容量に絞るので、総 FLOPs は入力に依らず静的。動的なのは「どのトークンを通すか」であって計算量ではない。
  • ルータはトークンごとにスカラー1個を出し Top-k 選抜。argtopk は微分不可だが、選抜トークンに掛かる重み経由で勾配が流れて学習できる。
  • Top-k は非因果的なので、推論では補助損失か補助予測器で因果的に近似する。
  • MoE=幅方向(どのエキスパート、全トークンは層を通る)、MoD=深さ方向(層を通すか否か)。直交するので MoDE として併用可能。

まとめ:計算予算を「均等」から「必要な所へ」

MoD を一言でいえば、固定した計算予算を、トークンごとの必要性に応じて配分し直す構造です。全トークンを全層に通す一律処理をやめ、各層で本当に処理すべき少数トークンだけを選ぶ。総計算量は容量制約で据え置いたまま、その使い道を賢くする点が本質です。

論点実態そこから言えること
なぜ節約できるか各層でスコア上位の C 個だけ処理残りは残差でスキップし FLOPs を削る
なぜ計算量が読めるか容量 C は入力に依らない固定値総 FLOPs は系列長だけで静的に決まる
生成での難所Top-k が非因果的補助損失・予測器で因果近似が要る
MoE との関係疎化する軸が直交(深さ対幅)併用でき MoDE として重ねられる

この見立てがあると、「パラメータも深さも同じなのに速い」「一部トークンだけ深く処理される」といった MoD 特有の挙動が、容量制約・深さ方向の疎性・因果近似の言葉で説明できます。LLM と Transformer の各ブロックを「全トークンではなく選ばれたトークンだけ通す」と置き換えるだけで、動的計算配分の効きどころが線でつながります。

AI/機械学習 Article

Mixture-of-Depths(動的計算配分)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

MoD

比較で見る軸

難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 5

導入後に効く点

1ブロックが処理するトークン数を固定の容量(例:系列長の12.5%)に絞るため、総 FLOPs は入力に依らず静的に決まる。動的なのは「どのトークンを通すか」で、計算量そのものは事前に確定するのが要。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
AI/機械学習
タグ数
5

判断チェックリスト

  • 自社の用途が「MoD / LLM」に近いか確認する。
  • 強みである「MoD は各 Transformer ブロックにルータを置き、系列内でスコア上位の少数トークンだけを attention と MLP に通す。残りは残差接続で層をスキップし、トークンごとに実効的な深さを変えて計算を節約する。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

MoDLLM動的計算配分条件付き計算ルーティングMoDLLM動的計算配分