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

生成フローネットワーク(GFlowNets)

ジェネレーティブ・フロー・ネットワーク(GFlowNets)が、確率的モデリングを用いて、創薬や因果学習のために多様で高報酬な離散的オブジェクトをサンプリングする仕組みをご紹介します。

Generative Flow Networks(GFlowNets)は、 確率的モデリングと償却サンプリングのために設計された 強力な機械学習フレームワークです。この手法は、生成プロセスを逐次的な意思決定 タスクとして扱うことで、離散的で構成可能なオブジェクトの生成に 特に優れています。 従来の 強化学習で一般的な、単に報酬を最大化するのではなく、 GFlowNetsは、あらかじめ定義された 報酬関数に比例する確率でオブジェクトをサンプリングすることを学習します。これにより、極めて広大なサンプル空間の中から多様な 高報酬の候補セットを発見することが可能となり、 生成対立ネットワーク(GAN)のような他の生成 アーキテクチャをしばしば悩ませる モデル崩壊を効果的に軽減します。

中核的原則とメカニズム

GFlowNetsは、構造化された環境内を移動しながら、段階的に構成要素を追加し、最終的な オブジェクトを構築することで動作します。

  • 順方向および逆方向のポリシー ニューラルネットワークは順方向のポリシーを予測し、 与えられた状態から可能な行動への確率分布を決定します。これらの状態を通る軌跡をマッピングすることで、 モデルは確率の「流れ」を学習します。
  • 軌道バランス損失トレーニングでは、 軌道バランス損失のような最適化目的関数がよく用いられます。これは、特定の オブジェクトを生成する確率が、そのオブジェクトの観測された報酬と密接に一致するようにするものです。トレーニング中にこの損失関数を安定させるには、 適切なハイパーパラメータの調整が不可欠です。
  • 比例サンプリング 単に絶対的な最大値を求めるのではなく、報酬に比例してサンプリングを行うことで、GFlowNetsは自然に 多様性を確保します。これは、複雑な 組み合わせ空間を探索する際に極めて重要です。

GFlowNetsと他の生成AIの比較

生成AIには多くの手法が含まれますが、 GFlowNetsは独自の位置を占めています。標準的な 拡散モデルや フローマッチングのような手法は、通常、連続的なノイズ 分布をデータに変換します。これに対し、GFlowNetsは、 グラフやシーケンスといった離散的な構造を生成するために、明示的に設計されています。 さらに、標準的な強化学習エージェントがマルコフ決定過程(MDP)を通じて単一の最適経路を見つけることを目指すのに対し、 GFlowNetsは、生成される出力の多様性を確保するために、複数の高報酬経路を導き出します。

実際のアプリケーション

多様で高度に最適化された候補を生成できるという特長により、GFlowNetsは科学 および構造解析の分野において特に有用である。

  • 創薬と分子設計 医薬品研究において、GFlowNetsは 新規の治療用ペプチドや分子グラフを生成するために利用されています。Atomic GFlowNets(A-GFN)などの最近の進歩により、 分子を原子単位で構築し、結合親和性や合成の容易性といった特性を最適化することが可能になりました。このプロセスにより、 あらかじめ定義されたフラグメントに依存する手法と比較して、より多様な創薬候補が創出されます。
  • 因果構造の学習GFlowNetsは、 因果ベイジアンネットワークの構造を 解明するためにも応用されている。これらは、 有向非循環グラフ(DAG)上の事後分布を 近似し、研究者が複雑なデータの 関係性をモデル化する際に、 認識的不確実性について現実的な視点を 維持できるよう支援する。

「フォワード・ポリシー」の実施

GFlowNetを構築する際、フォワードポリシーは、次に起こりうるステップの確率分布を予測する必要があります。 以下の PyTorch スニペットは、単純なポリシー層を定義し、 アクションをサンプリングする方法を示しています。 Ultralytics のようなビジョンモデルの構築では バウンディングボックスの座標を予測する必要がありますが、 GFlowNetでは、生成パスにおける次の 状態を選択するためにカテゴリカル分布を使用します。

import torch
import torch.nn as nn
from torch.distributions import Categorical

# A simple linear policy mapping a 64-dim state to 4 possible actions
policy_network = nn.Sequential(nn.Linear(64, 4), nn.Softmax(dim=-1))

# Given a random state vector, compute action probabilities and sample
state = torch.randn(1, 64)
action_probs = policy_network(state)
sampled_action = Categorical(action_probs).sample()
print(f"Sampled Action: {sampled_action.item()}")

もしあなたが PythonUltralytics を使用すれば、 データセットへのアノテーション、モデルのトレーニング、デプロイをシームレスに 行うことができます。高速な 物体検出タスクに注力している場合でも、生成型 アーキテクチャを模索している場合でも、モデルを効果的にスケールさせるには、堅牢な 機械学習運用(MLOps) パイプラインが不可欠です。

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

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