개요
이번 페이지에서는 강화 학습에 필요한 Training Configuration 파일에 대해 정리하겠습니다.
참고 : Training Configuration File
Training Configuration File - Unity ML-Agents Toolkit
Training Configuration File Table of Contents Common Trainer Configurations One of the first decisions you need to make regarding your training run is which trainer to use: PPO, SAC, or POCA. There are some training configurations that are common to both t
unity-technologies.github.io
공통 트레이너 설정
공통적으로 구성 할 수 있는 세팅 입니다.
설정 항목 | 설명 |
trainer_type | (기본값 = ppo) 사용할 트레이너 유형: ppo, sac 또는 poca. |
summary_freq | (기본값 = 50000) 학습 통계를 생성하고 표시하기 전에 수집해야 하는 경험의 수입니다. 이는 TensorBoard 그래프의 세밀도를 결정합니다. |
time_horizon | (기본값 = 64) 에이전트가 경험을 모은 후, 경험 버퍼에 추가하기 전까지 저장할 단계 수입니다.
|
max_steps | (기본값 = 500000) 학습이 종료되기 전까지 환경에서 수행해야 하는 총 스텝 수(관찰 및 행동 횟수)입니다.
|
keep_checkpoints | (기본값 = 5) 저장할 모델 체크포인트의 최대 개수입니다.
|
even_checkpoints | (기본값 = false) true로 설정하면 checkpoint_interval을 무시하고, keep_checkpoints와 max_steps를 기반으로 학습 전체에 걸쳐 균등하게 체크포인트를 저장합니다.
|
checkpoint_interval | (기본값 = 500000) 각 체크포인트 사이에 수집되는 경험의 수입니다.
|
init_path | (기본값 = None) 이전에 저장된 모델을 불러와 트레이너를 초기화합니다.
|
threaded | (기본값 = false) 모델을 업데이트하는 동안 환경이 계속 진행되도록 허용합니다.
|
hyperparameters -> learning_rate | (기본값 = 3e-4) 경사 하강법의 초기 학습률로, 각 업데이트 단계에서 모델이 얼마나 조정되는지를 결정합니다.
|
hyperparameters -> batch_size | 각 경사 하강법(iteration)에서 사용되는 경험의 수입니다.
|
hyperparameters -> buffer_size | (기본값 = PPO: 10240, SAC: 50000)
|
hyperparameters -> learning_rate_schedule | (기본값 = PPO: linear, SAC: constant) 학습률이 시간이 지남에 따라 어떻게 변하는지 결정합니다.
|
network_settings -> hidden_units |
(기본값 = 128)
신경망의 은닉층에 있는 유닛의 수입니다.
|
network_settings -> num_layers | (기본값 = 2) 신경망의 은닉층 수입니다.
|
network_settings -> normalize | (기본값 = false) 벡터 관찰 입력에 정규화가 적용되는지 여부입니다.
|
network_settings -> vis_encode_type | (기본값 = simple) 시각적 관찰을 인코딩하는 방식입니다.
|
network_settings -> conditioning_type | (기본값 = hyper) 목표 관찰을 사용하여 정책을 조정하는 방식입니다.
|
PPO 관련 설정
설정 항목 | 설명 |
hyperparameters -> beta | (기본값 = 5.0e-3) 엔트로피 정규화의 강도를 조정하는 값으로, 정책을 더 무작위하게 만듭니다.
|
hyperparameters -> epsilon | (기본값 = 0.2) 학습 중 정책이 얼마나 빠르게 변화할 수 있는지를 조절하는 값입니다.
|
hyperparameters -> beta_schedule | (기본값 = learning_rate_schedule) 학습 과정에서 beta 값이 변하는 방식을 결정합니다.
|
hyperparameters -> epsilon_schedule | (기본값 = learning_rate_schedule) 학습 과정에서 epsilon 값이 변하는 방식을 결정합니다. (PPO 전용)
|
hyperparameters -> lambd | (기본값 = 0.95) Generalized Advantage Estimate(GAE) 계산에 사용되는 정규화 매개변수(lambda)입니다.
|
hyperparameters -> num_epoch | (기본값 = 3) 경사 하강법 최적화를 수행할 때 경험 버퍼를 몇 번 반복하여 학습할지를 결정하는 값입니다.
|
hyperparameters -> shared_critic | (기본값 = False) 정책 네트워크와 가치 함수 네트워크가 동일한 신경망(backbone)을 공유할지 여부를 결정합니다.
|
- PPO 3DBall Example
behaviors:
3DBall:
trainer_type: ppo
hyperparameters:
batch_size: 64
buffer_size: 12000
learning_rate: 0.0003
beta: 0.001
epsilon: 0.2
lambd: 0.99
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: true
hidden_units: 128
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 500000
time_horizon: 1000
summary_freq: 12000
- PPO WallJump Example
behaviors:
BigWallJump:
trainer_type: ppo
hyperparameters:
batch_size: 128
buffer_size: 2048
learning_rate: 0.0003
beta: 0.005
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: false
hidden_units: 256
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 20000000
time_horizon: 128
summary_freq: 20000
SmallWallJump:
trainer_type: ppo
hyperparameters:
batch_size: 128
buffer_size: 2048
learning_rate: 0.0003
beta: 0.005
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: false
hidden_units: 256
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 5000000
time_horizon: 128
summary_freq: 20000
SAC 관련 설정
설정 항목 | 설명 |
hyperparameters -> buffer_init_steps | (기본값 = 0) 정책 모델을 업데이트하기 전에 버퍼에 수집할 경험의 수입니다.
|
hyperparameters -> init_entcoef | (기본값 = 1.0) 학습 초기 단계에서 에이전트가 얼마나 탐색할지를 결정합니다.
|
hyperparameters -> save_replay_buffer | (기본값 = false) 훈련을 종료하고 다시 시작할 때 경험 리플레이 버퍼와 모델을 저장하고 로드할지 여부를 결정합니다.
|
hyperparameters -> tau | (기본값 = 0.005) SAC에서 가치 추정을 위한 부트스트랩을 할 때 타겟 네트워크를 얼마나 공격적으로 업데이트할지를 결정합니다.
|
hyperparameters -> steps_per_update | (기본값 = 1) 에이전트의 정책 업데이트에 비해 에이전트가 수행하는 행동(스텝)의 평균 비율을 결정합니다.
|
hyperparameters -> reward_signal_num_update | (기본값 = steps_per_update) 보상 신호를 업데이트하는 데 사용되는 미니 배치당 스텝 수를 결정합니다.
|
- SAC 3DBall Example
behaviors:
3DBall:
trainer_type: sac
hyperparameters:
learning_rate: 0.0003
learning_rate_schedule: constant
batch_size: 64
buffer_size: 200000
buffer_init_steps: 0
tau: 0.005
steps_per_update: 10.0
save_replay_buffer: false
init_entcoef: 0.5
reward_signal_steps_per_update: 10.0
network_settings:
normalize: true
hidden_units: 64
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 200000
time_horizon: 1000
summary_freq: 12000
- SAC WallJump Example
behaviors:
BigWallJump:
trainer_type: sac
hyperparameters:
learning_rate: 0.0003
learning_rate_schedule: constant
batch_size: 128
buffer_size: 200000
buffer_init_steps: 0
tau: 0.005
steps_per_update: 20.0
save_replay_buffer: false
init_entcoef: 0.1
reward_signal_steps_per_update: 10.0
network_settings:
normalize: false
hidden_units: 256
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 15000000
time_horizon: 128
summary_freq: 20000
SmallWallJump:
trainer_type: sac
hyperparameters:
learning_rate: 0.0003
learning_rate_schedule: constant
batch_size: 128
buffer_size: 50000
buffer_init_steps: 0
tau: 0.005
steps_per_update: 20.0
save_replay_buffer: false
init_entcoef: 0.1
reward_signal_steps_per_update: 10.0
network_settings:
normalize: false
hidden_units: 256
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 5000000
time_horizon: 128
summary_freq: 20000
보상 신호
- reward_signals 섹션은 외부 보상(환경 기반)과 내부 보상(예: 호기심 및 GAIL) 신호의 설정을 정의합니다. 각 보상 신호는 적어도 두 가지 매개변수, strength와 gamma를 정의해야 하며, 클래스별 하이퍼파라미터를 추가할 수 있습니다. 보상 신호를 제거하려면 해당 항목을 reward_signals에서 완전히 삭제해야 합니다. 최소한 하나의 보상 신호는 항상 정의되어 있어야 합니다.
Extrinsic Rewards (외부 보상)
설정 항목 | 설명 |
extrinsic -> strength | (기본값 = 1.0) 환경에서 제공하는 보상에 곱해지는 계수입니다. 보상 신호에 따라 일반적인 범위는 다를 수 있습니다. 일반적인 범위: 1.00 |
extrinsic -> gamma | (기본값 = 0.99) 환경에서 주어지는 미래 보상에 대한 할인 계수입니다. 이는 에이전트가 미래의 보상을 얼마나 중요하게 여겨야 하는지를 결정합니다. 먼 미래의 보상을 대비하여 현재 행동해야 하는 경우에는 이 값을 크게 설정해야 합니다. 반대로 보상이 즉각적인 경우에는 더 작게 설정할 수 있습니다. 1보다 작아야 합니다. 일반적인 범위: 0.8 - 0.995 |
Curiosity Intrinsic Reward (호기심 기반 내부 보상)
설정 항목 | 설명 |
curiosity -> strength | (기본값 = 1.0) 호기심 기반 내부 보상 모듈이 생성하는 보상의 크기입니다. 환경에서 제공되는 외부 보상 신호에 의해 묻히지 않을 만큼 충분히 커야 하지만, 반대로 외부 보상을 압도할 만큼 너무 크지 않도록 조정해야 합니다. 권장 범위: 0.001 - 0.1 |
curiosity -> gamma | (기본값 = 0.99) 미래 보상에 대한 할인율입니다. 권장 범위: 0.8 - 0.995 |
curiosity -> network_settings | (기본값 = 128) 내재적 호기심 모델(ICM)이 사용하는 네트워크 설정입니다. hidden_units 값은 원본 관측값을 압축하도록 충분히 작아야 하지만, 예상된 관측과 실제 관측을 구별하는 학습을 방해하지 않을 정도로 작지는 않아야 합니다. 권장 범위: 64 - 256 |
curiosity -> learning_rate | (기본값 = 3e-4) 내재적 호기심 모듈(ICM)을 업데이트하는 학습률입니다. 훈련이 불안정하고 호기심 손실이 일정하지 않다면 이 값을 줄이는 것이 좋습니다. 권장 범위: 1e-5 - 1e-3 |
GAIL Intrinsic Reward (GAIL 기반 내부 보상)
- GAIL을 활성화하려면(데모를 녹화했다고 가정하고) 다음 설정을 제공하세요.
설정 항목 | 설명 |
gail -> strength | (기본값 = 1.0) 원본 보상에 곱하는 계수입니다. GAIL을 외부 보상 신호(Extrinsic Signal)와 함께 사용할 경우, 시연 데이터가 최적이 아닐 때(예: 사람이 제공한 시연) 이 값을 낮게 설정하는 것이 좋습니다. 이렇게 하면 훈련된 에이전트가 시연을 그대로 복사하는 것이 아니라 외부 보상 획득에 집중할 수 있습니다. 이러한 경우 강도를 0.1 이하로 유지하는 것이 좋습니다. 권장 범위: 0.01 - 1.0 |
gail -> gamma | (기본값 = 0.99) 미래 보상에 대한 할인 계수입니다. 권장 범위: 0.8 - 0.9 |
gail -> demo_path | (필수, 기본값 없음) .demo 파일 또는 .demo 파일이 포함된 디렉터리의 경로입니다. |
gail -> network_settings | (기본값 = 128) GAIL 판별기에 대한 네트워크 사양입니다. hidden_units 값은 원본 관측값을 압축하도록 충분히 작아야 하지만, 시연된 행동과 실제 행동을 구별하는 학습을 방해하지 않을 정도로 작지는 않아야 합니다. 이 값을 지나치게 크게 설정하면 학습 시간이 증가할 수 있습니다. 권장 범위: 64 - 256 |
gail -> learning_rate | (Optional, 기본값 = 3e-4) 판별자를 업데이트하는 데 사용되는 학습률입니다. 학습이 불안정하거나 GAIL 손실이 불안정할 경우 이 값을 줄이는 것이 좋습니다. 권장 범위: 1e-5 - 1e-3 |
gail -> use_actions |
(기본값 = false)
판별자가 관측과 행동을 모두 구별할지, 아니면 관측만을 기준으로 구별할지를 결정합니다.
|
gail -> use_vail | (기본값 = false) GAIL 판별기에 변분 병목(variational bottleneck)을 활성화합니다. 이 설정을 사용하면 판별기가 보다 일반적인 표현을 학습하도록 강제되어 구별 능력이 지나치게 높아지는 것을 방지하고, 학습을 보다 안정적으로 만듭니다. 하지만 학습 시간이 증가할 수 있습니다. 모방 학습이 불안정하거나 원하는 작업을 제대로 학습하지 못하는 경우 활성화하는 것이 도움이 될 수 있습니다. |
- GAIL Crawler Example
behaviors:
Crawler:
trainer_type: ppo
hyperparameters:
batch_size: 2024
buffer_size: 20240
learning_rate: 0.0003
beta: 0.005
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: true
hidden_units: 512
num_layers: 3
vis_encode_type: simple
reward_signals:
gail:
gamma: 0.99
strength: 1.0
network_settings:
normalize: true
hidden_units: 128
num_layers: 2
vis_encode_type: simple
learning_rate: 0.0003
use_actions: false
use_vail: false
demo_path: Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawler.demo
keep_checkpoints: 5
max_steps: 10000000
time_horizon: 1000
summary_freq: 30000
behavioral_cloning:
demo_path: Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawler.demo
steps: 50000
strength: 0.5
samples_per_update: 0
- GAIL Hallway Example
behaviors:
Hallway:
trainer_type: ppo
hyperparameters:
batch_size: 128
buffer_size: 1024
learning_rate: 0.0003
beta: 0.01
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: false
hidden_units: 128
num_layers: 2
vis_encode_type: simple
memory:
sequence_length: 64
memory_size: 256
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
gail:
gamma: 0.99
strength: 0.01
learning_rate: 0.0003
use_actions: false
use_vail: false
demo_path: Project/Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo
keep_checkpoints: 5
max_steps: 10000000
time_horizon: 64
summary_freq: 10000
RND Intrinsic Reward (RND 기반 내부 보상)
- Random Network Distillation(RND)은 PyTorch 트레이너에서만 사용할 수 있습니다.
설정 항목 | 설명 |
rnd -> strength | (기본값 = 1.0) 내부 RND 모듈이 생성하는 호기심 보상의 크기입니다. 환경에서 제공되는 외부 보상 신호에 비해 너무 작아서 영향을 받지 않거나, 너무 커서 외부 보상을 압도하지 않도록 적절히 조정해야 합니다. 권장 범위: 0.001 - 0.01 |
rnd -> gamma | (기본값 = 0.99) 미래 보상에 대한 할인 계수입니다. 권장 범위: 0.8 - 0.995 |
rnd -> network_settings | (네트워크 설정 참고) RND(Random Network Distillation) 모델에서 사용하는 네트워크 사양입니다. 자세한 내용은 공통 부분의 network_settings 문서를 참조하세요. |
curiosity -> learning_rate | (기본값 = 3e-4) RND 모듈을 업데이트하는 데 사용되는 학습률입니다. 상태 표현을 빠르게 학습할 수 있을 정도로 충분히 커야 하지만, 안정적인 학습이 가능하도록 너무 크지는 않아야 합니다. 권장 범위: 1e-5 - 1e-3 |
Behavioral Cloning (행동 복제)
- 행동 복제를 사전 학습 옵션으로 활성화하려면 (데모가 기록되어 있다고 가정) behavioral_cloning 섹션에 다음 설정을 제공해야 합니다.
설정 항목 | 설명 |
demo_path | demo_path (필수, 기본값 없음) .demo 파일 또는 .demo 파일이 포함된 디렉터리의 경로를 지정합니다. |
strength | learning_rate (기본값 = 1.0) PPO의 학습률에 대한 모방 학습의 상대적 학습률입니다. BC가 정책에 미치는 영향을 얼마나 강하게 허용할지를 결정합니다. 권장 범위: 0.1 - 0.5 |
steps | (기본값 = 0) BC가 활성화되는 학습 단계 수입니다. 에이전트가 보상을 경험한 후, 데모를 더 이상 사용하지 않고 스스로 최적화하거나 일반화할 수 있도록 설정할 수 있습니다. 이 값이 0이면 전체 학습 과정에서 BC가 지속적으로 적용되며, 설정된 값에 따라 BC의 학습률이 점진적으로 감소합니다. |
batch_size | (기본값 = 트레이너의 batch_size) 한 번의 경사 하강 업데이트에 사용되는 데모 경험 수입니다. 설정하지 않으면 트레이너의 batch_size 값을 따릅니다. 권장 범위:
|
num_epoch | (기본값 = 트레이너의 num_epoch) 경사 하강 시 경험 버퍼를 반복하는 횟수입니다. 설정하지 않으면 PPO의 에포크 수를 따릅니다. 권장 범위: 3 - 10 |
samples_per_update | (기본값 = 0) 각 모방 학습 업데이트에서 사용할 최대 샘플 수입니다. 데모 데이터셋이 매우 클 경우, 과적합을 방지하기 위해 낮출 수 있습니다. 0으로 설정하면 모든 데모 데이터를 사용합니다. 권장 범위: buffer_size |
- BC Pyramids Example
behaviors:
Pyramids:
trainer_type: ppo
time_horizon: 128
max_steps: 1.0e7
hyperparameters:
batch_size: 128
beta: 0.01
buffer_size: 2048
epsilon: 0.2
lambd: 0.95
learning_rate: 0.0003
num_epoch: 3
network_settings:
num_layers: 2
normalize: false
hidden_units: 512
reward_signals:
extrinsic:
strength: 1.0
gamma: 0.99
curiosity:
strength: 0.02
gamma: 0.99
network_settings:
hidden_units: 256
gail:
strength: 0.01
gamma: 0.99
demo_path: Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo
behavioral_cloning:
demo_path: Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo
strength: 0.5
steps: 150000