본문 바로가기
AI/강화학습

4. [OPENAI] Running Experiments

by 보안매크로 2025. 1. 21.
728x90

핵심 요약: Spinning Up 실험 실행 방법

Spinning Up은 강화학습 실험을 체계적으로 관리하고 쉽게 실행할 수 있는 다양한 기능을 제공합니다. 명령줄 실행, 스크립트 실행, ExperimentGrid를 사용하여 하이퍼파라미터 탐색을 지원합니다.


1. 명령줄에서 실행

  • 기본 형식:
    python -m spinup.run [알고리즘 이름] [플래그]
    예시:
    python -m spinup.run ppo --env Walker2d-v2 --exp_name walker
  • 중요 매개변수:
    • --env: Gym 환경 이름 지정 (예: Walker2d-v2).
    • --exp_name: 실험 이름 (저장 디렉토리 이름에도 사용).
    • --seed: 랜덤 시드 값 설정 (다수 값 제공 시 여러 실험 실행).
    • --hid: 신경망의 히든 레이어 크기 (예: [32,32]).
    • --act: 신경망의 활성화 함수 (예: torch.nn.Tanh).
    • --data_dir: 결과 저장 폴더 설정.
    • --datestamp: 날짜/시간을 디렉토리 이름에 포함.
  • 여러 실험 실행: 다수 값을 설정하면 순차적으로 실행.
python -m spinup.run ppo --seed 0 10 20

여러 값을 설정하면 각 조합으로 개별 실험을 순차적으로 실행합니다.

명령줄에서 PPO 실행 예제

python -m spinup.run ppo --exp_name ppo_ant --env Ant-v2 --clip_ratio 0.1 0.2 \ --hid[h] [32,32] [64,32] --act torch.nn.Tanh --seed 0 10 20 --dt \ --data_dir path/to/data

설명

  • 환경 설정: Ant-v2 Gym 환경에서 PPO 알고리즘 실행.
  • 하이퍼파라미터 설정:
    • clip_ratio: PPO에서 정책 클리핑 비율 (여러 값으로 실험 가능).
    • hid: 신경망 히든 레이어 크기 (단축형 [h] 사용).
    • act: 신경망 활성화 함수 (torch.nn.Tanh).
  • 시드: 0, 10, 20을 사용해 난수 생성기 초기화 (결과 분산 확인).
  • 결과 저장 디렉토리:
    • --data_dir: 결과를 저장할 기본 디렉토리 설정 (path/to/data).
    • --dt: 디렉토리 이름에 타임스탬프 추가.

실험 디렉토리 이름 구조

결과는 실험 이름(exp_name)과 여러 하이퍼파라미터 값 조합에 따라 디렉토리가 생성됩니다.

  • 디렉토리 이름은 약칭을 사용해 간결하게 표현됩니다.
    • 예: --hid[h] → 약칭 h 사용.
    • 자동 약칭 생성: clip_ratio → cli.

저장 디렉토리 예시

  • 설정:
    • clip_ratio = 0.1
    • hid = [32,32]
    • seed = 10
  • 생성 디렉토리:
path/to/data/YY-MM-DD_ppo_ant_cli0-1_h32-32/YY-MM-DD_HH-MM-SS-ppo_ant_cli0-1_h32-32_seed10

기본 동작

  • 기본 프레임워크: PyTorch 버전이 기본 실행됨.
    • TensorFlow 버전을 사용하려면 ppo를 ppo_tf1로 변경.
  • 다중 실험 실행: 하이퍼파라미터에 여러 값을 설정하면 각각의 조합으로 개별 실험이 순차적으로 실행됩니다.

추가 요약

  1. 타임스탬프 플래그(--dt): 디렉토리 이름에 날짜/시간 추가 (또는 FORCE_DATESTAMP=True로 설정 가능).
  2. 하이퍼파라미터 단축 플래그: 사용자 정의 약칭 제공 가능 (--hid[h] 형태).
  3. 디렉토리 관리: 실험 결과는 디렉토리 계층 구조로 정리되며, 실험의 모든 설정이 포함됩니다.

명령줄에서 하이퍼파라미터 설정

Spinning Up에서는 모든 알고리즘의 하이퍼파라미터를 명령줄 플래그로 직접 제어할 수 있습니다.

1. 기본 사용 방법

  • 형식:
    python -m spinup.run [algo name] [--kwarg value]
  • 예:
     
    python -m spinup.run ppo --env Walker2d-v2 --exp_name walker --act torch.nn.ELU
    • 위 명령어는 torch.nn.ELU를 활성화 함수로 설정합니다.
    • TensorFlow 버전에서는 ppo_tf1 --act tf.nn.elu로 실행.

2. 하이퍼파라미터 확인

  • 명령줄에서 지원되는 하이퍼파라미터를 확인하려면:
    python -m spinup.run [algo name] --help
    • 해당 알고리즘 함수의 docstring 출력.

3. 값을 함수나 객체로 설정

  • 모든 값은 eval()을 통해 처리되므로, 명령줄에서 직접 함수나 객체를 설정할 수 있습니다.
  • eval()은 Python 내장 함수로, 문자열로 표현된 코드를 실행하거나 값을 평가하여 그 결과를 반환합니다.
  • 사용자가 명령줄에서 함수, 객체, 또는 리스트 같은 값을 입력하면, 이를 Python 객체로 변환.
  • 예:
    python -m spinup.run ppo --env Hopper-v2 --act torch.nn.ReLU
    • torch.nn.ReLU를 활성화 함수로 사용.

4. 딕셔너리 값 처리

  • 딕셔너리 값을 간편하게 설정 가능:
    • 일반 형식:
       
      --key dict(v1=value_1, v2=value_2)
    • 간편 형식:
       
      --key:v1 value_1 --key:v2 value_2
    • 예:
       
      python -m spinup.run ppo --custom_params:lr 0.001 --custom_params:batch_size 64
      위와 동일한 의미:
       
      --custom_params dict(lr=0.001, batch_size=64)

추가 요약

  1. 모든 알고리즘 하이퍼파라미터는 명령줄 플래그로 제어 가능.
  2. 함수와 객체 값 지원: torch.nn.ReLU와 같은 객체를 명령줄에서 설정.
  3. 딕셔너리 값 단축 형식 지원: --key:value 형식 사용.

2. 스크립트를 통한 실행

  • 알고리즘 함수는 spinup 패키지에서 직접 가져와 사용 가능.
  • 기본 예시
from spinup import ppo_pytorch as ppo
import gym
env_fn = lambda: gym.make('LunarLander-v2')

ac_kwargs = dict(hidden_sizes=[64, 64], activation=torch.nn.ReLU)
logger_kwargs = dict(output_dir='path/to/output_dir', exp_name='example')

ppo(env_fn=env_fn, ac_kwargs=ac_kwargs, steps_per_epoch=5000, epochs=250, logger_kwargs=logger_kwargs)

설명

  • env_fn: Gym 환경 생성 함수.
  • ac_kwargs: 신경망 하이퍼파라미터 (예: 히든 레이어 크기와 활성화 함수).
  • logger_kwargs: 실험 로그 설정 (결과 저장 경로, 실험 이름 등).

3. ExperimentGrid로 하이퍼파라미터 탐색

  • 여러 하이퍼파라미터 조합으로 실험을 쉽게 설정 및 실행 가능.
  • 예제:
from spinup.utils.run_utils import ExperimentGrid
from spinup import ppo_pytorch
import torch

eg = ExperimentGrid(name='ppo-experiment')
eg.add('env_name', 'CartPole-v0', shorthand='env')
eg.add('ac_kwargs:hidden_sizes', [(32,), (64, 64)], shorthand='hid')
eg.add('ac_kwargs:activation', [torch.nn.Tanh, torch.nn.ReLU], shorthand='act')
eg.run(ppo_pytorch, num_cpu=4)

매개변수 추가 방법

  • eg.add(param_name, values, shorthand, in_name):
    • param_name: 파라미터 이름.
    • values: 값 목록.
    • shorthand: 결과 디렉토리 이름에 반영될 약칭.
    • in_name: 실험 이름에 강제로 포함 여부.

실험 실행

eg.run(thunk, **run_kwargs)

  • thunk: 실행할 알고리즘 (예: ppo_pytorch).
  • run_kwargs: 추가 실행 매개변수.

  1.  

4. 저장 디렉토리 구조

4.1 기본 구조

data_dir/[outer_prefix]exp_name[suffix]/[inner_prefix]exp_name[suffix]_s[seed]
 
  • data_dir: --data_dir에서 지정 (기본값은 DEFAULT_DATA_DIR).
  • outer_prefix: --datestamp가 활성화되었을 때 날짜 접두사 (YY-MM-DD_).
  • inner_prefix: 시간 접두사 (YY-MM-DD_HH-MM-SS-).
  • suffix: 실험별 하이퍼파라미터 조합 요약.

4.2 접미사 생성 규칙

  • 하이퍼파라미터 이름의 약칭과 값 조합으로 구성.
  • 약칭은 자동 생성되거나 사용자가 대괄호로 직접 지정 가능.
    예: --hid[h] [32,32]에서 h는 사용자가 지정한 약칭.

5. 추가 사항

  • PyTorch/TensorFlow 선택:
    • PyTorch: ppo_pytorch 실행.
    • TensorFlow: ppo_tf1 실행.
  • 명령줄 하이퍼파라미터 처리:
    • 키워드 인수는 eval()을 통해 처리되므로, 함수나 객체를 직접 지정 가능.
    • 딕셔너리 값을 키-값 형식으로 나눠 설정 가능.

이와 같은 실행 방식은 작은 규모의 강화학습 실험을 효율적으로 수행하고 하이퍼파라미터를 조정하며 결과를 체계적으로 관리하는 데 유용합니다.

728x90

'AI > 강화학습' 카테고리의 다른 글

6. [OPENAI] Plotting Results  (0) 2025.01.23
5. [OPENAI] Experiment Outputs  (1) 2025.01.22
3. [OPENAI] Algorithms  (0) 2025.01.20
2. [OPENAI] Installation(Window)  (0) 2025.01.17
1. [OpenAI] Spinning Up in Deep RL Introduction  (1) 2025.01.16