Generative Flow Networks (GFlowNets)
Generative Flow Networks (GFlowNets) がいかに確率モデリングを使用して、創薬や因果学習のために多様で報酬の高い離散オブジェクトをサンプリングするか解説します。
Generative Flow Networks(GFlowNets)は、確率的モデリングおよびアモータイズドサンプリング向けに設計された強力な機械学習フレームワークです。生成プロセスをシーケンシャルな意思決定タスクとして扱うことで、離散的かつ構成的なオブジェクトの生成に優れています。従来の強化学習で一般的なように単に報酬を最大化するのではなく、GFlowNetsは事前定義された報酬関数に比例した確率でオブジェクトをサンプリングすることを学習します。これにより、非常に広大なサンプル空間の中から多様な高報酬候補のセットを発見することが可能となり、Generative Adversarial Networks (GANs)のような他の生成アーキテクチャでよく見られるモデル崩壊を効果的に軽減します。
基本原則とメカニズム#
GFlowNetsは、構造化された環境を移動し、ビルディングブロックを段階的に追加して最終的なオブジェクトを構築することで動作します。
- 順方向および逆方向ポリシー: ニューラルネットワークは順方向ポリシーを予測し、特定の状態からの可能なアクションに対する確率分布を決定します。これらの状態を介して軌跡をマッピングすることにより、モデルは確率の「フロー」を学習します。
- 軌跡バランス損失: トレーニングは多くの場合、軌跡バランス損失のような最適化目的に依存しており、これにより特定オブジェクトの生成確率が観測された報酬と密接に一致することが保証されます。トレーニング中にこの損失関数を安定させるためには、適切なハイパーパラメータチューニングが不可欠です。
- 比例サンプリング: 単に絶対的な最大値を求めるのではなく、報酬に比例してサンプリングを行うことで、GFlowNetsは自然に多様性を強制します。これは複雑な組合せ空間をナビゲートする際に極めて重要です。
GFlowNetsと他の生成AIの比較#
生成AIには多くのテクニックが含まれますが、GFlowNetsは独自のニッチを占めています。標準的な拡散モデルやFlow Matchingなどの手法は、通常、連続的なノイズ分布をデータに変換します。対照的に、GFlowNetsはグラフやシーケンスなどの離散構造の生成に明示的に特化しています。さらに、標準的な強化学習エージェントがマルコフ決定プロセス (MDP)を介して単一の最適なパスを見つけることを目指すのに対し、GFlowNetsは生成された出力の幅広い多様性を確保するために複数の高報酬パスをマッピングします。
実社会での応用#
多様で高度に最適化された候補を生成する能力により、GFlowNetsは科学分野や構造分野で特に価値を発揮します。
- 創薬と分子設計: 製薬研究において、GFlowNetsは新規の治療用ペプチドや分子グラフを生成するために使用されます。Atomic GFlowNets(A-GFN)などの最近の進歩では、結合親和性や合成アクセシビリティなどのプロパティを最適化するために原子単位で分子を構築します。このプロセスにより、事前定義されたフラグメントに依存する方法と比較して、より多様な候補薬が作成されます。
- 因果構造学習: GFlowNetsは、因果ベイジアンネットワークの構造を発見するためにも適用されます。これらは有向非巡回グラフ (DAGs)上の事後分布を近似し、研究者が複雑なデータ関係をモデリングする際に認識論的不確実性の現実的な視点を維持するのに役立ちます。
フォワードポリシーの実装#
GFlowNetsを構築する際、順方向ポリシーは次に可能なステップに対する確率分布を予測する必要があります。次のPyTorchスニペットは、単純なポリシーレイヤーを定義し、アクションをサンプリングする方法を示しています。Ultralytics YOLO26のようなビジョンモデルの構築ではバウンディングボックス座標の予測が必要ですが、GFlowNetsでは生成パスにおける次の状態を選択するためにカテゴリカル分布を使用します。
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()}")Pythonで複雑なAIソリューションを開発している場合、Ultralytics プラットフォームを使用して、データセットのシームレスなアノテーション、トレーニング、およびモデルのデプロイを行うことができます。高速な物体検出タスクに注力している場合でも、生成アーキテクチャを探索している場合でも、モデルを効果的にスケーリングするためには、堅牢な機械学習運用 (MLOps)パイプラインが不可欠です。






