13. PPO 학습 구성 요소 연결

date
3월 6, 2026
status
완료
tags
unrealRL

1. 소개#

이번 단계에서는 이제 실제로 BP_SpiderTrainingManager 안에서 PPO 학습에 필요한 객체들을 생성하고 연결해보려고 한다.

현재 구성에서는 Event Graph 안에서 Make Policy, Make Critic, Make PPOTrainer 계열 노드를 사용해 학습에 필요한 객체를 생성하고, 이를 변수로 저장한 뒤 학습 실행 흐름에 연결하는 방식으로 진행한다.

PPO 학습을 실행하기 위해 필요한 핵심 구성은 다음과 같다.

구성 요소역할
PolicyObservation을 입력받아 로봇 관절 Action을 출력
Critic현재 상태가 장기적으로 얼마나 좋은지 평가
PPO TrainerReward 결과를 바탕으로 Policy와 Critic을 업데이트
Training EnvironmentReward, Completion, Reset 처리
InteractorObservation 수집과 Action 적용
Learning ManagerAgent와 Listener, 학습 구성 요소를 관리

현재까지는 Learning Manager, Interactor, Training Environment, Agent를 연결한 상태이다.

따라서 이번 페이지에서는 여기에 Policy, Critic, PPO Trainer를 추가로 생성하고 연결하여 실제 학습을 실행할 수 있는 구조를 만드는 것을 목표로 한다.

전체 흐름은 다음과 같다.

flowchart TD
    A[BP_SpiderLearningManager] --> B[BP_SpiderInteractor]
    A --> C[BP_SpiderTrainingEnvironment]
    A --> D[BP_SpiderRobot Agent]

    B --> E[Observation 수집]
    B --> F[Action 적용]

    C --> G[Reward 계산]
    C --> H[Completion 판단]
    C --> I[Reset 처리]

    A --> J[Policy 생성]
    J --> K[Critic 생성]
    K --> L[PPO Trainer 생성]
    L --> M[학습 실행]

이번 단계의 목표는 로봇이 바로 자연스럽게 걷도록 만드는 것이 아니다.

우선은 다음 항목들이 정상적으로 연결되는지 확인하는 것이 첫 번째 목표이다.

확인 항목의미
Policy가 생성되는가Observation을 받아 Action을 출력할 준비가 되었는지 확인
Critic이 생성되는가PPO 학습에서 상태 가치를 평가할 준비가 되었는지 확인
PPO Trainer가 생성되는가Policy와 Critic을 업데이트할 학습기가 준비되었는지 확인
Training Environment가 Trainer에 연결되는가Reward와 Completion 정보가 학습에 사용될 수 있는지 확인
학습 실행 노드가 호출되는가실제 Training Loop가 시작되는지 확인

즉, 이번 단계는 “보행 성능 개선”이 아니라 “PPO 학습 구조 연결”을 확인하는 단계이다.

이 구조가 정상적으로 연결되면 이후에는 짧은 학습을 실행하면서 Reward 값, Episode 반복 여부, Reset 동작, Action 출력 여부를 확인하고, 그 다음에 Reward 가중치나 Action Scale을 조정하는 방향으로 넘어가면 된다.


2. 구현#

2.1. Make Policy 연결#

  • Event Graph → Event Policy 노드 추가

  • Add Agent/실행선 → Make Policy 입력 실행으로 추가

  • BP Spider Learning Manager → Make Policy / In Manager

  • Get Spider Interactor → Make Policy / In Interactor

  • Make Policy/Return Value 드래그 Prompt to Variable 선택해서 변수생성

    (변수 이름 : SpiderPolicy)

  • 최종 형태

  • 컴파일 체크

2.2. Make Critic 연결#

  • Event Graph에서 Make Critic 노드 추가

    BP_SpiderTrainingManager의 Event Graph 빈 곳에서 우클릭하고 검색(Make Critic)

    • Make CriticSet SpiderPolicy 다음에 연결
    • Set Spider Policy/실행핀 → Make Critic/입력핀
    • Set Spider Policy/Spider Policy → Make Critic/In Policy
    • BP Spider Learning Manager → Make Critic / In Manager
    • Spider Interactor → Make Critic / In Interactor
  • Make Critic의 오른쪽 Return Value에서 드래그해서 변수로 저장

    (변수 이름 : SpiderCritic)

  • 최종 형태

  • 컴파일


2.3. Make PPOTrainer 연결#

1. Make PPOTrainer 노드 추가#

  • Event Graph에서 Make PPOTrainer 노드 추가

    BP_SpiderTrainingManager의 Event Graph 빈 곳에서 우클릭하고 검색(Make PPOTrainer)

  • Make PPOTrainerSet SpiderCritic 다음에 연결

    Set SpiderCritic 뒤에 Make PPOTrainer를 추가

  • Make PPOTrainer 입력 핀 연결

    Make PPOTrainer는 PPO 학습을 실제로 실행할 Trainer 객체를 생성하는 노드이다.

    앞에서 만든 PolicyCritic, 그리고 Reward / Completion / Reset을 담당하는 Training Environment를 모두 연결해주자

  • 연결은 다음과 같이 구성해주자

    In Manager              ← BP Spider Learning Manager
    In Interactor           ← Spider Interactor
    In Training Environment ← Spider Training Environment
    In Policy               ← Spider Policy
    In Critic               ← Spider Critic
  • Class는 PPOTrainer 선택


2. Make Shared Memory Training Process추가#

  • 빈 공간 우클릭 후 Make Shared Memory Training Process 노드 추가

  • Set SpiderCritic 실행 출력 → Make PPOTrainer 실행 입력 연결 끊고, 아래 흐름으로 변경

    Set SpiderCritic 실행 출력
    → Make Shared Memory Training Process 실행 입력
    → Make PPOTrainer 실행 입력
  • 왜 이게 필요하냐면, PPOTrainer는 언리얼 안에서 혼자 학습 계산을 전부 하는 게 아니라, 외부 학습 프로세스와 데이터를 주고받아야 한다.

    그때 필요한 통신 통로가 이 Communicator 노드다.

    구성 요소역할
    PPOTrainer학습 루프 관리
    CommunicatorUnreal과 외부 학습 프로세스 사이의 통신
    Shared Memory Communicator같은 PC 안에서 빠르게 데이터를 주고받는 방식
  • 중간 구조


3. 각 입력값을 연결하는 이유#

  • Make PPOTrainer는 지금까지 만든 학습 구성 요소를 하나로 묶는 역할을 한다.

    입력필요한 이유
    In Manager어떤 Learning Manager 기준으로 학습을 실행할지 지정
    In InteractorObservation 수집과 Action 적용 구조를 Trainer에 전달
    In Training EnvironmentReward, Completion, Reset 정보를 Trainer에 전달
    In Policy학습을 통해 업데이트할 정책을 지정
    In Critic상태 가치를 평가하고 Policy 학습을 보조할 Critic을 지정
    CommunicatorUnreal과 외부 학습 프로세스 사이의 데이터 통신 방식을 지정
  • 즉, Make PPOTrainer는 단순히 Trainer 객체만 만드는 노드가 아니라, 지금까지 만든 강화학습 루프의 핵심 요소를 모두 연결하는 노드이다.


3. Return Value 저장#

  • Make PPOTrainerReturn Value에서 드래그해서 변수로 저장

    변수 이름(SpiderPPOTrainer)으로 지정

  • 실행 흐름은 다음과 같이 구성된다.

    Set SpiderCritic
    → Make PPOTrainer
    → Set SpiderPPOTrainer
  • 최종적으로는 다음 형태가 된다.

    flowchart LR
        A[Set SpiderPolicy] --> B[Make Critic]
        B --> C[Set SpiderCritic]
        C --> D[Make PPOTrainer]
        D --> E[Set SpiderPPOTrainer]

4. 왜 PPOTrainer를 만드는가?#

  • 앞에서 만든 Policy는 Observation을 입력받아 Action을 출력하는 역할을 한다.

    Observation → Policy → Action
  • 그리고 Critic은 현재 상태가 장기적으로 좋은 상태인지 평가하는 역할을 한다.

    Observation → Critic → Value
  • 하지만 PolicyCritic을 만들었다고 해서 자동으로 학습이 진행되는 것은 아니다.

    실제로 Episode에서 얻은 Reward를 바탕으로 Policy와 Critic을 업데이트하는 주체가 필요하다.

    그 역할을 하는 것이 PPOTrainer이다.

    PPOTrainer는 다음 정보를 사용해서 학습을 진행한다.

    정보제공하는 구성 요소
    ObservationBP_SpiderInteractor
    ActionBP_SpiderPolicy
    RewardBP_SpiderTrainingEnvironment
    CompletionBP_SpiderTrainingEnvironment
    Value 평가BP_SpiderCritic
  • 이를 흐름으로 정리하면 다음과 같다.

    flowchart TD
        A[BP_SpiderInteractor] --> B[Observation 수집]
        B --> C[BP_SpiderPolicy]
        C --> D[Action 출력]
        D --> E[로봇 관절 제어]
    
        E --> F[Physics Simulation]
        F --> G[BP_SpiderTrainingEnvironment]
        G --> H[Reward / Completion / Reset]
    
        B --> I[BP_SpiderCritic]
        I --> J[상태 가치 평가]
    
        H --> K[PPOTrainer]
        J --> K
        K --> C
        K --> I

    즉, PPOTrainer는 로봇이 어떤 상태에서 어떤 Action을 했고, 그 결과 어떤 Reward를 받았는지를 바탕으로 Policy와 Critic을 업데이트한다.

  • 최종 흐름


3. 후기#

이번 단계에서는 실제 PPO 학습을 바로 실행하기보다는, PPO 학습을 실행하기 위해 필요한 핵심 구성 요소를 BP_SpiderTrainingManager 안에서 생성하고 연결하는 작업을 진행하였다.

이전 단계까지는 BP_SpiderInteractor를 통해 Observation과 Action을 처리하고, BP_SpiderTrainingEnvironment를 통해 Reward, Completion, Reset을 처리하는 구조를 만들었다.

즉, 로봇이 현재 상태를 관찰하고, Action을 받아 움직이며, 그 결과에 따라 보상과 종료 조건을 계산할 수 있는 기본 학습 루프는 준비된 상태였다.

하지만 이 구조만으로는 아직 Policy가 학습되는 것은 아니다.

로봇의 상태를 보고 Action을 출력할 Policy, 그 상태의 가치를 평가할 Critic, 그리고 Episode에서 얻은 Reward를 바탕으로 Policy와 Critic을 업데이트할 PPOTrainer가 필요하다.

따라서 이번 구현에서는 다음 세 가지 노드를 추가하였다.

노드저장 변수역할
Make PolicySpiderPolicyObservation을 입력받아 로봇 관절 Action을 출력하는 정책 생성
Make CriticSpiderCritic현재 상태가 장기적으로 좋은 상태인지 평가하는 Critic 생성
Make PPOTrainerSpiderPPOTrainerPolicy와 Critic을 PPO 방식으로 학습시키는 Trainer 생성
  1. 먼저 Make Policy에서는 BP_SpiderLearningManagerSpiderInteractor를 연결하였다.

Policy는 Interactor에서 정의한 Observation과 Action 구조를 기준으로 동작해야 하기 때문이다.

현재 거미 로봇은 여러 관절을 동시에 제어해야 하므로, Policy는 Observation을 입력받아 24개의 연속 Action 값을 출력하는 역할을 맡는다.

  1. 다음으로 Make Critic에서는 BP_SpiderLearningManager, SpiderInteractor, 그리고 앞에서 만든 SpiderPolicy를 연결하였다.

Critic은 PPO 학습에서 현재 상태가 얼마나 좋은지 평가하는 역할을 한다.

Policy가 행동을 출력하는 쪽이라면, Critic은 그 행동과 상태가 장기적으로 보상을 얻는 데 유리한지를 평가하는 쪽이다.

  1. 마지막으로 Make PPOTrainer에서는 지금까지 만든 SpiderInteractor, SpiderTrainingEnvironment, SpiderPolicy, SpiderCritic을 모두 연결하였다.

이를 통해 PPOTrainer가 Observation, Action, Reward, Completion, Value 평가 정보를 함께 사용할 수 있는 구조가 되었다.

이번 단계까지의 전체 흐름을 정리하면 다음과 같다.

flowchart TD
    A[BP_SpiderLearningManager] --> B[SpiderInteractor]
    A --> C[SpiderTrainingEnvironment]
    A --> D[BP_SpiderRobot Agent]

    B --> E[Observation 수집]
    B --> F[Action 적용]

    C --> G[Reward 계산]
    C --> H[Completion 판단]
    C --> I[Reset 처리]

    A --> J[Make Policy]
    J --> K[SpiderPolicy]

    K --> L[Make Critic]
    L --> M[SpiderCritic]

    K --> N[Make PPOTrainer]
    M --> N
    B --> N
    C --> N
    N --> O[SpiderPPOTrainer]

이제 BP_SpiderTrainingManager는 다음 객체들을 모두 생성하고 보관하게 되었다.

구성 요소현재 상태
SpiderInteractorObservation 수집 및 Action 적용용으로 생성됨
SpiderTrainingEnvironmentReward, Completion, Reset 처리용으로 생성됨
SpiderPolicyAction을 출력할 Policy로 생성됨
SpiderCritic상태 가치를 평가할 Critic으로 생성됨
SpiderPPOTrainerPolicy와 Critic을 학습시킬 Trainer로 생성됨

실제 학습을 시작하려면 다음 단계에서 Run Training 흐름을 추가해야 한다.

Run Training은 매 프레임 또는 매 학습 스텝마다 호출되면서 Agent의 경험을 수집하고, Reward와 Completion을 처리한 뒤, Policy와 Critic을 업데이트하는 학습 루프를 실행한다.

따라서 다음 단계에서는 다음을 진행할 예정이다.

다음 작업목적
Run Training 노드 추가실제 PPO 학습 루프 실행
SpiderPPOTrainer 연결생성한 Trainer를 학습 실행 노드에 전달
학습 실행 여부 확인에디터에서 Training이 정상 시작되는지 확인
Reward / Episode 로그 확인Reward 계산과 Episode 반복이 정상인지 확인
Output Log 또는 TensorBoard 확인학습 상태와 오류 여부 확인

다음 단계부터는 이 구조를 실제로 실행하여, 거미 로봇이 Episode를 반복하면서 Reward를 기반으로 Policy를 업데이트할 수 있는지 확인해보자

여기서 노드가 더 늘어나면…어디다 넣어야 할까

Be Your Own Lamp