Skip to main content
Summary

시뮬레이션 연습장 위에서 정책은 어떻게 좋아지는가

지난 장에서 우리는 시뮬레이션이 로봇에게 안전한 연습장이라는 사실을 살펴보았다. 실제 로봇팔을 수만 번 책상에 부딪히게 할 수는 없지만, 시뮬레이션 속 로봇팔은 실패해도 다시 초기화하면 된다. 이동 로봇이 벽에 부딪혀도 부품이 망가지지 않고, 두 발 로봇이 넘어져도 연구실 바닥이 깨지지 않는다.

그런데 연습장만 있다고 로봇이 저절로 똑똑해지는 것은 아니다. 로봇은 매번 움직이고, 결과를 보고, 보상을 받고, 그 경험을 바탕으로 다음 행동 방식을 조금씩 바꾸어야 한다. 이때 "어떻게 바꿀 것인가?"를 정하는 것이 강화학습 알고리즘이다.

로봇 제어에서 자주 만나는 이름이 바로 PPO와 SAC다. 두 알고리즘은 모두 정책을 학습한다. 정책이란 현재 상태를 보고 어떤 행동을 할지 정하는 함수다. 카메라 이미지, 관절 각도, 목표 위치가 들어오면 로봇팔을 어느 방향으로 얼마나 움직일지 출력하는 두뇌라고 생각하면 된다.

PPO와 SAC는 같은 목표를 향하지만 성격이 다르다. PPO는 정책을 한 번에 크게 바꾸지 않고 안정적으로 조금씩 개선하려는 알고리즘이다. SAC는 성능뿐 아니라 탐험도 중요하게 보며, 다양한 행동을 시도하는 능력을 학습 과정에 포함한다. 둘 다 로봇 연속 제어에서 널리 쓰이지만, 실험 환경과 작업 성격에 따라 선택 기준이 달라진다.

이 장의 목표는 알고리즘 수식을 외우는 것이 아니다. 대신 다음 질문에 답할 수 있으면 충분하다. "내 로봇 작업에는 PPO가 어울릴까, SAC가 어울릴까?" 그리고 "정책이 출력하는 행동을 실제 로봇 제어 명령으로 어떻게 연결해야 할까?"

PPO와 SAC 개요

로봇의 행동은 버튼 하나가 아니다

게임 강화학습을 처음 배울 때는 행동이 단순한 경우가 많다. 왼쪽으로 간다, 오른쪽으로 간다, 점프한다, 멈춘다처럼 몇 가지 선택지 중 하나를 고르면 된다. 이런 행동 공간을 이산 행동 공간이라고 부른다. 행동 후보가 뚝뚝 끊어진 목록으로 존재한다는 뜻이다.

하지만 로봇은 대부분 그렇게 움직이지 않는다. 로봇팔의 첫 번째 관절을 0.02라디안 움직이고, 두 번째 관절은 -0.01라디안 움직이고, 그리퍼는 0.4만큼 닫는 식이다. 이동 로봇이라면 선속도 0.3m/s, 각속도 -0.1rad/s처럼 연속적인 값을 출력해야 한다. 이처럼 행동이 실수 벡터로 표현되는 경우를 연속 행동 공간이라고 한다.

예를 들어 6자유도 로봇팔의 행동을 관절 속도 명령으로 정의하면 다음과 같은 벡터가 된다.

action = [dq1, dq2, dq3, dq4, dq5, dq6]

각 값은 해당 관절을 얼마나 빠르게 움직일지 나타낸다. 엔드 이펙터 기준으로 행동을 정의할 수도 있다.

action = [dx, dy, dz, droll, dpitch, dyaw, gripper]

이 경우 앞의 세 값은 위치 변화, 다음 세 값은 자세 변화, 마지막 값은 그리퍼 열림 정도를 의미한다. 어느 표현이 더 좋은지는 작업에 따라 다르다. 관절 제어는 로봇의 실제 구동 구조와 가깝고, 엔드 이펙터 제어는 사람이 이해하는 작업 목표와 가깝다.

중요한 점은 PPO와 SAC가 이런 연속 행동을 직접 다룰 수 있다는 것이다. 정책 네트워크는 상태를 입력받아 행동 벡터를 출력한다. 다만 그 값을 그대로 로봇에 보내면 위험할 수 있다. 학습 초반의 정책은 엉뚱한 값을 내보낼 수 있기 때문이다.

그래서 로봇 강화학습에서는 보통 행동을 다음과 같이 제한한다.

  • 정책 출력값을 -1에서 1 사이로 정규화한다.

  • 실제 관절 속도, 힘, 위치 변화량의 최대 범위를 정해 스케일링한다.

  • 한 스텝에서 너무 큰 변화가 생기지 않도록 속도 제한과 가속도 제한을 둔다.

  • 충돌 위험이 있거나 작업 공간을 벗어나면 안전 필터가 명령을 차단한다.

정책은 "하고 싶은 행동"을 내보내고, 로봇 제어기는 그것을 "해도 되는 행동"으로 바꾸어 실행한다. 강화학습 정책이 로봇의 모든 안전 책임을 혼자 떠안아서는 안 된다. 이 원칙은 이후 LLM 로봇 에이전트에서도 그대로 이어진다. 상위 AI는 의도를 만들고, 하위 제어 계층은 물리적 안전을 지킨다.

Actor와 Critic: 행동하는 모델과 평가하는 모델

PPO와 SAC를 이해하려면 먼저 Actor-Critic 구조를 알아야 한다. 이름은 조금 낯설지만 개념은 단순하다. Actor는 행동하는 모델이고, Critic은 그 행동이 얼마나 좋은지 평가하는 모델이다.

로봇팔이 목표 지점에 손끝을 가까이 가져가는 작업을 생각해 보자. Actor는 현재 관절 각도와 목표 위치를 보고 "1번 관절은 조금 올리고, 2번 관절은 조금 내리고, 손목은 오른쪽으로 틀자" 같은 행동을 출력한다. 그러면 시뮬레이션 환경이 그 행동을 실행하고 새 상태와 보상을 돌려준다.

Critic은 이 상태가 장기적으로 얼마나 좋은지 추정한다. 지금 손끝이 목표에 조금 가까워졌다면 좋은 상태일 수 있다. 하지만 가까워지는 과정에서 팔이 장애물에 너무 접근했다면 위험한 상태일 수 있다. Critic은 단순히 지금 받은 보상만 보는 것이 아니라, 앞으로 받을 보상까지 고려해 현재 상태나 행동의 가치를 평가한다.

Actor와 Critic은 서로를 이용해 성장한다. Actor는 Critic이 높게 평가하는 행동을 더 자주 하도록 바뀐다. Critic은 실제 경험을 보면서 자신의 평가가 맞았는지 고친다. 로봇이 시뮬레이션에서 수많은 시행착오를 겪는 동안, 행동하는 모델과 평가하는 모델이 함께 개선되는 것이다.

PPO와 SAC는 둘 다 Actor-Critic 계열로 이해할 수 있다. 다만 정책을 업데이트하는 방식과 경험을 사용하는 방식이 다르다. 이 차이가 실제 로봇 실험에서 꽤 큰 차이를 만든다.

PPO: 정책을 조금씩 안전하게 개선하기

PPO는 Proximal Policy Optimization의 약자다. 이름을 그대로 풀면 "가까운 범위 안에서 정책을 최적화한다"는 뜻이다. 여기서 핵심은 가깝다는 말이다. PPO는 정책을 한 번에 확 바꾸지 않는다. 지금 정책에서 너무 멀리 벗어나지 않는 범위 안에서만 개선하려고 한다.

왜 조심스럽게 바꾸어야 할까? 로봇 제어에서는 정책이 조금만 이상해져도 행동이 크게 흔들릴 수 있기 때문이다. 어제까지는 목표 지점으로 잘 가던 로봇팔이 오늘 업데이트 후 갑자기 팔을 크게 휘두른다면 학습이 아니라 사고에 가깝다. 강화학습에서는 이런 일이 실제로 일어날 수 있다. 보상 신호는 불안정하고, 정책 업데이트는 민감하며, 시뮬레이션 데이터는 특정 상황에 치우칠 수 있다.

PPO는 이 문제를 줄이기 위해 정책 변화량을 제한한다. 직관적으로 말하면, 예전 정책이 어떤 행동을 어느 정도 확률로 선택했는지 기억해 두고, 새 정책이 그 확률을 너무 과격하게 바꾸지 못하도록 막는다. 좋은 행동은 더 자주 하게 만들되, 갑자기 10배, 100배씩 확률을 바꾸지는 않는다.

로봇 학습 관점에서 PPO의 흐름은 다음과 같다.

  1. 현재 정책으로 여러 개의 시뮬레이션 환경에서 행동을 실행한다.

  2. 상태, 행동, 보상, 다음 상태, 종료 여부를 모은다.

  3. Critic을 이용해 각 행동이 평균보다 얼마나 좋았는지 계산한다.

  4. Actor를 업데이트하되, 이전 정책에서 너무 멀어지지 않게 제한한다.

  5. 업데이트된 정책으로 다시 환경에서 데이터를 모은다.

이 과정을 반복하면 정책은 조금씩 나아진다. PPO는 보통 여러 시뮬레이션 환경을 병렬로 돌릴 때 잘 어울린다. 예를 들어 로봇팔 목표 도달 작업을 64개 환경에서 동시에 실행하면 짧은 시간에 많은 경험을 모을 수 있다. 각 환경은 목표 위치, 초기 관절 상태, 장애물 위치가 조금씩 다를 수 있다. 이렇게 모은 데이터를 사용해 PPO는 안정적인 방향으로 정책을 업데이트한다.

PPO의 장점은 예측 가능한 학습 흐름이다. 설정이 비교적 단순하고, 다양한 작업에서 무난하게 작동하는 편이다. 그래서 새로운 강화학습 로봇 환경을 만들었을 때 첫 실험 알고리즘으로 PPO를 선택하는 경우가 많다. "일단 이 환경에서 학습이 되는지 보자"라는 목적에 잘 맞는다.

하지만 PPO에도 단점이 있다. PPO는 현재 정책으로 새로 모은 데이터를 주로 사용한다. 이를 온폴리시 방식이라고 한다. 온폴리시는 말 그대로 "지금 정책이 만든 경험으로 지금 정책을 학습한다"는 뜻이다. 오래된 경험은 정책이 바뀌면 가치가 떨어진다고 보고 많이 재사용하지 않는다.

이 특성 때문에 PPO는 샘플 효율이 낮을 수 있다. 샘플 효율이 낮다는 말은 같은 수준의 성능을 얻기 위해 더 많은 환경 상호작용이 필요하다는 뜻이다. 시뮬레이션에서는 병렬 환경을 많이 돌려 해결할 수 있지만, 실제 로봇에서는 큰 부담이 된다. 실제 로봇팔을 수백만 스텝 움직이는 것은 시간도 오래 걸리고 장비에도 무리가 간다.

그래서 PPO는 특히 다음 상황에서 잘 맞는다.

  • 병렬 시뮬레이션을 많이 실행할 수 있다.

  • 안정적인 학습 곡선이 중요하다.

  • 보상이 어느 정도 잘 설계되어 있고 작업 초기화가 쉽다.

  • 로봇 자세 제어, 균형 제어처럼 정책 업데이트의 안정성이 중요하다.

PPO는 튼튼한 트럭 같은 알고리즘이다. 최고 속도가 항상 빠른 것은 아니지만, 많은 환경에서 믿고 출발해 볼 수 있다.

SAC: 잘하는 것뿐 아니라 다양하게 시도하는 것까지 배우기

SAC는 Soft Actor-Critic의 약자다. SAC의 핵심은 엔트로피다. 엔트로피는 여기서 행동의 다양성 또는 불확실성을 뜻한다. 정책이 항상 똑같은 행동만 고르면 엔트로피가 낮고, 여러 행동을 적절히 시도하면 엔트로피가 높다.

강화학습에서 탐험은 매우 중요하다. 로봇팔이 처음 우연히 목표에 가까워지는 행동을 해 보지 못하면, 그 행동이 좋은지 알 방법이 없다. 이동 로봇이 항상 같은 방향으로만 회전하면, 반대 방향으로 돌아가는 더 짧은 경로를 발견하지 못한다. 강화학습의 어려움 중 하나는 "지금 잘하는 행동을 계속할 것인가, 아니면 아직 모르는 행동을 시도할 것인가"의 균형이다.

SAC는 이 균형을 학습 목표 안에 직접 넣는다. 단순히 보상만 크게 만들려고 하지 않고, 보상도 크게 만들면서 행동의 다양성도 유지하려고 한다. 그래서 학습 초반에는 적극적으로 탐험하고, 학습이 진행되면서 좋은 행동을 더 자주 선택한다.

SAC의 또 다른 중요한 특징은 오프폴리시 방식이라는 점이다. 오프폴리시는 과거에 모아 둔 경험도 다시 사용할 수 있다는 뜻이다. SAC는 replay buffer라는 저장소에 경험을 쌓아 둔다. 로봇이 어떤 상태에서 어떤 행동을 했고, 어떤 보상을 받았으며, 다음 상태가 무엇이었는지를 계속 저장한다.

replay_buffer.add(state, action, reward, next_state, done)

학습할 때는 이 저장소에서 경험을 무작위로 꺼내 Actor와 Critic을 업데이트한다. 방금 만든 경험뿐 아니라 이전에 만든 경험도 여러 번 재사용할 수 있다. 그래서 SAC는 PPO보다 샘플 효율이 좋은 경우가 많다. 실제 로봇 데이터가 비싸거나 시뮬레이션 속도가 느린 상황에서는 이 장점이 크다.

SAC의 기본 흐름은 다음과 같다.

  1. 현재 정책으로 환경에서 행동을 실행한다.

  2. 경험을 replay buffer에 저장한다.

  3. buffer에서 미니배치를 샘플링한다.

  4. Critic이 상태-행동의 가치를 더 정확히 예측하도록 학습한다.

  5. Actor가 높은 가치와 충분한 엔트로피를 함께 갖도록 학습한다.

  6. 학습된 정책으로 다시 환경을 탐험한다.

SAC는 연속 행동 공간과 잘 어울린다. 정책은 보통 하나의 행동만 딱 출력하지 않고, 행동 분포를 출력한다. 예를 들어 "관절 속도는 0.1이 가장 그럴듯하지만, 0.08이나 0.12도 가능하다"는 식이다. 학습 중에는 이 분포에서 행동을 샘플링하므로 탐험이 자연스럽게 일어난다. 평가나 실제 실행 단계에서는 분포의 평균에 가까운 안정적인 행동을 사용할 수 있다.

SAC의 장점은 탐험과 샘플 효율이다. 복잡한 접촉 작업이나 다양한 시도가 필요한 조작 작업에서 유리할 수 있다. 예를 들어 문고리를 돌리거나, 물체를 밀어 정렬하거나, 그리퍼로 미끄러지는 물체를 잡는 작업은 단순히 목표에 직선으로 다가가는 것보다 훨씬 많은 시행착오가 필요하다. 이런 경우 다양한 행동을 시도하고 과거 경험을 재사용하는 SAC의 특성이 도움이 된다.

물론 SAC도 만능은 아니다. replay buffer, 엔트로피 온도, Critic 업데이트 등 신경 써야 할 요소가 많다. 하이퍼파라미터에 따라 학습이 느려지거나 불안정해질 수 있다. 또한 실제 로봇에 적용할 때는 탐험 행동이 안전 범위를 넘지 않도록 특히 조심해야 한다. SAC가 다양한 행동을 시도한다는 것은 장점이지만, 물리 세계에서는 위험 요소가 될 수도 있다.

SAC는 탐험심 많은 연구원 같은 알고리즘이다. 이미 아는 길만 걷지 않고 새로운 가능성을 계속 시험한다. 대신 실험실 안전 규칙을 단단히 세워 두어야 한다.

PPO와 SAC를 나란히 보기

PPO와 SAC는 모두 로봇 제어에서 강력한 선택지다. 그러나 둘이 데이터를 바라보는 방식은 다르다. PPO는 현재 정책으로 신선한 데이터를 모아 조심스럽게 업데이트한다. SAC는 경험 저장소를 두고 과거 데이터를 재사용하면서 탐험을 장려한다.

다음 표는 실험 설계 관점에서 두 알고리즘을 비교한 것이다.

구분PPOSAC
학습 방식온폴리시오프폴리시
핵심 아이디어정책을 너무 크게 바꾸지 않고 안정적으로 개선보상과 행동 다양성을 함께 최대화
경험 재사용제한적replay buffer로 적극 재사용
샘플 효율상대적으로 낮은 편상대적으로 높은 편
병렬 시뮬레이션매우 잘 어울림가능하지만 buffer 관리가 중요
탐험 방식정책의 확률성과 환경 다양성에 의존엔트로피 보상으로 탐험을 명시적으로 장려
장점안정적이고 시작하기 쉬움복잡한 연속 제어와 데이터 재사용에 강함
주의점많은 환경 상호작용이 필요할 수 있음설정 요소가 많고 탐험 안전 관리가 중요

처음 강화학습 로봇 실험을 설계한다면 이렇게 생각해 볼 수 있다. 시뮬레이션을 많이 병렬로 돌릴 수 있고, 학습 안정성을 우선한다면 PPO가 좋은 출발점이다. 반대로 데이터 수집 비용이 크고, 다양한 시행착오가 필요한 연속 조작 작업이라면 SAC를 고려할 만하다.

하지만 실제 선택은 항상 작업, 환경, 보상, 시뮬레이터 속도, 안전 제약에 따라 달라진다. 같은 로봇팔 도달 작업이라도 목표가 단순한 3D 위치인지, 장애물을 피해 좁은 공간으로 들어가야 하는지에 따라 난이도가 달라진다. 알고리즘 선택은 정답을 찍는 문제가 아니라 실험 설계의 일부다.

관절 위치, 속도, 힘: 무엇을 행동으로 출력할 것인가

PPO와 SAC를 선택하기 전에 더 근본적인 질문이 있다. 정책이 무엇을 출력하게 할 것인가? 로봇에서 행동 공간을 설계하는 방식은 학습 난이도와 안전성을 크게 좌우한다.

로봇팔에서 자주 사용하는 행동 표현은 관절 위치 목표, 관절 속도, 토크 또는 힘 명령이다. 각각의 성격이 다르다.

관절 위치 목표는 정책이 다음 관절 각도를 출력하는 방식이다. 예를 들어 현재 2번 관절이 0.5라디안일 때 정책이 0.52라디안을 목표로 줄 수 있다. 이 방식은 비교적 안정적이다. 실제 로봇의 하위 위치 제어기가 목표 각도를 따라가므로 급격한 움직임을 줄이기 쉽다. 다만 너무 큰 위치 변화량을 허용하면 로봇이 튀듯이 움직일 수 있으므로 한 스텝당 변화량을 제한하는 것이 좋다.

관절 속도 명령은 정책이 각 관절을 어느 속도로 움직일지 출력하는 방식이다. 목표에 조금씩 다가가는 작업에 잘 어울린다. 엔드 이펙터 위치를 조정하거나, 시각 피드백을 보면서 물체에 접근하는 경우 자연스럽게 사용할 수 있다. 하지만 속도 명령도 누적되면 예상보다 멀리 갈 수 있으므로 작업 공간 제한과 정지 조건이 필요하다.

토크 또는 힘 명령은 가장 직접적인 제어 방식이다. 정책이 관절에 가할 힘을 출력한다. 균형 제어, 보행, 민첩한 조작처럼 물리적 상호작용이 중요한 작업에서 강력할 수 있다. 하지만 학습이 어렵고 안전 관리도 까다롭다. 실제 로봇에서 토크 제어를 사용할 때는 낮은 수준의 제어 안정성, 충돌 감지, 힘 제한이 반드시 필요하다.

이 세 표현을 간단히 정리하면 다음과 같다.

행동 표현장점주의점어울리는 작업
관절 위치 목표안정적이고 구현이 쉬움변화량 제한 필요로봇팔 도달, 단순 Pick and Place
관절 속도부드러운 폐루프 제어에 적합누적 오차와 작업 공간 이탈 주의시각 기반 접근, 이동 로봇 속도 제어
토크·힘물리 상호작용을 세밀하게 제어학습과 안전 관리가 어려움균형 제어, 보행, 접촉 조작

처음 로봇팔 강화학습을 실험한다면 관절 위치 변화량이나 엔드 이펙터 위치 변화량부터 시작하는 편이 좋다. 정책이 너무 낮은 수준의 힘 제어까지 직접 맡으면 학습 난이도가 급격히 올라간다. 강화학습 정책은 높은 수준의 목표 변화량을 출력하고, 실제 안정화는 기존 제어기가 담당하도록 나누는 구조가 실용적이다.

이것은 이 책 전체의 중요한 흐름과도 맞닿아 있다. AI가 모든 것을 직접 하는 것이 아니라, AI 정책과 전통적 제어기를 계층적으로 결합하는 것이다. 로봇 AI는 뇌만으로 움직이지 않는다. 반사 신경, 근육, 안전 장치가 함께 있어야 한다.

로봇팔 목표 도달에서는 무엇을 고를까

다음 장에서 우리는 로봇팔이 목표 위치에 도달하도록 학습하는 예제를 다룰 것이다. 이 작업은 PPO와 SAC를 비교해 보기 좋은 출발점이다. 목표가 명확하고, 보상 설계도 비교적 직관적이며, 성공 여부를 판단하기 쉽기 때문이다.

가장 단순한 보상은 엔드 이펙터와 목표 지점 사이의 거리를 줄이는 것이다. 손끝이 목표에 가까워질수록 보상을 높게 주고, 일정 거리 안에 들어오면 성공 보상을 준다. 여기에 관절 움직임을 너무 크게 하지 않도록 작은 패널티를 추가할 수 있다.

이런 목표 도달 작업에서는 PPO가 좋은 첫 선택이 될 수 있다. 병렬 시뮬레이션에서 여러 목표 위치를 동시에 연습시키면 안정적으로 정책이 개선되는 모습을 관찰하기 쉽다. 학습 곡선도 비교적 해석하기 좋다. 성공률이 천천히 올라가고 평균 거리가 줄어든다면 정책이 제대로 배우고 있다고 볼 수 있다.

SAC도 잘 사용할 수 있다. 특히 시뮬레이션 속도가 느리거나, 한 번 수집한 경험을 최대한 재사용하고 싶다면 SAC가 유리할 수 있다. 목표 위치가 다양하고, 초기 자세도 다양하며, 장애물까지 포함된다면 SAC의 탐험 능력이 도움이 될 수 있다.

실전에서는 다음 순서로 접근해 볼 수 있다.

  1. 장애물 없는 목표 도달 작업을 만든다.

  2. 관절 위치 변화량 또는 엔드 이펙터 위치 변화량을 행동으로 둔다.

  3. 거리 기반 보상과 성공 보상을 설계한다.

  4. PPO로 먼저 학습이 되는지 확인한다.

  5. 같은 환경에서 SAC를 실행해 샘플 효율과 최종 성능을 비교한다.

  6. 장애물, 랜덤 초기 자세, 센서 노이즈를 추가해 난이도를 높인다.

이렇게 하면 알고리즘의 차이를 책이나 논문 설명이 아니라 직접 그래프로 확인할 수 있다. 어느 알고리즘이 항상 이긴다고 단정하기보다, 내 환경에서 어떤 특성이 나타나는지 보는 것이 중요하다.

이동 로봇 주행에서는 무엇을 볼까

이동 로봇의 강화학습은 로봇팔과 조금 다르다. 행동은 보통 선속도와 각속도로 표현된다.

action = [linear_velocity, angular_velocity]

목표는 특정 지점까지 이동하거나, 장애물을 피하거나, 복도를 따라가거나, 사람과 안전 거리를 유지하는 것일 수 있다. 상태에는 라이다 거리 정보, 목표 방향, 현재 속도, 지도 정보, 카메라 특징 등이 들어갈 수 있다.

이동 로봇 주행에서는 안전한 탐험이 특히 중요하다. 로봇이 장애물을 피하는 법을 배우려면 장애물 근처 상황을 경험해야 하지만, 실제로 계속 부딪히면 안 된다. 그래서 시뮬레이션에서 충분히 학습한 뒤, 실제 로봇에는 속도 제한과 비상 정지 조건을 강하게 걸어야 한다.

PPO는 많은 병렬 환경에서 다양한 맵을 학습할 때 유용하다. 예를 들어 복도, 방, 좁은 문, 랜덤 장애물이 있는 환경을 동시에 돌리며 정책을 학습할 수 있다. 정책 업데이트가 비교적 안정적이므로 주행 행동이 갑자기 망가지는 일을 줄이기 쉽다.

SAC는 센서 노이즈가 있거나 장애물 배치가 복잡해 다양한 행동 시도가 필요한 경우에 좋을 수 있다. replay buffer에 여러 주행 상황이 쌓이면, 정책은 과거의 충돌 직전 경험이나 우회 성공 경험을 반복해서 학습할 수 있다. 다만 학습 중 탐험 행동이 너무 공격적으로 나오지 않도록 속도 범위와 충돌 패널티를 신중히 설계해야 한다.

이동 로봇에서는 알고리즘보다도 보상과 안전 조건이 성능을 좌우하는 경우가 많다. 목표에 빨리 도착하는 보상만 크게 주면 로봇은 무리하게 직진하려 할 수 있다. 장애물 회피, 부드러운 회전, 사람과의 거리, 정지 조건을 함께 고려해야 한다. 강화학습 정책은 목적지까지 가는 길을 배우지만, 안전 제어기는 언제든 브레이크를 밟을 수 있어야 한다.

균형 제어에서는 안정성과 탐험이 맞붙는다

두 발 로봇, 사족 보행 로봇, 드론 자세 제어처럼 균형이 중요한 작업은 강화학습의 대표적인 응용 분야다. 이런 작업에서는 행동이 토크나 힘에 가까운 낮은 수준 제어로 내려가는 경우가 많다. 로봇은 아주 짧은 시간 간격으로 몸의 기울기, 속도, 접촉 상태를 보고 다음 힘을 정해야 한다.

균형 제어에서는 작은 실수가 바로 넘어짐으로 이어진다. 그래서 PPO의 안정적인 업데이트가 큰 장점이 될 수 있다. 실제로 많은 시뮬레이션 기반 자세 제어와 보행 학습에서 PPO 계열 접근이 널리 사용된다. 병렬 환경에서 수천 개의 로봇을 동시에 넘어뜨리고 다시 일으키며 학습시키면, 실제 로봇 하나로는 불가능한 경험량을 확보할 수 있다.

SAC 역시 균형 제어에 사용할 수 있지만, 탐험 행동이 물리적으로 위험한 명령을 만들 수 있으므로 행동 제한이 중요하다. 특히 실제 로봇으로 옮길 때는 관절 토크 제한, 자세 안정화 제어기, 낙상 감지, 비상 정지 장치가 필요하다. 시뮬레이션에서 잘 걷는 정책이라도 현실에서는 바닥 마찰, 모터 응답 지연, 센서 노이즈 때문에 흔들릴 수 있다.

균형 제어에서 알고리즘을 고를 때는 다음 요소를 함께 보아야 한다.

  • 시뮬레이션을 얼마나 많이 병렬로 실행할 수 있는가.

  • 행동이 위치, 속도, 토크 중 어느 수준인가.

  • 넘어짐이나 충돌을 얼마나 자주 허용할 수 있는가.

  • 실제 로봇으로 옮길 때 안전 제어 계층이 충분한가.

균형 제어는 강화학습이 빛나는 영역이지만, 동시에 강화학습이 얼마나 위험할 수 있는지 보여 주는 영역이기도 하다. 잘 학습된 정책은 놀라울 정도로 자연스럽게 움직인다. 그러나 그 뒤에는 수많은 실패, 정교한 보상, 강한 안전 제한, 시뮬레이션과 현실 차이를 줄이기 위한 노력이 있다.

알고리즘보다 먼저 확인해야 할 것들

PPO와 SAC 중 무엇을 쓸지 고민하기 전에, 강화학습 실험 자체가 제대로 설계되었는지 확인해야 한다. 알고리즘을 바꾸어도 환경 정의가 잘못되어 있으면 학습은 나아지지 않는다.

첫째, 상태가 충분한 정보를 담고 있어야 한다. 로봇팔이 목표 위치로 가야 하는데 목표 위치를 상태에 넣지 않았다면 정책은 무엇을 해야 할지 알 수 없다. 이동 로봇이 장애물을 피해야 하는데 라이다나 거리 정보가 없다면 충돌을 피하기 어렵다. 강화학습 정책은 주어진 상태 안에서만 판단한다.

둘째, 행동 범위가 현실적이어야 한다. 너무 작은 행동 범위는 로봇을 답답하게 만들고, 너무 큰 행동 범위는 학습을 불안정하게 한다. 로봇팔이 한 스텝에 1cm씩 움직이는 것과 30cm씩 움직이는 것은 완전히 다른 문제다. 처음에는 작은 행동 범위로 안정적으로 학습한 뒤 점차 조정하는 편이 좋다.

셋째, 보상이 행동을 올바른 방향으로 이끌어야 한다. 목표에 가까워지는 보상, 성공 보상, 충돌 패널티, 에너지 패널티가 서로 충돌하면 로봇은 이상한 타협을 배울 수 있다. 예를 들어 에너지 패널티가 너무 크면 로봇은 움직이지 않는 것이 최선이라고 판단할 수 있다.

넷째, 종료 조건이 명확해야 한다. 성공했을 때 에피소드를 끝낼지, 충돌했을 때 즉시 종료할지, 시간 제한은 몇 스텝으로 둘지 정해야 한다. 종료 조건은 학습 데이터의 형태를 바꾼다. 너무 빨리 끝나면 회복 행동을 배울 기회가 줄고, 너무 오래 끌면 실패 경험이 불필요하게 길어진다.

다섯째, 평가 환경을 따로 두어야 한다. 학습 중에는 탐험 때문에 행동이 흔들릴 수 있다. 따라서 일정 주기마다 탐험을 줄인 평가 모드로 정책을 실행해 성공률, 평균 거리, 충돌 횟수, 에너지 사용량을 기록해야 한다. 학습 보상만 보고 좋은 정책이라고 판단하면 위험하다.

좋은 강화학습 실험은 알고리즘 이름보다 로그가 먼저 말해 준다. 성공률이 오르는가? 충돌이 줄어드는가? 행동이 부드러워지는가? 목표 위치가 바뀌어도 작동하는가? 이런 질문에 답할 수 있어야 PPO와 SAC의 차이도 의미 있게 비교할 수 있다.

PPO와 SAC 선택 기준

이제 선택 기준을 조금 더 실용적으로 정리해 보자. 물론 모든 실험에 딱 맞는 공식은 없다. 하지만 첫 결정을 내릴 때 도움이 되는 기준은 있다.

PPO를 먼저 고려할 만한 경우는 다음과 같다.

  • 시뮬레이션 환경을 많이 병렬로 실행할 수 있다.

  • 학습 안정성과 구현 단순성이 중요하다.

  • 처음 만든 환경에서 기준 성능을 확인하고 싶다.

  • 로봇팔 목표 도달, 자세 제어, 기본 보행처럼 반복 연습이 쉬운 작업이다.

  • 정책 업데이트가 갑자기 커지는 것을 피하고 싶다.

SAC를 먼저 고려할 만한 경우는 다음과 같다.

  • 환경 상호작용 비용이 크고 경험 재사용이 중요하다.

  • 연속 행동 공간에서 섬세한 제어가 필요하다.

  • 탐험이 성능을 좌우하는 복잡한 조작 작업이다.

  • replay buffer를 관리할 수 있고 하이퍼파라미터 조정 여유가 있다.

  • 시뮬레이션 속도가 느리거나 실제 데이터 일부를 활용하고 싶다.

둘 중 하나만 영원히 선택해야 하는 것은 아니다. 오히려 실전에서는 PPO로 환경과 보상 설계를 먼저 검증하고, 이후 SAC로 샘플 효율이나 성능을 비교하는 방식이 좋다. 또는 SAC로 복잡한 조작 작업의 가능성을 탐색하고, 안정성이 필요한 배포 단계에서는 별도의 안전 제어기와 결합해 사용하기도 한다.

중요한 것은 알고리즘을 "마법 주문"처럼 대하지 않는 것이다. PPO를 쓰면 안정적일 것이라는 기대가 있지만, 보상이 잘못되면 안정적으로 나쁜 행동을 배울 수 있다. SAC를 쓰면 탐험을 잘할 것이라는 기대가 있지만, 행동 제한이 없으면 위험한 탐험을 할 수 있다. 알고리즘은 방향을 잡아 주는 도구이고, 로봇 시스템 전체 설계가 그 도구를 안전하게 사용하게 만든다.

학습 루프를 코드처럼 상상하기

PPO와 SAC는 구현 세부사항이 다르지만, 큰 그림에서는 같은 강화학습 루프 안에 있다. 로봇이 상태를 보고 행동하고, 환경이 보상과 다음 상태를 돌려주고, 알고리즘이 정책을 업데이트한다.

PPO의 학습 루프를 아주 단순화하면 다음과 같다.

policy = initialize_policy()
critic = initialize_value_model()

while training:
    trajectories = collect_rollouts(policy, parallel_envs)
    advantages = estimate_advantages(trajectories, critic)
    update_policy_with_small_change(policy, trajectories, advantages)
    update_critic(critic, trajectories)
    evaluate(policy)

여기서 핵심은 collect_rollouts와 update_policy_with_small_change다. 현재 정책으로 경험을 모으고, 정책이 너무 멀리 변하지 않도록 조심스럽게 업데이트한다.

SAC의 학습 루프는 조금 다르게 생겼다.

policy = initialize_stochastic_policy()
critics = initialize_q_models()
buffer = ReplayBuffer()

while training:
    action = sample_action(policy, state)
    next_state, reward, done = env.step(action)
    buffer.add(state, action, reward, next_state, done)

    batch = buffer.sample()
    update_critics(critics, batch)
    update_policy_with_entropy(policy, critics, batch)
    evaluate(policy)

여기서 핵심은 ReplayBuffer와 update_policy_with_entropy다. 경험을 저장해 재사용하고, 보상뿐 아니라 행동 다양성도 고려해 정책을 업데이트한다.

이 정도의 구조를 이해하면 라이브러리를 사용할 때도 훨씬 덜 막막하다. Stable-Baselines3, RLlib, Isaac Lab, Gymnasium 기반 환경처럼 어떤 도구를 쓰더라도 결국 환경은 reset()과 step(action)을 제공하고, 알고리즘은 그 위에서 경험을 모아 정책을 업데이트한다. 도구 이름이 달라도 기본 흐름은 같다.

로봇 학습에서 평가해야 할 지표

강화학습에서는 평균 보상을 자주 본다. 하지만 로봇에서는 평균 보상 하나만으로 충분하지 않다. 보상은 우리가 설계한 숫자일 뿐이고, 실제로 원하는 행동을 정확히 반영하지 못할 수 있다. 그래서 로봇 실험에서는 여러 지표를 함께 보아야 한다.

로봇팔 목표 도달 작업이라면 성공률, 최종 거리, 평균 이동 시간, 충돌 횟수, 관절 속도 크기, 작업 공간 이탈 횟수를 기록할 수 있다. 이동 로봇 주행이라면 목표 도착률, 경로 길이, 충돌 횟수, 급회전 횟수, 사람과의 최소 거리, 정지 실패 횟수를 볼 수 있다. 균형 제어라면 넘어지지 않고 버틴 시간, 에너지 사용량, 발 접촉 안정성, 몸통 기울기 변화를 함께 봐야 한다.

이 지표들은 정책의 성격을 드러낸다. 평균 보상은 높은데 충돌 횟수가 많다면 보상 설계가 안전을 충분히 반영하지 못했을 수 있다. 성공률은 높은데 관절 움직임이 거칠다면 실제 로봇에서는 장비에 부담을 줄 수 있다. 최종 거리는 짧지만 시간이 너무 오래 걸린다면 실용적인 작업 정책으로는 부족할 수 있다.

PPO와 SAC를 비교할 때도 단순히 "누가 보상이 더 높은가"만 보지 않는 것이 좋다. 더 적은 환경 스텝으로 성공률이 올라가는지, 학습 곡선이 안정적인지, 평가 환경에서 일반화가 되는지, 행동이 부드럽고 안전한지 함께 확인해야 한다.

강화학습 결과 그래프를 볼 때는 이런 질문을 던져 보자.

  • 학습 보상과 평가 성공률이 함께 좋아지고 있는가.

  • 특정 시점 이후 정책 성능이 갑자기 무너지지 않는가.

  • 쉬운 초기 상태에서만 잘하고 어려운 초기 상태에서는 실패하지 않는가.

  • 행동 명령이 실제 로봇의 속도와 힘 제한 안에 들어오는가.

  • 실패했을 때 위험한 행동을 하는가, 아니면 멈추거나 회복하려 하는가.

좋은 정책은 높은 보상만 받는 정책이 아니다. 좋은 정책은 목표를 달성하면서도 안전하고, 부드럽고, 다양한 상황에서 무너지지 않는 정책이다.

강화학습 정책은 로봇 에이전트의 한 부품이다

이 책의 최종 목표는 자연어 명령을 받아 작업을 수행하는 AI 로봇 에이전트를 만드는 것이다. 그렇다면 PPO나 SAC로 학습한 정책은 그 안에서 어떤 역할을 할까?

정책은 로봇 스킬이 될 수 있다. 예를 들어 reach(target_pose)라는 스킬 내부에서 강화학습 정책이 엔드 이펙터를 목표 위치로 부드럽게 움직일 수 있다. navigate_to(goal) 스킬 안에서 정책이 장애물을 피하며 이동할 수 있다. balance() 스킬 안에서 정책이 로봇의 자세를 유지할 수 있다.

하지만 LLM이 "컵을 집어 오른쪽에 놓아줘"라는 명령을 받았다고 해서 PPO 정책이나 SAC 정책이 문장 전체를 직접 처리할 필요는 없다. 상위 에이전트는 작업을 분해하고, 필요한 스킬을 호출한다. 강화학습 정책은 그중 특정 제어 문제를 잘 수행하는 전문 기술자처럼 작동한다.

예를 들어 전체 흐름은 이렇게 나눌 수 있다.

자연어 명령
→ LLM이 작업 분해
→ 객체 검출로 컵 위치 확인
→ 좌표 변환으로 목표 자세 생성
→ 강화학습 reach 정책 또는 MoveIt2 경로 계획 호출
→ 그리퍼 제어
→ 성공 여부 확인
→ 실패 시 재계획

여기서 PPO나 SAC는 모든 단계를 대체하지 않는다. 대신 특정 단계에서 기존 제어 방식보다 더 유연한 행동을 제공할 수 있다. 특히 모델링이 어렵거나, 접촉이 복잡하거나, 센서 피드백을 보며 계속 조정해야 하는 작업에서 강화학습 정책이 강점을 보인다.

이 관점이 중요하다. 강화학습 알고리즘을 배운다고 해서 로봇 시스템 전체를 하나의 거대한 신경망으로 만들어야 하는 것은 아니다. 오히려 실용적인 로봇 에이전트는 모듈형이다. 인식은 비전 모델이 맡고, 계획은 LLM이나 작업 플래너가 맡고, 경로 계획은 MoveIt2가 맡고, 특정 제어 스킬은 PPO나 SAC 정책이 맡을 수 있다. 그리고 안전 제어는 모든 단계 아래에서 항상 작동한다.

다음 장으로 가기 전에

PPO와 SAC는 로봇 강화학습에서 자주 등장하는 두 개의 큰 축이다. PPO는 정책을 조심스럽게 조금씩 개선한다. 그래서 안정적인 실험 출발점으로 좋다. SAC는 보상과 탐험을 함께 고려하고, 경험을 재사용한다. 그래서 복잡한 연속 제어와 데이터 효율이 중요한 작업에서 강점을 보인다.

하지만 알고리즘 이름보다 중요한 것은 문제를 올바르게 정의하는 것이다. 상태에는 필요한 정보가 들어 있어야 하고, 행동은 로봇이 안전하게 실행할 수 있는 범위여야 하며, 보상은 원하는 행동을 제대로 유도해야 한다. 평가 지표는 평균 보상뿐 아니라 성공률, 충돌, 부드러움, 일반화까지 포함해야 한다.

다음 장에서는 이 개념을 실제 작업으로 가져간다. 로봇팔이 목표 지점에 도달하는 환경을 만들고, 상태와 행동을 정의하고, 보상을 설계한 뒤 학습 결과를 해석해 볼 것이다. 그때 PPO와 SAC는 더 이상 추상적인 알고리즘 이름이 아니다. 로봇팔이 어제보다 조금 더 정확하게 움직이도록 만드는 엔진이 된다.

책 목록

AI 로봇 에이전트 만들기: 비전·로봇팔·학습·LLM으로 자연어 명령을 실행하는 로봇

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기