강화학습에서 시뮬레이션의 필요성
강화학습에서 공개된 환경의 단점
Unity 및 ML-Agents 설치
ML-Agents 폴더 구성
com.unity.ml-agents(.extensions): 유니티 패키지
config: 강화학습 알고리즘 파라미터 설정
ml-agents(-encs): 파이썬 패키지
Project: ML-Agents 예제 프로젝트
Proximal Policy Optimization(PPO) 학습 방식
학습 명령어
⚬ mlagents-learn [Trainer_Path] --env=[Env_Path]/build_name -- run_id=[run_id]Env_Path: 학습을 실행시킬 환경의 빌드 파일이 위치한 경로 ⚬ Trainer_Path: 학습 알고리즘 설정 YAML 파일이 위치한 경로(default: ml-agent/config/) ⚬ Env_Path: 학습을 실행시킬 환경의 빌드 파일이 위치한 경로 ⚬ run_id: 학습된 모뎅이 저장될 폴더의 이름
Parameter관련 정리
[Hyperparameters]
⚬ trainer_type: 사용할 강화학습 기법 ⚬ batch_size: 네트워크를 한번 학습할 때 사용할 데이터의 크기(기본값은 continuous action의 경우 128~2048, Discrete action의 경우 32~512) ⚬ buffer_size: 데이터를 저장할 버퍼의 크기(사이즈가 클수록 안정적이지만 많은 메모리를 차지함 일반적으로 2048~409600을 사용) ⚬ learning_rate: 초기 학습률을 조절하는 파라미터로 학습이 불안정하거나 보상이 지속적으로 증가하지 않는 경우 감소시킴(기본값 3e-4, 일반적으로 1e-5~1e-3) ⚬ learning_rate_schedule: 학습이 진행됨에 따라 learning_rate를 어떻게 변경할 것인지 결정(PPO = linear, SAC=constant)
[PPO관련 파라미터]
⚬ beta: 값이 클수록 랜덤 행동을 더 많이 하게 됨(기본값 5e-3, 일반적으로 1e-4~1e-2) ⚬ epsilon: 학습 속도를 결정(값이 낮을수록 안정적임, 기본값 0.2, 일반적으로 0.1~0.3) ⚬ lambd: Generalized Advantage Estimate(GAE)의 Regularization 파라미터로 업데이트 된 가치를 추정할 때 얼마나 의존할지를 결정(작은 경우 추정 가치에 의존하고 클 경우 환경을 통한 실제 보상에 의존, 기본값 0.95, 일반적으로 0.9~0.95) ⚬ num_epoch: 학습의 단위(buffer의 모든 data를 batch로 학습 수행을 1회로 측정, 값이 클수록 안정적이지만 시간이 오래 걸림, 기본값 3, 일반적으로 3~10)
⚬ keep_checkpoints: 유지할 모델 체크포인트의 최대값(해당 값을 넘어서 체크포인트가 저장되는 경우 가장 오래된 것을 삭제, 기본값 5) ⚬ max_steps: 학습 과정을 끝내기 전까지 몇 스텝동안 진행할지 결정(기본값 500000, 일반적으로 5e5~1e7) ⚬ time_horizon: buffer에 데이터를 저장하기 전 몇 스텝 동안 데이터를 수집할지 결정(자주 보상을 받는 경우 낮은 값으로 설정하는 것이 좋음, 행동의 의미있는 sequence를 다 포함할 수 있게 크게 설정하는 것이 좋음, 기본값 64, 일반적으로 32~2048) ⚬ summary_freq: 텐서보드에 몇 스텝마다 통계를 기록할지 결정하는 값(기본값 50000)
[Network Settings]
⚬ normalize: 수치적 관측(vector abservation) 입력 데이터를 정규화할지 결정, 간단한 이산적인 문제에서 성능이 저하될 수 있음 ⚬ hidden_units: 인공신경망의 각 층에서 사용할 노드의 개수를 결정 ⚬ num_layers: 인공신경망을 몇 층으로 사용할지 구조를 결정 [사진 포함] ⚬ vis_encode_type: visual observation입력을 인코딩할 딥러닝 모델 결정 (기본값 simple)
[Reward_signals]
⚬ strength: 환경에서 제공하는 보상에 strength를 곱해서 보상의 범위 조절(일반적으로 1로 설정) ⚬ gamma: 미래에 받을 보상을 얼마나 고려할지 결정(값이 클수록 높은 보상의 비율을 높게 결정, 일반적으로 0.8~0.995)
mlagents-learn 관련 명령어 정리
⚬ --help: 사용가능한 모든 명령어를 보여줌 ⚬ --resume: 같은 run id를 가진 폴더가 존재할 때, 이어서 학습 진행 ⚬ --force: 같은 run id를 가진 폴더가 존재할 때, 처음부터 학습 진행 ⚬ --inference: 같은 run id를 가진 폴더가 존재할 때, 추론을 시작 ⚬ --base-port BASE_PORT: 여러 학습을 동시에 진행할 때 같은 포트를 사용하면 오류가 생기므로 서로 다른 포트에서 진행하도록 포트를 지정 ⚬ --num-envs NUM_ENVS: 분산 학습 수행
<3D Ball 학습 과정>
<tensorboard로 결과 확인>