Home 약식 Unity ML 정리
Post
Cancel

약식 Unity ML 정리

Config 파일 살펴보기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
behaviors:
  <Behavior Name>:
    trainer_type: poca
    hyperparameters:
      batch_size: 2048
      buffer_size: 20480
      learning_rate: 0.0003
      beta: 0.005
      epsilon: 0.2
      lambd: 0.95
      num_epoch: 3
      learning_rate_schedule: constant
    network_settings:
      normalize: false
      hidden_units: 512
      num_layers: 2
      vis_encode_type: simple
    reward_signals:
      extrinsic:
        gamma: 0.99
        strength: 1.0
    keep_checkpoints: 5
    max_steps: 50000000
    time_horizon: 1000
    summary_freq: 10000
    self_play:
      save_steps: 50000
      team_change: 200000
      swap_steps: 2000
      window: 10
      play_against_latest_model_ratio: 0.5
      initial_elo: 1200.0

Config.Yaml

이 설정파일은 Unity ML-Agents의 학습 설정을 지정합니다. 아래는 각 항목의 설명입니다:

  1. trainer_type: 사용하는 학습 알고리즘을 지정합니다. 여기서는 POCA (Proximal Policy Optimization for Cooperative Multi-Agent Reinforcement Learning)를 사용합니다.
  2. hyperparameters : 이 섹션은 강화학습 알고리즘의 다양한 하이퍼파라미터를 설정하는 데 사용됩니다. 이들 값들은 학습 프로세스를 세부적으로 제어하는 데 중요하며, 모델의 성능에 큰 영향을 미칠 수 있습니다.
    1. batch_size: 한 번에 학습에 사용되는 경험(상태, 액션, 보상 등의 조합)의 수를 설정합니다. 이 값이 클수록 한 번에 더 많은 데이터를 사용하여 학습하지만, 메모리 사용량이 증가하고 학습 속도가 느려질 수 있습니다.
    2. buffer_size: 재생 버퍼의 크기를 설정합니다. 재생 버퍼는 에이전트가 경험을 저장하는 공간입니다. 이 값이 클수록 더 많은 경험을 저장할 수 있지만, 메모리 사용량이 증가합니다.
    3. learning_rate: 모델의 가중치를 업데이트하는 학습률을 설정합니다. 이 값이 클수록 모델이 빠르게 학습하지만, 너무 큰 값은 모델이 불안정해질 수 있습니다.
    4. beta: 엔트로피 정규화에 대한 계수를 설정합니다. 엔트로피 정규화는 정책의 탐험성을 유지하도록 도와줍니다.
    5. epsilon: PPO 알고리즘에서 사용하는 클리핑 파라미터입니다. 이 값이 작을수록 보상에 대한 추정치가 급격히 바뀌지 않도록 제한합니다.
    6. lambd: GAE (Generalized Advantage Estimation)에서 사용하는 할인 계수입니다. 이 값은 보상의 미래 가치를 얼마나 중요하게 생각하는지를 결정합니다.
    7. num_epoch: 각각의 배치에 대해 수행되는 업데이트의 회수를 설정합니다. 이 값이 클수록 각 배치에서 더 많이 학습하지만, 학습 속도가 느려질 수 있습니다.
    8. learning_rate_schedule: 학습률이 시간에 따라 어떻게 변화하는지를 결정합니다. 여기서는 ‘constant’로 설정되어 있어 학습률이 변하지 않습니다.
  3. network_settings: 신경망의 구조를 지정합니다. normalize는 입력을 정규화할지 여부, hidden_units는 은닉층의 뉴런 수, num_layers는 은닉층의 수, vis_encode_type는 비전 인코더의 종류를 지정합니다.

    num_layershidden_units는 둘 다 신경망의 구조를 정의하는 파라미터입니다.

    num_layers는 신경망의 은닉층 수를, hidden_units는 각 은닉층의 뉴런 수를 지정합니다. 이 두 파라미터는 문제의 복잡성, 사용할 수 있는 계산 리소스, 데이터의 양 등에 따라 적절한 값이 달라집니다.

    1. num_layers: 일반적으로 은닉층의 수는 1-3 사이입니다. 신경망이 너무 깊으면 학습이 어려워지고, 과적합의 위험이 증가합니다. 하지만 너무 얕은 신경망은 복잡한 패턴을 잘 학습하지 못할 수 있습니다. 따라서 적절한 균형을 찾아야 합니다.
    2. hidden_units: 각 은닉층의 뉴런 수는 데이터의 복잡성에 따라 결정됩니다. 일반적으로 이 값은 수백에서 수천 사이입니다. 뉴런이 너무 많으면 모델은 과적합될 가능성이 있습니다. 반면에 뉴런이 너무 적으면 모델이 복잡한 패턴을 학습하지 못할 수 있습니다.

    따라서, num_layershidden_units의 최적값을 찾기 위해선 여러 설정을 실험해 보는 것이 좋습니다. 일반적으로는 적은 수의 뉴런과 층으로 시작하여, 모델의 성능이 향상되지 않을 때까지 점진적으로 늘려나가는 것이 효과적일 수 있습니다.

    그러나, 이 값들은 특정 문제나 데이터셋에 최적화된 것이 아니므로, 이에 따라 조정이 필요할 수 있습니다. 가장 좋은 방법은 여러 설정을 실험해 보고, 가장 좋은 결과를 내는 값을 선택하는 것입니다. 이는 하이퍼파라미터 튜닝이라고 하며, 그리드 탐색, 랜덤 탐색, 베이지안 최적화 등 다양한 방법이 있습니다.

  4. reward_signals: 보상 신호의 설정을 지정합니다. 여기서는 외부 보상을 사용하며, 그 감마와 강도를 지정합니다.
  5. keep_checkpoints: 보존할 체크포인트의 수를 지정합니다.
  6. max_steps: 학습을 종료할 총 스텝 수를 지정합니다.
  7. time_horizon: 에피소드의 최대 길이를 지정합니다.
  8. summary_freq: 학습 요약을 기록하는 빈도를 지정합니다.
  9. self_play: Self-play 설정을 지정합니다. save_steps는 모델을 저장하는 빈도, team_change는 팀 변경 빈도, swap_steps는 정책 교체 빈도, window는 Elo 등급을 계산하는 데 사용되는 최근 게임 수, play_against_latest_model_ratio는 최신 모델과 대결하는 빈도, initial_elo는 초기 Elo 등급을 지정합니다.

Tensor board 해석

Extrinsic Reward

강화학습 모델의 학습 과정 중에 특정 정책에 따른 외부 보상(Extrinsic Reward)의 합계를 기록하는 그래프입니다.

강화학습에서 “보상”은 에이전트의 행동이 얼마나 좋았는지를 측정하는 수치입니다. 에이전트는 보상을 최대화하는 방향으로 학습을 진행합니다. 이때 “외부 보상”은 환경에서 직접 제공되는 보상을 말합니다. 예를 들어, 게임에서 점수를 획득하거나 목표를 달성했을 때 받는 보상이 이에 해당합니다.

따라서 “Policy/Extrinsic Reward” 그래프는 에이전트가 시간 경과에 따라 얼마나 많은 외부 보상을 획득하고 있는지를 보여줍니다. 이 그래프를 통해 에이전트의 학습 과정을 객관적으로 평가할 수 있습니다. 일반적으로 이 그래프의 값이 시간 경과에 따라 증가한다면, 에이전트가 학습을 통해 점점 더 좋은 행동을 배우고 있다는 것을 의미합니다.

Cumulative Reward

에이전트가 각 에피소드 동안 쌓아온 총 보상을 나타냅니다.

강화학습의 목표는 에이전트가 환경에서 가능한 한 많은 보상을 얻는 것입니다. 이때 각 에피소드 동안에 에이전트가 얻은 보상들을 모두 합한 것이 “누적 보상”이라고 합니다. 에피소드가 종료될 때마다 누적 보상이 초기화되고, 다음 에피소드에서 다시 보상이 쌓이기 시작합니다.

따라서 “Environment/Cumulative Reward” 그래프는 에이전트가 시간 경과에 따라 얼마나 많은 누적 보상을 획득하고 있는지를 보여줍니다. 이 그래프를 통해 에이전트의 학습 과정을 객관적으로 평가할 수 있습니다. 일반적으로 이 그래프의 값이 시간 경과에 따라 증가한다면, 에이전트가 학습을 통해 점점 더 좋은 행동을 배우고 있다는 것을 의미합니다.

Extrinsic Value Estimate

에이전트의 가치 함수를 통해 추정된 미래 보상의 총합, 즉 ‘가치’를 나타냅니다.

강화학습에서, 가치 함수는 주어진 상태 또는 상태-행동 쌍에 대한 미래 보상의 총합을 예측하는 함수입니다. 특히, 이 그래프에서 ‘외부 가치 추정치’는 외부 보상에 대한 가치 함수의 출력을 나타냅니다.

그래프를 해석할 때, 이 값이 점차 증가한다면 에이전트가 더 많은 보상을 예상하고 있다는 것을 의미합니다. 이는 일반적으로 에이전트의 성능이 향상되고 있다는 좋은 지표입니다. 반면에 이 값이 감소한다면, 에이전트가 더 적은 보상을 예상하고 있다는 것을 의미하며, 에이전트의 성능이 저하되고 있다는 신호일 수 있습니다.

그러나 이 값이 항상 에이전트의 실제 성능을 정확히 반영하는 것은 아닙니다. 가치 함수는 학습 과정에서 점진적으로 개선되며, 초기에는 실제 가치를 정확히 예측하지 못할 수 있습니다. 따라서 이 그래프를 해석할 때는 다른 지표들과 함께 고려해야 합니다.

ELO

ELO는 보드 게임, 체스, 비디오 게임 등에서 사용하는 플레이어의 능력을 측정하는 등급 시스템입니다. ELO 등급은 플레이어가 경기에서 승리하거나 패배함에 따라 상승하거나 하락합니다. 또한, 상대방의 등급에 따라 얻거나 잃는 점수도 변동됩니다. 즉, 등급이 높은 상대를 이기면 많은 점수를 얻고, 반대로 등급이 낮은 상대에게 진다면 많은 점수를 잃게 됩니다.

강화학습에서의 Self-play에서도 ELO 등급 시스템이 사용됩니다. 여기서 ELO 등급은 에이전트의 성능을 측정하는 데 사용되며, 에이전트가 스스로와 게임을 하면서 서로 다른 버전의 정책 사이에서 ELO 점수가 계산되고 업데이트됩니다. 이 점수는 에이전트가 학습을 통해 성능이 향상되고 있는지를 확인하는 데 사용될 수 있습니다.

따라서, “Self-play/ELO” 그래프는 각 에이전트의 현재 ELO 등급을 나타내며, 이 값이 시간 경과에 따라 증가하면 에이전트의 성능이 개선되고 있음을 의미합니다.

컨셉증명(Proof of Concept-PoC)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
behaviors:
  <Behavior Name>:
    trainer_type: poca
    hyperparameters:
      batch_size: 128
      buffer_size: 1024
      learning_rate: 0.01
      beta: 0.005
      epsilon: 0.2
      lambd: 0.95
      num_epoch: 2
      learning_rate_schedule: constant
      beta_schedule: constant
      epsilon_schedule: constant
    network_settings:
      normalize: false
      hidden_units: 128
      num_layers: 2
      vis_encode_type: simple
      memory: None
      goal_conditioning_type: hyper
      deterministic: False
    reward_signals:
      extrinsic:
        gamma: 0.99
        strength: 1.0
        network_settings:
          normalize: False
          hidden_units: 64
          num_layers: 1
          vis_encode_type: simple
          memory: None
          goal_conditioning_type: hyper
          deterministic: False
    keep_checkpoints: 5
    checkpoint_interval: 500
    max_steps: 5000
    time_horizon: 64
    summary_freq: 1000
    self_play:
      save_steps: 500
      team_change: 1000
      swap_steps: 500
      window: 10
      play_against_latest_model_ratio: 0.5
      initial_elo: 1200.0

Machine Learning 및 Reinforcement Learning 프로젝트에서는 종종 “컨셉증명 - Proof of Concept” (PoC) 단계를 거쳐 초기 모델의 학습 가능성을 빠르게 확인하게 됩니다. 이때의 하이퍼파라미터 설정은 학습 속도를 최적화하는 데 초점을 맞추기 보다는, 모델이 일반적으로 학습할 수 있는지를 확인하는 데 목표를 두는 것이 일반적입니다.

이 설정에서는 batch_size, buffer_size, hidden_units, num_layers와 같은 항목들을 줄여 빠른 실험을 가능하게 합니다. 물론 이렇게 간단하게 만들면 학습의 품질이 떨어질 수 있습니다.

또한, max_steps를 크게 줄여서 학습 과정이 빨리 끝나도록 했습니다. 이는 빠른 피드백을 얻어 빠른 이터레이션을 돌리기 위한 것입니다.

PoC 단계에서는 이렇게 간단한 설정으로 시작한 뒤, 학습이 잘 진행되는 것을 확인한 후에 점차 복잡한 설정으로 바꾸어 가는 것이 일반적입니다. 이렇게 하면 각 설정이 학습에 어떤 영향을 미치는지 체계적으로 알아볼 수 있습니다.

추가참조

https://greentec.github.io/reinforcement-learning-fourth/

This post is licensed under CC BY 4.0 by the author.
Contents

GJK(Gilbert-Johnson-Keerthi)Algorithm

VSCODE 정규표현식 Replace