강화학습 프레임워크를 실행하기 위한 설정 항목에는 다음과 같은 것들이 있다.
- use_cuda: True
- GPU 사용 여부
- 로컬 환경에 GPU가 없는데 use_cuda를 True로 설정하면 Runner에서 이를 체크해서 False로 만든다.
- device_num: 0
- 딥러닝 모델 학습 및 추론 시 사용할 GPU 번호(기본 값은 0)
- n_cpus: 4
- Ray에서 분산 처리를 할 때 사용할 CPU 개수
- n_gpus: 1
- Ray에서 분산 처리를 할 때 사용할 GPU 개수
- epsilon: 0.0000001
- 산술 연산을 할 때 수치적 안정성을 위해 사용하는 작은 상수
- 예를 들어 나누기를 할 때 분모가 0이 되지 않게 분모에 더해준다.
- optim_betas : [0.9, 0.999]
- Adam에서 사용하는 (beta1, beta2) 계수
- beta1: 그레이디언트의 이동 평균을 계산할 때 사용하는 계수
- beta2: 그레이디언트 제곱의 이동 평균을 계산할 때 사용하는 계수
- optim_eps: 0.00001
- Adam에서 사용하는 상수 값
- torch_deterministic: True
- PyTorch에서 난수를 고정했을 때 동일한 학습 결과가 나오게 하는 옵션이다. 값을 True로 하면 학습 성능이 조금 느려질 수 있다.
- env_wrapper: 'opengym'
- 강화학습 환경을 제공하는 패키지 이름
- 단, 현재는 'opengym'만 제공하고 있다.
- env_name: 'CartPole-v1'
- 환경 이름(환경 이름은 패키지에서 제공하는 이름을 준수해야 한다)
- 단, main.py에서는 인자로 받은 환경 이름을 사용하므로 설정 파일의 환경 이름은 실행에 영향을 주지 않는다.
- n_envs: 1
- 학습 시 사용할 환경의 개수
- distributed_processing_type: "sync"
- 분산 처리 방식 {"sync", "async"}
- "sync": 동기적 분산 처리 방식
- "async": 비동기적 분산 처리 방식
- render: False
- 강화학습 환경을 화면으로 보여줄지 여부
- 학습할 때는 환경을 화면으로 보여주면 학습 속도가 매우 늦어지므로 False로 두는 것이 좋다.
- log_interval: 2000
- 로깅 주기(타입 스텝 단위)
- Runner에서 학습 성능을 주기적으로 콘솔로 출력할 때 사용한다.
- use_tensorboard: True
- 로거에 통계 정보를 로깅할 때 텐서보드에도 같이 로깅 할지를 지정
- 전체적인 학습 곡선의 모양을 확인할 때 사용
- save_model: True
- 학습 시 모델과 옵티마이저의 체크포인트를 저장할지 여부
- 학습 과정이 길어질 경우 주기적으로 체크포인트를 저장해서 장애가 발생했을 때 복구해서 사용한다.
- 학습이 완료된 체크포인트는 모델 선정 과정을 거쳐 추론 모델로 사용한다.
- save_model_interval: 20000
- 체크포인트를 저장하는 주기(타입 스텝 단위)
- 체크포인트를 저장 시점별로 구분하기 위해 타임 스텝 디렉토리에 저장한다.
- checkpoint_path: ""
- 복구해야 할 체크포인트가 있는 경로
- load_step: 0
- 복구할 체크포인트의 타입 스텝
- 지정한 타입 스텝의 체크포인트가 없다면 가장 가까운 타임 스텝의 체크포인트로 복구한다.
- local_results_path: "results"
- 학습 과정의 산출물을 저장하기 위한 디렉토리의 이름
- 텐서보드 로그이나 체크포인트를 저장하기 위한 용도로 강화학습 프레임워크의 실행 디렉토리 하위에 생성된다.
- training_mode : True
- 학습 모드인 경우 True로 추론 모드인 경우 False로 설정
- trained_model_path: ""
- 추론 모델의 경로
- test_mode_max_episodes: 100
- 추론 모드에서 실행할 최대 에피소드 수
- 현재 추론 모드에서는 지정된 에피소드 수만큼 환경을 실행하고 종료하는 방식으로 구현돼 있다.
- max_environment_steps: 100000
- 학습 모드에서 실행할 최대 환경 타임 스텝 수
- n_steps: 1000
- 환경 루프에서 실행할 타입 스텝 수
- n_episodes: 0
- 환경 루프에서 실행할 에피소드 수
- n_steps과 n_episodes가 같이 설정돼 있으면 n_steps가 우선순위가 높음
- n_epochs: 1
- Learner가 실행할 에포크 수
- REINFORCE, A2C, PPO와 같은 온라인 정책 알고리즘에서 롤아웃 버퍼에 저장된 데이터셋을 몇 번 학습할지를 나타내는 횟수
- gradient_steps: 64
- Learner가 실행할 그레이디언트 스텝 수
- DQN, DDQN과 같은 오프라인 정책 알고리즘에서 리플레이 버퍼에서 몇 번 배치를 샘플링해서 학습할지를 나타내는 횟수
- batch_size: 32
- 배치 크기
- gamma: 0.99
- 리턴이나 이득, 가치를 계산할 때 사용하는 할인 계수 (discount factor)
- lr_policy: 0.005
- 정책 모델의 학습률
- lr_ciritic: 0.005
- 가치 함수 모델의 학습률
- lr_annealing: True
- 학습률 감소를 처리할지 여부
- 현재 학습률 감소 방식은 코사인 어낼링(cosine annealing)으로 고정돼 있다.
- warmup_step: 0
- 학습 초반에 리플레이 버퍼를 채우기 위해 대기하는 타임 스텝 수
-
epsilon_greedy: False
- 입실론-그리디 사용 여부
- 입실론-그리디는
$𝜀$ 의 확률로 무작위 행동을 선택하고$1−𝜀$ 의 확률로 가장 가치가 높은 최적 행동을 선택한다
-
epsilon_start: 0.1
- 입실론-그리디에서 입실론을 감쇄할 때 입실론의 시작 값
-
epsilon_finish: 0.01
- 입실론-그리디에서 입실론을 감쇄할 때 입실론의 종료 값
-
epsilon_anneal_time: 70000
- 입실론을 줄여 나가는 기간(타임 스텝 기준)
- grad_norm_clip: 0.3
- 그레이디언트 클리핑에 사용하는 임계치 값
- 그레이디언트 클리핑은 그레이디언트 폭발을 막기 위해 사용한다.
- 단, 임계치가 너무 작으면 정상적인 그레이디언트 값도 작아져서 학습이 원활하지 않을 수 있으니 임계치를 주의해서 지정해야 한다.
- advantage_type: 'gae'
- 리턴(return) 또는 이득(advantage)의 유형으로 {"gae", "n_step", "mc"} 중에 선택한다.
- "gae": GAE(Generalized Advantage Estimate)
- "n_step": n 스텝 리턴
- "mc": 몬테카를로 리턴
- 정책을 학습하는 REINFORCE, A2C, PPO 알고리즘에서 사용한다.
- n_steps_of_return: 10
- n 스텝 리턴을 계산하기 위한 스텝 수
- return_standardization: True
- (n_step이나 mc인 경우)리턴을 표준화할지를 지정한다.
- gae_standardization: False
- GAE 계산 시 이득을 표준화할지를 지정한다.
- gae_lambda: 0.98
- GAE 계산 시 분산-편향 조절 할인 계수
- ppo_clipping_epsilon: 0.2
- PPO에서 이전 정책과 현재 정책의 로그 가능도 비율의 클리핑 임계치
- clip_schedule: True
- 클리핑 임계치인 입실론을 감쇄할지 여부를 지정한다.
- vloss_coef: 0.2
- 가치 함수의 손실 계수(PPO, A2C에서 사용)
- eloss_coef: True
- 엔트로피 보너스 계수(PPO, A2C에서 사용)
- actor_hidden_dims: [64, 64, 64]
- 정책 모델의 은닉 계층별 뉴런 수를 나타내는 리스트
- critic_hidden_dims: [64, 64, 64]
- 가치 모델의 은닉 계층별 뉴런 수를 나타내는 리스트