Generative Flow Networks (GFlowNets)
생성 플로 네트워크 (GFlowNets)가 확률 모델링을 사용해 신약 개발과 인과 학습을 위한 다양하고 보상이 높은 이산 객체를 샘플링하는 방식을 알아보세요.
생성 흐름 네트워크(GFlowNets)는 확률 모델링과 분산 샘플링을 위해 설계된 강력한 머신러닝 프레임워크입니다. 생성 과정을 순차적 의사 결정 작업으로 다루어 이산적이고 조합적인 객체를 생성하는 데 탁월합니다. 기존 강화 학습에서 흔히 하듯 보상을 단순히 최대화하는 대신, GFlowNets는 사전 정의된 보상 함수에 비례하는 확률로 객체를 샘플링하도록 학습합니다. 이를 통해 매우 큰 샘플 공간에서 보상이 높은 다양한 후보 집합을 찾아낼 수 있으며, 다른 생성 아키텍처인 생성적 적대 신경망(GANs)에서 흔히 발생하는 모델 붕괴를 효과적으로 완화합니다.
핵심 원칙 및 메커니즘#
GFlowNets는 구조화된 환경을 따라 이동하면서 구성 요소를 단계별로 추가해 최종 객체를 만듭니다.
- 정방향 및 역방향 정책: 신경망은 정방향 정책을 예측하여 주어진 상태에서 가능한 동작의 확률 분포를 결정합니다. 모델은 이러한 상태를 거치는 궤적을 매핑하여 확률의 "흐름"을 학습합니다.
- 궤적 균형 손실: 학습에서는 특정 객체를 생성할 확률이 관측된 보상과 밀접하게 일치하도록 하는 궤적 균형 손실과 같은 최적화 목표에 의존하는 경우가 많습니다. 학습 중 하이퍼파라미터 튜닝을 적절히 수행하는 것은 이 손실 함수를 안정화하는 데 필수적입니다.
- 비례 샘플링: 절대적인 최댓값만 찾는 대신 보상에 비례해 샘플링하면 GFlowNets는 자연스럽게 다양성을 보장하며, 이는 복잡한 조합 공간을 탐색할 때 매우 중요합니다.
GFlowNets와 다른 생성형 AI 비교#
생성형 AI에는 다양한 기법이 포함되지만, GFlowNets는 고유한 영역을 차지합니다. 표준 디퓨전 모델이나 플로 매칭과 같은 기법은 일반적으로 연속적인 노이즈 분포를 데이터로 변환합니다. 반면 GFlowNets는 그래프나 시퀀스와 같은 이산 구조를 생성하도록 명시적으로 설계되었습니다. 또한 표준 강화 학습 에이전트가 마르코프 의사결정 과정(MDP)을 통해 하나의 최적 경로를 찾는 것을 목표로 하는 데 비해, GFlowNets는 높은 보상을 얻는 여러 경로를 탐색하여 다양한 출력을 생성합니다.
실제 적용 사례#
다양하고 고도로 최적화된 후보를 생성할 수 있는 능력 덕분에 GFlowNets는 과학 및 구조 분야에서 특히 유용합니다.
- 신약 개발 및 분자 설계: 제약 연구에서 GFlowNets는 새로운 치료용 펩타이드와 분자 그래프를 생성하는 데 사용됩니다. Atomic GFlowNets(A-GFN)와 같은 최근 발전 기술은 원자 단위로 분자를 구성하여 결합 친화도와 합성 접근성 같은 특성을 최적화합니다. 이 프로세스는 미리 정의된 단편에 의존하는 방법보다 더 다양한 약물 후보를 생성합니다.
- 인과 구조 학습: GFlowNets는 인과 베이지안 네트워크의 구조를 발견하는 데도 적용됩니다. GFlowNets는 방향성 비순환 그래프(DAG)에 대한 사후 분포를 근사하여, 복잡한 데이터 관계를 모델링할 때 연구자들이 인식론적 불확실성을 현실적으로 파악하도록 돕습니다.
정책 네트워크 구현#
GFlowNet을 구축할 때 정책 네트워크는 다음에 가능한 단계에 대한 확률 분포를 예측해야 합니다. 다음 PyTorch 코드 조각에서는 간단한 정책 레이어를 정의하고 액션을 샘플링하는 방법을 보여 줍니다. Ultralytics YOLO26과 같은 비전 모델을 구축하려면 바운딩 박스 좌표를 예측해야 하지만, 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()}")Python으로 복잡한 AI 솔루션을 개발하는 경우, Ultralytics Platform을 사용해 데이터셋에 주석을 달고, 모델을 학습 및 배포할 수 있습니다. 고속 객체 탐지 작업에 집중하든 생성형 아키텍처를 탐색하든, 모델을 효과적으로 확장하려면 견고한 머신러닝 운영(MLOps) 파이프라인이 필수적입니다.









