Yolo 深圳
深セン
今すぐ参加
用語集

深さの混合(MoD)

深さの混合(MoD)がトークンを動的にルーティングすることでAI効率を最適化する仕組みを探る。Ultralytics YOLO26およびLLMにおいてFLOPsを削減する方法を学ぶ。

深層学習アーキテクチャでは、特に長いシーケンスや高解像度の入力を処理する場合、計算効率が極めて重要である。新たな手法では、入力のどの部分が完全な処理を必要とし、どの部分が特定の層を安全にバイパスできるかをネットワーク自身に判断させることで、計算リソースを動的に割り当てる。この動的ルーティング戦略は、モデルの予測能力や精度を損なうことなく、全体的な計算複雑性を低減する。

概念の理解

深さ混合(MoD)は主にトランスフォーマーアーキテクチャに適用される手法であり、 モデルが各層において特定のトークンに対する計算を動的にスキップすることを学習する。従来のトランスフォーマーは、 重要な情報であれ埋めの内容であれ、全てのトークンを全層で処理する。これに対し、 MoDモデルはルーター機構を用いてトークンを評価しスコアを割り当てる。 事前定義された容量制限まで、 最高スコアのトークンのみが 注意機構や密なフィードフォワード層などの 高負荷計算ブロックを通過する。 残りのトークンは残差接続を介してブロックを迂回し、 異なるトークンが異なる処理深度を経験する 「深さの混合」を効果的に創出する。

この手法は、最近のDeepMindの研究によって普及し、arXivリポジトリで広く文書化されており、学習時と推論時の両方で必要な浮動小数点演算(FLOPs)の総数を大幅に削減する。

専門家混合法(MoE)との差別化

この概念は専門家混合法(MoE)と混同されやすい。 どちらもルーティング機構を用いるが、解決する問題は異なる:

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

実際のアプリケーション

動的に計算リソースを予算化する能力により、この手法はコンピュータビジョンと自然言語処理の複数の領域において非常に価値が高い。

  1. 言語モデルにおける文脈最適化:現代の OpenAIやAnthropicといった組織による 大規模言語モデル(LLM) Anthropic は巨大な文脈ウィンドウを処理する。動的深度ルーティングを採用することで、これらのモデルは構造的または反復的なフィラー語をスキップし、複雑な推論ステップや事実抽出に深い計算を集中させることができる。
  2. 高解像度ビジョンAI: Ultralytics モデルのような高度なビジョンシステムでは、 物体検出や 画像セグメンテーションのための大容量画像処理に膨大なメモリを要する。 深度ルーティングにより、ネットワークは均一な背景(空や壁など)での特徴抽出を省略し、複雑な前景オブジェクトに計算能力を集中させます。これは、CUDA で最適化されたリソース制約のあるエッジ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 などのフレームワークを活用することで TensorFlowといったフレームワークを活用することで、開発者はこれらのカスタム モデル最適化ブロックを統合できます。 さらに、Ultralytics ツールは、これらのルーターを正確にトレーニングするために必要なトレーニングデータの管理を支援し、 Google AIのようなエンタープライズエコシステムとのシームレスな統合を実現します。

Ultralytics YOLOパワーアップ

あなたのプロジェクトに高度なAIビジョンを。あなたの目標に合ったライセンスを今すぐ見つけましょう。

ライセンスオプションを見る