4.8 KiB
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()을 사용하여 환경과 상호작용하며 성능을 측정하는 별도의 평가 루프를 실행합니다.
- 학습 루프가 끝난 후,
- Setup: 설정 파일을 로드하고, 데이터셋 로더와