81 lines
4.8 KiB
Markdown
81 lines
4.8 KiB
Markdown
**오프라인 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()`을 사용하여 환경과 상호작용하며 성능을 측정하는 별도의 평가 루프를 실행합니다.
|