KT_Q_Table/Offline_RL.md

4.8 KiB

오프라인 RL 프로젝트 구조

가장 큰 변화는 데이터셋을 관리하는 datasets/ 디렉토리와 데이터 수집을 위한 별도 스크립트(data_collector.py)의 추가입니다.

my_rl_project/ ├── configs/ │ └── offline_env_config.yaml ├── datasets/ │ └── collected_data.h5 ├── envs/ │ ├── __init__.py │ └── my_custom_env.py ├── agents/ │ ├── __init__.py │ └── offline_agent.py ├── data_collector.py └── train_offline.py


구성 요소별 변경 사항 및 관리 방안

1. datasets/ (신규)

  • Purpose: 사전 수집된 고정 데이터셋을 저장하는 디렉토리입니다. 오프라인 학습의 가장 핵심적인 자산입니다.
  • Format: 대용량 데이터를 효율적으로 다루기 위해 HDF5(.h5), Parquet, 또는 NumPy Archive(.npz) 형식을 사용하는 것이 일반적입니다.
  • Content: (observation, action, reward, next_observation, terminated) 튜플들의 집합으로 구성된 테이블 또는 배열.

2. data_collector.py (신규)

  • Purpose: 오프라인 학습에 사용할 데이터셋을 생성하는 스크립트입니다. 이 스크립트는 온라인(online) 환경에서 실행됩니다.
  • Implementation:
    • MyCustomEnv를 인스턴스화합니다.
    • 미리 정의된 정책(예: 랜덤 정책, 전문가 정책, 기존에 학습된 온라인 RL 정책)을 사용하여 환경과 상호작용(env.step())합니다.
    • 수집된 (s, a, r, s', d) 튜플들을 datasets/ 디렉토리에 지정된 파일 형식으로 저장합니다.
    • 데이터 수집 단계와 오프라인 학습 단계를 명확히 분리하는 역할을 합니다.

3. configs/offline_env_config.yaml

  • Purpose: 오프라인 학습에 특화된 설정을 관리합니다.
  • Key Definitions (변경점):
    • dataset_params:
      • path: 사용할 데이터셋 파일의 경로 (datasets/collected_data.h5).
      • batch_size: 학습 시 데이터셋에서 샘플링할 배치의 크기.
    • agent_params: 오프라인 RL 알고리즘(예: CQL, BCQ)에 특화된 하이퍼파라미터를 정의.

4. envs/my_custom_env.py

  • Purpose (역할 변경):
    • 학습 단계: 더 이상 학습 과정에서 실시간으로 상호작용하지 않습니다.
    • 평가(Evaluation) 단계: 오프라인 학습이 완료된 후, 학습된 정책의 성능을 검증하는 용도로 사용됩니다. 즉, 학습된 에이전트를 실제 환경에서 실행해보기 위한 '테스트베드'의 역할이 주가 됩니다.

5. agents/offline_agent.py

  • Purpose: 오프라인 데이터셋만으로 정책을 학습하는 알고리즘을 구현합니다.
  • Key Definitions (변경점):
    • class OfflineAgent: CQL, IQL, BCQ 등 오프라인 RL 알고리즘을 구현.
    • __init__(...): 온라인 에이전트와 유사하게 모델과 하이퍼파라미터를 초기화.
    • get_action(self, state): 역할은 동일하나, 주로 학습 후 평가 단계에서 사용됩니다.
    • learn(self, batch):
      • 메서드의 인자가 단일 경험이 아닌, **데이터셋에서 샘플링된 batch*가 됩니다.
      • batch 데이터를 사용하여 오프라인 RL 알고리즘의 손실 함수를 계산하고 정책을 업데이트합니다. 환경과의 상호작용(env.step())이 전혀 없습니다.
  • Policy & Reward Function Management:
    • 정책(Policy): 이 파일 내에서 관리되며, 주어진 데이터셋 내의 행동 분포를 모방하거나 보수적으로(conservative) 개선하는 방향으로 학습됩니다.
    • 보상 함수(Reward Function): 에이전트는 보상 함수를 직접 참조하지 않습니다. 대신, 데이터셋에 기록된 reward을 학습의 유일한 감독(supervision) 신호로 사용합니다.

6. train_offline.py

  • Purpose: 오프라인 데이터셋을 로드하여 에이전트를 학습시키는 메인 스크립트.
  • Key Definitions (핵심 변경점):
    • Setup: 설정 파일을 로드하고, 데이터셋 로더와 OfflineAgent를 인스턴스화합니다. (MyCustomEnv는 이 단계에서 필요 없을 수 있습니다.)
    • Training Loop:
      • 환경과의 상호작용 루프가 사라집니다.
      • 대신, 지도 학습(supervised learning)과 유사한 루프를 가집니다.
      • for epoch in range(num_epochs):
        • batch = dataset.sample(batch_size)
        • agent.learn(batch)
    • Evaluation:
      • 학습 루프가 끝난 후, MyCustomEnv를 인스턴스화합니다.
      • 학습된 agent.get_action()을 사용하여 환경과 상호작용하며 성능을 측정하는 별도의 평가 루프를 실행합니다.