YOLO Vision Shenzhen
深セン
今すぐ参加
用語集

深さの混合 (MoD)

Mixture of Depths(MoD)がトークンを動的にルーティングすることでAI効率をどのように最適化するかを探ります。この技術がUltralytics YOLO26とLLMのFLOPsをどのように削減するかについて学びましょう。

深層学習アーキテクチャでは、特に長いシーケンスや高解像度の入力を処理する場合、計算効率が最も重要です。新しいアプローチでは、ネットワークが入力のどの部分に完全な処理が必要で、どの部分が特定の層を安全にバイパスできるかを決定できるようにすることで、計算リソースを動的に割り当てます。この動的なルーティング戦略により、モデルの予測能力や精度を犠牲にすることなく、全体の計算複雑度が削減されます。

コンセプトの理解

深さの混合 (MoD) は、主にTransformerアーキテクチャに適用されるアーキテクチャ技術であり、モデルが様々な層で特定のトークンの計算を動的にスキップすることを学習します。従来のTransformerは、重要な情報であろうと埋め草コンテンツであろうと、すべてのトークンをすべての層で処理します。対照的に、MoDモデルはルーターメカニズムを使用してトークンを評価し、スコアを割り当てます。事前定義された容量制限までの高スコアのトークンのみが、アテンションメカニズムや密なフィードフォワード層などの重い計算ブロックを通過します。残りのトークンは残差接続を介してブロックをバイパスし、異なるトークンが様々なレベルの処理深度を経験する「深さの混合」を効果的に生み出します。

この手法は、最近のDeepMindの研究によって普及し、arXivリポジトリで広範に文書化されており、トレーニングと推論の両方で必要とされる浮動小数点演算 (FLOPs)の総数を劇的に削減します。

Mixture of Experts (MoE)との比較

この概念をMixture of Experts(MoE)と混同しやすいですが、どちらもルーティングメカニズムを使用するものの、解決する問題は異なります。

  • MoE は、レイヤー内の異なるサブネットワーク (エキスパート) にトークンをルーティングします。すべてのトークンで計算深度は同じですが、モデルのパラメーター数は増加します。
  • MoDはトークンを計算ブロックまたはスキップ接続のいずれかにルーティングします。パラメータ数は厳密に一定に保たれますが、重要度の低いトークンについては計算深度が減少し、推論レイテンシが直接改善されます。

実際のアプリケーション

計算リソースを動的に予算化する能力は、コンピュータービジョンと自然言語処理の複数のドメインでこの技術を非常に価値のあるものにします。

  1. 言語モデルにおけるコンテキスト最適化: OpenAIAnthropicのような組織の最新のLarge Language Models (LLMs)は、巨大なコンテキストウィンドウを処理します。動的深度ルーティングを採用することで、これらのモデルは構造的または反復的なフィラーワードをスキップし、複雑な推論ステップと事実抽出のために深い計算を確保できます。
  2. 高解像度Vision AI:Ultralytics YOLO26モデルのような高度なビジョンシステムでは、object detectionimage segmentationのために大きな画像を処理するには、膨大なメモリが必要です。デプスルーティングにより、ネットワークは均一な背景(空や空白の壁など)での特徴抽出をバイパスし、複雑な前景オブジェクトに計算能力を集中させることができます。これは、CUDA optimizationライブラリによって最適化された、リソースが限られたedge AIハードウェアにモデルを展開する上で重要です。

実施例

以下は、基本的なルーティングメカニズムが入力トークンの一部に対する計算をスキップし、深さルーティング動作をシミュレートする方法を示す概念的なPyTorchスニペットです。

import torch
import torch.nn as nn


class MixtureOfDepthsBlock(nn.Module):
    def __init__(self, d_model, capacity_factor=0.5):
        super().__init__()
        self.capacity_factor = capacity_factor
        self.router = nn.Linear(d_model, 1)
        self.heavy_compute = nn.Sequential(nn.Linear(d_model, d_model * 4), nn.GELU(), nn.Linear(d_model * 4, d_model))

    def forward(self, x):
        # x shape: (batch_size, seq_len, d_model)
        seq_len = x.size(1)
        capacity = int(seq_len * self.capacity_factor)

        # 1. Compute routing scores
        scores = self.router(x).squeeze(-1)  # Shape: (batch_size, seq_len)

        # 2. Identify top-k tokens to process
        topk_indices = torch.topk(scores, capacity, dim=1).indices

        # 3. Create an output tensor mirroring the input (residual baseline)
        output = x.clone()

        # 4. Apply heavy computation only to the selected tokens
        for b in range(x.size(0)):
            selected_tokens = x[b, topk_indices[b]]
            processed_tokens = self.heavy_compute(selected_tokens)
            output[b, topk_indices[b]] += processed_tokens

        return output


# Example usage
dummy_input = torch.randn(2, 64, 128)  # Batch=2, Seq=64, Dim=128
mod_block = MixtureOfDepthsBlock(d_model=128, capacity_factor=0.5)
output = mod_block(dummy_input)
print(f"Output shape: {output.shape}")  # Expect (2, 64, 128)

PyTorch frameworkTensorFlowのようなフレームワークを活用することで、開発者はこれらのカスタムモデル最適化ブロックを統合できます。さらに、Ultralytics Platformのようなツールは、これらのルーターを正確に訓練するために必要な訓練データをチームが管理するのに役立ち、Google Cloud AIのようなエンタープライズエコシステムとシームレスに統合します。

共にAIの未来を築きましょう!

未来の機械学習で、新たな一歩を踏み出しましょう。