Yolo 비전 선전
선전
지금 참여하기
용어집

생성형 흐름 네트워크(GFlowNets)

생성 흐름 네트워크(GFlowNets)가 확률적 모델링을 활용하여 신약 개발 및 인과 학습을 위해 다양하고 높은 보상을 제공하는 이산 객체를 어떻게 샘플링하는지 알아보세요.

생성 흐름 네트워크(Generative Flow Networks, GFlowNets)는 확률적 모델링과 분산 샘플링을 위해 설계된 강력한 머신러닝 프레임워크입니다. 이 프레임워크는 생성 과정을 순차적 의사결정 과제로 간주함으로써 이산적이고 조합 가능한 객체를 생성하는 데 탁월합니다. 기존의 강화 학습에서 흔히 볼 수 있는 것처럼 단순히 보상을 극대화하는 대신, GFlowNets는 사전 정의된 보상 함수에 비례하는 확률로 객체를 샘플링하는 방법을 학습합니다. 이를 통해 GFlowNets는 매우 방대한 샘플 공간 내에서 다양한 고보상 후보 집합을 발견할 수 있으며, 생성적 적대적 네트워크(GAN)와 같은 다른 생성적 아키텍처에서 흔히 발생하는 모델 붕괴 현상을 효과적으로 완화합니다.

핵심 원칙과 메커니즘

GFlowNets는 구조화된 환경을 탐색하며 단계별로 구성 요소를 추가해 최종 객체를 구축하는 방식으로 작동합니다.

  • 전방 및 후방 정책: 신경망은 전방 정책을 예측하며, 이는 주어진 상태에서 가능한 행동에 대한 확률 분포를 규정합니다. 이러한 상태를 거치는 궤적을 매핑함으로써, 모델은 확률의 “흐름”을 학습합니다.
  • 궤적 균형 손실: 훈련 과정에서는 종종 궤적 균형 손실과 같은 최적화 목표 함수를 활용하는데, 이는 특정 물체를 생성할 확률이 관측된 보상과 밀접하게 일치하도록 보장합니다. 훈련 중 이 손실 함수를 안정화하기 위해서는 적절한 하이퍼파라미터 조정이 필수적입니다.
  • 비례 샘플링: 단순히 절대적 최대값을 찾는 대신 보상에 비례하여 샘플링함으로써, GFlowNets는 자연스럽게 다양성을 확보하며, 이는 복잡한 조합 공간을 탐색할 때 매우 중요합니다.

GFlowNets 대 다른 생성형 AI

생성형 AI는 다양한 기법을 포괄하지만, GFlowNets는 그 중에서도 독보적인 위치를 차지합니다. 일반적인 확산 모델이나 플로우 매칭(Flow Matching) 과 같은 기법은 대개 연속적인 노이즈 분포를 데이터로 변환합니다. 반면, 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의 미래를 만들어 갑시다!

미래의 머신러닝 여정을 시작하세요