12. PPO Trainer 연결 및 첫 학습 준비

date
3월 1, 2026
status
완료
tags
unrealRL

1. 소개#

이전 단계까지 BP_SpiderTrainingEnvironment를 생성하고, 그 안에 Gather Agent Reward, Gather Agent Completion, Reset Agent Episode를 구현하였다.

또한 BP_SpiderTrainingManagerBeginPlay에서 BP_SpiderTrainingEnvironment를 생성하고, 이를 BP_SpiderLearningManager에 Listener로 등록하는 과정까지 구성하였다.

이제 로봇은 단순히 관절 Action만 받는 상태가 아니라, 행동 결과에 따라 보상을 받고, 넘어졌을 경우 Episode가 종료되며, 다시 초기 상태에서 다음 Episode를 시작할 수 있는 구조가 되었다.

즉, 강화학습에 필요한 기본 루프는 다음과 같이 연결된 상태이다.

flowchart LR
    A[Observation 수집] --> B[Policy Action 출력]
    B --> C[로봇 관절에 Action 적용]
    C --> D[Physics Simulation 진행]
    D --> E[Reward 계산]
    E --> F[Completion 판단]
    F --> G{Episode 종료?}
    G -- 아니오 --> A
    G -- 예 --> H[Reset Agent Episode]
    H --> A

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

학습을 진행하려면 Policy가 Action을 출력하고, Trainer가 Episode에서 얻은 Reward를 바탕으로 Policy를 업데이트해야 한다.

이번 단계에서는 Unreal Learning Agents에서 제공하는 PPO 기반 학습 구조를 사용해, 지금까지 만든 거미 로봇 학습 루프를 실제 학습 실행 단계로 연결해보려고 한다.


2. 왜 PPO를 사용하는가?#

거미 로봇은 여러 개의 관절을 동시에 제어해야 한다.

각 관절은 단순히 “움직인다 / 안 움직인다”처럼 이산적인 값이 아니라, -1.0 ~ 1.0 범위의 연속적인 Action 값을 가진다.

예를 들어 현재 거미 로봇의 Policy는 다음과 같은 Action 벡터를 출력한다.

Action =
[
    Joint_01,
    Joint_02,
    Joint_03,
    ...
    Joint_24
]

각 값은 특정 관절의 목표 회전 또는 제어 강도로 사용된다.

이런 문제는 가능한 행동 목록 중 하나를 고르는 방식보다, 현재 상태를 보고 연속적인 Action 값을 직접 출력하는 방식이 더 적합하다.

따라서 거미 로봇 보행 학습에는 Policy 기반 강화학습 방식이 자연스럽다.

PPO는 Policy 기반 강화학습 알고리즘 중 하나로, 정책이 한 번에 너무 크게 바뀌지 않도록 제한하면서 학습을 안정적으로 진행하는 방식이다.

물리 기반 로봇이나 캐릭터처럼 Action 값이 연속적이고, 잘못된 Action이 바로 넘어짐이나 물리 폭주로 이어질 수 있는 문제에서는 이런 안정성이 중요하다.

정리하면, 현재 프로젝트에서 PPO를 사용하는 이유는 다음과 같다.

이유설명
연속 Action 제어에 적합여러 관절의 실수값 Action을 동시에 출력할 수 있음
물리 기반 제어와 궁합이 좋음보행, 균형 유지, 자세 제어 같은 문제에 적용하기 좋음
Unreal Learning Agents에서 기본적으로 사용하기 좋음현재 구성한 Manager, Interactor, Training Environment 구조와 연결 가능
초기 학습 루프 검증에 적합복잡한 알고리즘보다 먼저 전체 강화학습 흐름이 정상 동작하는지 확인하기 좋음

3. 현재 프로젝트에서 PPO가 담당하는 역할#

현재까지 구현한 구조에서 BP_SpiderInteractor는 Observation과 Action을 담당하고, BP_SpiderTrainingEnvironment는 Reward, Completion, Reset을 담당한다.

PPO Trainer는 이 흐름에서 다음 역할을 맡는다.

flowchart TD
    A[BP_SpiderRobot] --> B[Observation]
    B --> C[Policy]
    C --> D[Action]
    D --> E[BP_SpiderInteractor]
    E --> F[관절 제어 적용]
    F --> G[Physics Simulation]
    G --> H[BP_SpiderTrainingEnvironment]
    H --> I[Reward / Completion / Reset]
    I --> J[PPO Trainer]
    J --> C

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

현재 프로젝트 기준으로 보면 각 구성 요소의 역할은 다음과 같다.

구성 요소역할
BP_SpiderRobot실제 학습 대상 Agent
BP_SpiderInteractorObservation 수집, Action 적용
BP_SpiderTrainingEnvironmentReward 계산, Completion 판단, Reset 처리
PolicyObservation을 입력받아 24개 Action 출력
PPO TrainerEpisode 결과를 바탕으로 Policy 업데이트

4. 구현 방향#

다음 구현에서는 PPO 학습을 실행하기 위해 다음 항목을 확인한다.

flowchart TD
    A[현재 구성 확인] --> B[Policy 설정 확인]
    B --> C[Trainer 설정 확인]
    C --> D[Training 시작 노드 연결]
    D --> E[짧은 학습 실행]
    E --> F[Reward / Episode 로그 확인]
    F --> G[ActionScale / Reward 가중치 튜닝]

처음부터 긴 학습을 실행하면 문제가 생겼을 때 원인을 찾기 어렵기 때문에, 우선은 짧은 학습 설정으로 전체 루프가 정상적으로 반복되는지 확인하는 것이 좋다.

따라서 첫 학습에서는 다음 정도만 확인해보도록 하자

항목첫 목표
학습 실행에디터가 멈추지 않고 Training이 시작되는지 확인
Action 출력로봇 관절이 계속 움직이는지 확인
Reward 기록Reward 값이 0이 아닌 값으로 계산되는지 확인
Episode 반복넘어짐 이후 Reset되고 다시 시작되는지 확인
로그 확인Output Log 또는 TensorBoard에서 학습 상태 확인

이 검증이 끝나면 이후에는 Reward 가중치, Action Scale, 관절 제한, Reset Pose 등을 조정하면서 평지 보행을 안정화하는 단계로 넘어갈 수 있다.

Be Your Own Lamp