강의노트 정리 및 예제 시연

Section 3

강화학습에서 시뮬레이션의 필요성

  1. 실제 환경에서 적용했을 때의 실패 시 위험 유발
  2. 시뮬레이션보다 학습 시간이 오래 걸림

강화학습에서 공개된 환경의 단점

  1. 환경에 대한 디테일한 수정이 어려움
  2. 환경마다 사용 방법이 다름
  3. 필요한 환경이 없을 수 있음

Unity 및 ML-Agents 설치

ML-Agents 폴더 구성
com.unity.ml-agents(.extensions): 유니티 패키지
config: 강화학습 알고리즘 파라미터 설정
ml-agents(-encs): 파이썬 패키지
Project: ML-Agents 예제 프로젝트

Proximal Policy Optimization(PPO) 학습 방식

  1. Curriculum Learning: 순차적으로 난이도를 높여 학습 진행
  2. Parameter Randomization: 환경의 파라미터를 변경하며 다양한 환경에서 학습 진행
  3. Multi-Agent Reinforcement Learning(MARL): Soft Actor Critic(SAC) ICM, RND 호기심 기반 알고리즘(탐험 성능 향상 -> 보상을 얻기까지 복잡한 상황에서 사용) Multi-Agent POshumous Credit Assignment(MA-POCA): 여러 agent들을 사용(일부가 실패하더라도 공동의 이익을 추구)

학습 명령어

⚬ 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 학습 과정>

image.png

<tensorboard로 결과 확인>

image.png