[유니티(Unity)] (ML Agent) Training Configuration File

728x90

개요

이번 페이지에서는 강화 학습에 필요한 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)

에이전트가 경험을 모은 후, 경험 버퍼에 추가하기 전까지 저장할 단계 수입니다.

  • 이 값에 도달하기 전에 에피소드가 끝나면, 현재 상태에서 예상되는 보상을 예측해 보정합니다.
  • 값이 클수록 예측이 정확하지만 변동성이 커지고, 값이 작을수록 예측이 단순하지만 편향될 수 있습니다.
  • 보상이 자주 발생하거나 에피소드가 너무 길다면 작은 값이 더 적절할 수 있습니다.
  • 중요한 행동 패턴을 충분히 반영할 수 있도록 적절한 크기로 설정하는 것이 중요합니다.
권장 범위: 32 - 2048
max_steps (기본값 = 500000)

학습이 종료되기 전까지 환경에서 수행해야 하는 총 스텝 수(관찰 및 행동 횟수)입니다.

  • 여러 개의 환경을 병렬로 실행하는 경우, 모든 환경에서 수행된 스텝이 합산됩니다.
  • 동일한 행동 이름(behavior name)을 가진 여러 에이전트가 있다면, 그들의 모든 스텝이 max_steps에 포함됩니다.
권장 범위: 500,000 (5e5) ~ 10,000,000 (1e7)
keep_checkpoints (기본값 = 5)

저장할 모델 체크포인트의 최대 개수입니다.

  • 체크포인트는 checkpoint_interval 옵션에서 지정한 스텝마다 저장됩니다.
  • 최대 개수에 도달하면, 새 체크포인트를 저장할 때 가장 오래된 체크포인트가 삭제됩니다.
even_checkpoints (기본값 = false)

true로 설정하면 checkpoint_interval을 무시하고, keep_checkpoints와 max_steps를 기반으로 학습 전체에 걸쳐 균등하게 체크포인트를 저장합니다.

  • 계산 방식: checkpoint_interval = max_steps / keep_checkpoints
  • 학습 과정에서 에이전트의 행동 변화를 기록할 때 유용합니다.
checkpoint_interval (기본값 = 500000)

각 체크포인트 사이에 수집되는 경험의 수입니다.

  • keep_checkpoints로 설정된 최대 개수만큼 체크포인트가 저장되며, 그 이후에는 오래된 체크포인트가 삭제됩니다.
  • 각 체크포인트는 results/ 폴더에 .onnx 파일을 저장합니다.
init_path (기본값 = None)

이전에 저장된 모델을 불러와 트레이너를 초기화합니다.

  • 이전 실행과 동일한 트레이너 설정을 사용하고, 같은 ML-Agents 버전에서 저장된 모델이어야 합니다.
  • 체크포인트의 파일명 또는 전체 경로를 지정할 수 있습니다.
    • 예시: {checkpoint_name.pt} 또는 ./models/{run-id}/{behavior_name}/{checkpoint_name.pt}
  • 서로 다른 실행에서 저장된 체크포인트를 사용하거나, 이전 체크포인트에서 학습을 이어갈 때 활용할 수 있습니다.
  • 일반적으로 --initialize-from CLI 옵션을 사용하면 동일한 실행에서 모든 모델을 초기화하는 것이 더 간편합니다.
threaded (기본값 = false)

모델을 업데이트하는 동안 환경이 계속 진행되도록 허용합니다.

  • SAC를 사용할 때 학습 속도가 향상될 수 있습니다.
  • 자체 플레이(self-play)를 사용하는 경우 최적의 성능을 위해 이 설정을 false로 유지하는 것이 좋습니다.
hyperparameters -> learning_rate (기본값 = 3e-4)

경사 하강법의 초기 학습률로, 각 업데이트 단계에서 모델이 얼마나 조정되는지를 결정합니다.

  • 학습이 불안정하거나 보상이 지속적으로 증가하지 않는 경우 값을 낮추는 것이 좋습니다.
권장 범위: 1e-5 ~ 1e-3
hyperparameters -> batch_size 각 경사 하강법(iteration)에서 사용되는 경험의 수입니다.
  • 항상 buffer_size보다 훨씬 작은 값으로 설정해야 합니다.
  • 연속적(continuous) 행동을 사용할 경우 값이 커야 하며(1000 단위), 이산적(discrete) 행동만 사용할 경우 더 작은 값이 적합합니다(10 단위).
권장 범위:
  • 연속적 행동 (PPO): 512 ~ 5120
  • 연속적 행동 (SAC): 128 ~ 1024
  • 이산적 행동 (PPO & SAC): 32 ~ 512
hyperparameters -> buffer_size (기본값 = PPO: 10240, SAC: 50000)
  • PPO: 정책 모델을 업데이트하기 전에 수집할 경험의 수입니다. 학습이나 모델 업데이트를 시작하기 전에 수집해야 할 경험의 양을 나타냅니다. 이 값은 batch_size보다 여러 배 커야 합니다. 일반적으로 큰 buffer_size는 더 안정적인 학습 업데이트에 기여합니다.
  • SAC: 경험 버퍼의 최대 크기입니다. 에피소드보다 수천 배 더 긴 시간 동안 경험을 저장하여, SAC가 오래된 경험뿐만 아니라 새로운 경험도 학습할 수 있게 합니다.
권장 범위:
  • PPO: 2048 ~ 409600
  • SAC: 50000 ~ 1000000
hyperparameters -> learning_rate_schedule (기본값 = PPO: linear, SAC: constant)

학습률이 시간이 지남에 따라 어떻게 변하는지 결정합니다.

  • PPO: 학습률을 max_steps까지 선형적으로 감소시키는 것을 권장하여, 학습이 더 안정적으로 수렴할 수 있도록 합니다. 그러나 일부 경우(예: 학습 시간이 불확실한 경우)에는 이 기능을 비활성화할 수 있습니다.
  • SAC: 학습률을 일정하게 유지하는 것이 좋으며, 이를 통해 에이전트가 Q 함수가 자연스럽게 수렴할 때까지 계속 학습할 수 있습니다.
  • linear: 학습률을 선형적으로 감소시켜 max_steps에서 0에 도달합니다.
  • constant: 학습 전체 동안 학습률을 일정하게 유지합니다.
network_settings -> hidden_units
(기본값 = 128)

신경망의 은닉층에 있는 유닛의 수입니다.

  • 이는 신경망의 각 완전 연결층에 있는 유닛의 수를 나타냅니다.
  • 문제의 복잡도가 낮고 올바른 행동이 관찰 입력의 간단한 조합인 경우, 이 값은 작아야 합니다.
  • 행동이 관찰 변수 간의 매우 복잡한 상호작용인 경우, 이 값은 더 커야 합니다.
권장 범위: 32 ~ 512
network_settings -> num_layers (기본값 = 2)

신경망의 은닉층 수입니다.

  • 이는 관찰 입력 후, 또는 시각적 관찰의 CNN 인코딩 후에 있는 은닉층의 수를 나타냅니다.
  • 간단한 문제에서는 은닉층이 적을수록 학습이 더 빠르고 효율적일 수 있습니다.
  • 더 복잡한 제어 문제가 있을 경우, 은닉층을 더 많이 사용하는 것이 필요할 수 있습니다.
권장 범위: 1 ~ 3
network_settings -> normalize (기본값 = false)

벡터 관찰 입력에 정규화가 적용되는지 여부입니다.

  • 이 정규화는 벡터 관찰의 실행 평균과 분산을 기반으로 합니다.
  • 정규화는 복잡한 연속 제어 문제에서 도움이 될 수 있지만, 간단한 이산 제어 문제에서는 오히려 해로울 수 있습니다.
network_settings -> vis_encode_type (기본값 = simple)

시각적 관찰을 인코딩하는 방식입니다.

  • simple (기본값): 두 개의 컨볼루션 층으로 구성된 간단한 인코더입니다.
  • nature_cnn: Mnih et al.이 제안한 CNN 구현으로, 세 개의 컨볼루션 층을 사용합니다.
  • resnet: IMPALA Resnet을 사용하며, 세 개의 스택된 층 각각에 두 개의 잔차 블록이 포함되어 있어 다른 두 인코더보다 훨씬 더 큰 네트워크입니다.
  • match3: Gudmundsoon et al.이 제안한 작은 CNN으로, 보드 게임에 최적화되어 있으며 더 세밀한 공간 관계를 캡처할 수 있습니다.
  • fully_connected: 컨볼루션 층 없이 단일 완전 연결 밀집 층을 사용하는 인코더입니다.
각 인코더 유형은 컨볼루션 커널 크기 때문에 처리할 수 있는 최소 관찰 크기에 제한이 있습니다:
  • simple: 20x20
  • nature_cnn: 36x36
  • resnet: 15x15
  • match3: 5x5
  • fully_connected: 컨볼루션 층이 없으므로 크기 제한이 없지만, 표현력이 적어 매우 작은 입력에만 사용해야 합니다.
매우 큰 시각적 입력에 match3 CNN을 사용할 경우, 큰 관찰 인코딩으로 인해 학습 속도가 느려지거나 메모리 문제를 일으킬 수 있습니다.
network_settings -> conditioning_type (기본값 = hyper)

목표 관찰을 사용하여 정책을 조정하는 방식입니다.

  • none: 목표 관찰을 일반 관찰로 처리합니다.
  • hyper (기본값): 목표 관찰을 입력으로 사용하여 정책의 일부 가중치를 생성하는 하이퍼 네트워크(HyperNetwork)를 사용합니다.
하이퍼 네트워크를 사용할 경우 네트워크의 매개변수 수가 크게 증가합니다. 따라서 이 조정 방식을 사용할 때는 hidden_units의 수를 줄이는 것이 좋습니다.

PPO 관련 설정

 

설정 항목 설명
hyperparameters -> beta (기본값 = 5.0e-3)

엔트로피 정규화의 강도를 조정하는 값으로, 정책을 더 무작위하게 만듭니다.

  • 이는 학습 중 에이전트가 행동 공간을 충분히 탐색할 수 있도록 보장하는 역할을 합니다.
  • 값을 증가시키면 더 무작위적인 행동을 하도록 유도됩니다.
  • 엔트로피(Entropy)가 보상 증가와 함께 서서히 감소하도록 조정하는 것이 이상적입니다.
    • 엔트로피가 너무 빠르게 감소하면 beta 값을 증가시키세요.
    • 엔트로피가 너무 천천히 감소하면 beta 값을 감소시키세요.
권장 범위: 1e-4 ~ 1e-2
hyperparameters -> epsilon (기본값 = 0.2)

학습 중 정책이 얼마나 빠르게 변화할 수 있는지를 조절하는 값입니다.

  • 이는 경사 하강법 업데이트 시, 기존 정책과 새로운 정책 간의 허용 가능한 차이를 결정합니다.
  • 값이 작을수록 업데이트가 더 안정적이지만, 학습 속도가 느려질 수 있습니다.
권장 범위: 0.1 ~ 0.3
hyperparameters -> beta_schedule (기본값 = learning_rate_schedule)

학습 과정에서 beta 값이 변하는 방식을 결정합니다.

  • linear: beta 값을 선형적으로 감소시켜 max_steps에서 0에 도달하도록 합니다.
  • constant: 학습 과정 내내 beta 값을 일정하게 유지합니다.
  • 별도로 설정하지 않으면 기본적으로 learning_rate_schedule 값을 따릅니다.
hyperparameters -> epsilon_schedule (기본값 = learning_rate_schedule)

학습 과정에서 epsilon 값이 변하는 방식을 결정합니다. (PPO 전용)

  • linear: epsilon 값을 선형적으로 감소시켜 max_steps에서 0에 도달하도록 합니다.
  • constant: 학습 과정 내내 epsilon 값을 일정하게 유지합니다.
  • 별도로 설정하지 않으면 기본적으로 learning_rate_schedule 값을 따릅니다.
hyperparameters -> lambd (기본값 = 0.95)

Generalized Advantage Estimate(GAE) 계산에 사용되는 정규화 매개변수(lambda)입니다.

  • 이 값은 에이전트가 현재 가치 추정치를 얼마나 신뢰할지를 결정합니다.
  • 값이 낮을수록 현재 가치 추정치를 더 신뢰하지만, 편향(bias)이 커질 수 있음.
  • 값이 높을수록 실제 보상을 더 반영하지만, 분산(variance)이 커질 수 있음.
  • 적절한 값을 설정하면 학습이 더 안정적으로 진행될 수 있습니다.
권장 범위: 0.9 ~ 0.95
hyperparameters -> num_epoch (기본값 = 3)

경사 하강법 최적화를 수행할 때 경험 버퍼를 몇 번 반복하여 학습할지를 결정하는 값입니다.

  • batch_size가 클수록 이 값을 크게 설정해도 괜찮습니다.
  • 값을 줄이면 학습 업데이트가 더 안정적이지만, 학습 속도가 느려질 수 있습니다.
권장 범위: 3 ~ 10
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)

정책 모델을 업데이트하기 전에 버퍼에 수집할 경험의 수입니다.

  • 학습되지 않은 정책은 꽤 무작위적이기 때문에, 버퍼를 무작위 행동으로 미리 채우는 것이 탐색에 유용합니다.
  • 일반적으로 여러 에피소드에 해당하는 경험을 미리 채우는 것이 좋습니다.
권장 범위: 1000 ~ 10000
hyperparameters -> init_entcoef (기본값 = 1.0)

학습 초기 단계에서 에이전트가 얼마나 탐색할지를 결정합니다.

  • 학습 시작 시 초기 엔트로피 계수에 해당합니다.
  • SAC에서는 에이전트가 더 나은 탐색을 촉진하기 위해 엔트로피적인 행동을 하도록 유도합니다.
  • 엔트로피 계수는 실제 보상에 엔트로피 보너스를 추가하여 가중치를 둡니다.
  • 엔트로피 계수는 목표 엔트로피에 맞게 자동으로 조정되며, init_entcoef는 보너스 엔트로피의 시작 값을 설정합니다.
  • init_entcoef 값을 높이면 초기에 더 많이 탐색하고, 낮추면 더 빠르게 수렴할 수 있습니다.
권장 범위:
  • 연속적 행동 (Continuous): 0.5 ~ 1.0
  • 이산적 행동 (Discrete): 0.05 ~ 0.5
hyperparameters -> save_replay_buffer (기본값 = false)

훈련을 종료하고 다시 시작할 때 경험 리플레이 버퍼와 모델을 저장하고 로드할지 여부를 결정합니다.

  • 이 기능을 사용하면 수집된 경험이 삭제되지 않아 훈련을 재개할 때 더 원활하게 진행될 수 있습니다.
  • 다만, 리플레이 버퍼는 매우 클 수 있으며 상당한 양의 디스크 공간을 차지할 수 있기 때문에 기본적으로 이 기능은 비활성화되어 있습니다.
hyperparameters -> tau (기본값 = 0.005)

SAC에서 가치 추정을 위한 부트스트랩을 할 때 타겟 네트워크를 얼마나 공격적으로 업데이트할지를 결정합니다.

  • 이 값은 SAC 모델 업데이트 중 타겟 Q 업데이트의 크기와 관련이 있습니다.
  • SAC에는 두 개의 신경망이 있으며, 하나는 타겟 네트워크이고 다른 하나는 정책 네트워크입니다.
  • 타겟 네트워크는 주어진 상태에서 미래 보상에 대한 정책의 추정을 부트스트랩하는 데 사용되며, 정책이 업데이트되는 동안 고정됩니다.
  • 그런 다음 타겟은 tau에 따라 천천히 업데이트됩니다.
  • 이 값은 일반적으로 0.005로 두는 것이 좋습니다. 간단한 문제에서는 tau 값을 0.01로 증가시켜 학습 시간을 단축할 수 있지만, 안정성에는 비용이 발생할 수 있습니다.
권장 범위: 0.005 ~ 0.01
hyperparameters -> steps_per_update (기본값 = 1)

에이전트의 정책 업데이트에 비해 에이전트가 수행하는 행동(스텝)의 평균 비율을 결정합니다.

  • SAC에서 하나의 "업데이트"는 경험 리플레이 버퍼에서 batch_size 크기의 배치를 가져와 이 미니 배치를 사용하여 모델을 업데이트하는 과정에 해당합니다.
  • steps_per_update만큼의 스텝 후에 반드시 업데이트가 이루어진다는 보장은 없지만, 이 비율은 많은 스텝에 걸쳐 유지됩니다.
  • steps_per_update 값은 일반적으로 1 이상이어야 합니다.
  • 값을 낮추면 샘플 효율성이 향상되어 학습에 필요한 스텝 수가 줄어들지만, 업데이트 수행에 더 많은 CPU 시간이 소요될 수 있습니다.
  • 대부분의 빠른 환경에서는 steps_per_update 값을 씬에 있는 에이전트 수와 동일하게 설정하는 것이 균형 잡힌 선택입니다.
  • 느린 환경(스텝당 시간이 0.1초 이상 걸리는 경우)에서는 steps_per_update 값을 줄이면 학습 속도가 향상될 수 있습니다.
  • 또한 steps_per_update 값을 1보다 낮게 설정하여 한 스텝마다 여러 번 업데이트를 할 수 있지만, 이는 보통 환경이 매우 느린 경우에만 속도 향상을 가져옵니다.
권장 범위: 1 ~ 20
hyperparameters -> reward_signal_num_update (기본값 = steps_per_update)

보상 신호를 업데이트하는 데 사용되는 미니 배치당 스텝 수를 결정합니다.

  • 기본적으로 보상 신호는 주요 정책이 업데이트될 때마다 한 번씩 업데이트됩니다.
  • 그러나 특정 모방 학습 논문(예: Kostrikov et al., Blondé et al.)에서 제시된 훈련 절차를 모방하려는 경우, 정책이 업데이트될 때마다 보상 신호(GAIL)를 M번 업데이트하고자 할 수 있습니다.
  • 이를 위해 SAC의 steps_per_update 값을 N으로 설정하고, 보상 신호의 reward_signal_steps_per_update 값을 N / M으로 설정하면 됩니다.
  • 기본적으로 reward_signal_steps_per_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)

판별자가 관측과 행동을 모두 구별할지, 아니면 관측만을 기준으로 구별할지를 결정합니다.

  • true: 에이전트가 시연된 행동을 그대로 모방하도록 합니다.
  • false: 에이전트가 시연과 동일한 상태를 방문하도록 유도하지만, 행동은 다를 수 있습니다.
불완전한 시연 데이터가 있을 경우 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 값을 따릅니다.

권장 범위:
  • 연속적 행동(Continuous): 512 - 5120
  • 이산적 행동(Discrete): 32 - 512
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

728x90