Skip to main content
Summary

시연을 따라 하던 로봇에서 스스로 나아지는 로봇으로

앞선 장들에서 우리는 사람이 보여 준 행동을 로봇이 따라 배우는 모방학습을 살펴보았다. 사람이 조이스틱으로 로봇팔을 움직이고, 컵을 집는 과정을 기록하고, 그 데이터를 이용해 state → action 모델을 학습했다. 이것은 로봇에게 "이 상황에서는 이렇게 움직이면 돼"라고 예시를 많이 보여 주는 방식이다.

하지만 실제 환경은 늘 예시처럼 흘러가지 않는다. 컵이 조금 더 멀리 있을 수 있고, 그리퍼가 미세하게 빗나갈 수 있으며, 물체가 예상보다 미끄러울 수도 있다. 사람이 보여 준 경로에서 조금만 벗어나도 로봇은 "이제 어떻게 하지?"라는 상황에 놓인다.

강화학습은 바로 이 지점에서 등장한다.

강화학습은 로봇에게 정답 행동을 하나하나 알려 주는 대신, 어떤 행동이 좋은 결과로 이어지는지 경험을 통해 배우게 한다. 로봇은 행동을 해 보고, 결과를 보고, 점수를 받고, 다음에는 조금 더 나은 행동을 선택하도록 자신을 바꾼다. 사람으로 치면 자전거를 배우는 과정과 비슷하다. 처음에는 중심을 잃고 흔들리지만, 넘어지지 않기 위해 몸을 조금씩 조정하면서 결국 균형 잡는 법을 익힌다.

모방학습이 "잘하는 사람을 따라 하기"라면, 강화학습은 "직접 해 보며 더 잘하는 방법을 찾기"에 가깝다.

로봇에게 이 능력은 매우 중요하다. 로봇은 물리 세계에서 움직이기 때문이다. 물리 세계에서는 작은 오차가 결과를 크게 바꾼다. 1cm 덜 접근하면 물체를 못 잡고, 1cm 더 접근하면 물체를 밀어 버릴 수 있다. 강화학습은 이런 시행착오 속에서 로봇이 더 안정적인 행동을 찾아가도록 만드는 강력한 틀이다.

이번 장에서는 강화학습을 깊은 수식이 아니라 로봇 시스템을 이해하기 위한 언어로 배운다. 핵심 단어는 여섯 가지다. Agent, Environment, State, Action, Reward, Policy. 이 여섯 단어를 이해하면 이후 장에서 다룰 보상 설계, 시뮬레이션 학습, PPO, SAC, 로봇팔 목표 도달 학습, Sim2Real의 흐름이 훨씬 선명하게 보인다.

강화학습의 기본 구조

강화학습을 한 문장으로 말하면

강화학습은 에이전트가 환경 안에서 상태를 관찰하고, 행동을 선택하고, 그 결과로 보상을 받으며, 장기적으로 더 큰 보상을 얻는 정책을 학습하는 방법이다.

조금 길게 느껴질 수 있으니 로봇팔 예시로 바꿔 보자.

테이블 위에 파란 블록이 있다. 로봇팔의 목표는 그 블록 가까이 그리퍼를 이동시키는 것이다. 처음 로봇은 어떤 관절을 얼마나 움직여야 하는지 잘 모른다. 그래서 작은 행동을 시도한다. 관절 1을 조금 돌려 보고, 관절 2를 조금 내려 보고, 그리퍼 위치가 블록에 가까워졌는지 확인한다. 가까워졌다면 좋은 점수를 받고, 멀어졌다면 낮은 점수를 받는다. 이 경험이 반복되면 로봇은 점점 "이런 상태에서는 이 방향으로 움직이는 게 좋다"는 규칙을 배운다.

이때 로봇팔을 움직이는 학습 주체가 에이전트다. 테이블, 물체, 로봇팔의 물리적 움직임, 센서 입력을 포함한 전체 세계가 환경이다. 로봇팔의 현재 관절 각도와 물체 위치 같은 정보가 상태다. 관절을 얼마나 움직일지 정하는 명령이 행동이다. 목표에 가까워졌는지 알려 주는 숫자가 보상이다. 그리고 상태를 보고 행동을 고르는 방법이 정책이다.

강화학습의 기본 반복은 다음과 같다.

  1. 에이전트가 현재 상태를 관찰한다.

  2. 정책에 따라 행동을 선택한다.

  3. 환경이 행동의 영향을 받아 변한다.

  4. 에이전트는 다음 상태와 보상을 받는다.

  5. 이 경험을 이용해 정책을 개선한다.

이 구조는 아주 단순해 보이지만, 로봇 학습의 거의 모든 문제를 이 틀로 표현할 수 있다. 로봇팔이 목표 위치에 도달하는 문제, 이동 로봇이 복도를 지나 목적지로 가는 문제, 그리퍼가 미끄러운 물체를 안정적으로 집는 문제, 드론이 장애물을 피하며 비행하는 문제 모두 이 반복 구조 안에 들어갈 수 있다.

Agent: 행동을 선택하는 학습 주체

강화학습에서 에이전트는 행동을 선택하고 학습하는 주체다. 로봇 책에서 에이전트라고 하면 물리적인 로봇 전체를 떠올리기 쉽지만, 조금 더 정확히 말하면 에이전트는 로봇 안에서 의사결정을 담당하는 학습 시스템이다.

예를 들어 로봇팔이 컵을 집는다고 해 보자. 실제 금속 팔, 모터, 그리퍼, 카메라는 물리 장치다. 강화학습 에이전트는 그 장치 위에서 "지금 관절을 어느 방향으로 얼마나 움직일까?"를 결정하는 정책 모델이다. 이 모델은 작은 신경망일 수도 있고, 카메라 이미지와 관절 상태를 함께 입력받는 더 큰 모델일 수도 있다.

에이전트는 반드시 로봇 전체를 직접 제어할 필요는 없다. 어떤 시스템에서는 에이전트가 낮은 수준의 모터 명령을 낸다. 또 다른 시스템에서는 에이전트가 왼쪽으로 5cm 이동, 그리퍼 닫기, 다시 접근하기 같은 중간 수준 명령을 선택한다. 나중에 LLM 로봇 에이전트를 다룰 때는 더 높은 수준에서 detect_object, pick, place 같은 스킬을 고르는 에이전트도 보게 된다.

중요한 점은 이것이다. 강화학습의 에이전트는 그냥 명령을 실행하는 부품이 아니라, 경험을 바탕으로 더 나은 선택을 하도록 바뀌는 시스템이다.

로봇팔 목표 도달 문제에서 에이전트는 처음에는 어설픈 행동을 한다. 목표와 반대 방향으로 움직일 수도 있고, 너무 크게 움직여 흔들릴 수도 있다. 하지만 행동과 결과를 반복해서 관찰하면서 점차 목표에 가까워지는 행동을 더 자주 선택하게 된다. 이 변화가 바로 학습이다.

Environment: 에이전트가 부딪히는 세계

환경은 에이전트가 행동을 실행하는 무대다. 로봇에서 환경은 단순한 게임 화면이 아니다. 중력, 마찰, 관절 제한, 모터 지연, 센서 노이즈, 물체의 질량, 바닥의 미끄러움까지 포함하는 물리 세계다.

시뮬레이션에서 학습한다면 환경은 물리 엔진으로 만들어진 가상 세계다. 예를 들어 테이블, 로봇팔, 블록, 카메라, 충돌 계산, 중력 설정이 모두 시뮬레이션 환경에 들어간다. 실제 로봇에서 학습한다면 환경은 실험실 그 자체다. 테이블 위의 물체, 조명, 카메라 위치, 사람이 옆에서 움직이는 상황까지 모두 환경의 일부가 된다.

환경은 에이전트의 행동을 받아 다음 상태와 보상을 돌려준다. 로봇팔이 관절을 움직이면 환경은 물리 계산 또는 실제 센서 측정을 통해 로봇팔의 새로운 위치를 만들어 낸다. 그리고 목표에 가까워졌는지, 충돌했는지, 물체를 집었는지에 따라 보상을 계산한다.

로봇 강화학습에서 환경을 설계하는 일은 매우 중요하다. 환경이 부정확하면 에이전트는 잘못된 세계에서 잘하는 법을 배운다. 시뮬레이션에서는 완벽하게 성공했는데 실제 로봇에서는 물체를 자꾸 밀어 버리는 일이 생기는 이유도 여기에 있다. 시뮬레이션의 마찰, 카메라 노이즈, 모터 응답이 현실과 다르면 정책이 현실에서 흔들린다.

그래서 강화학습에서는 "무엇을 학습할 것인가"만큼 "어떤 환경에서 학습할 것인가"가 중요하다. 이 문제는 뒤에서 시뮬레이션 학습과 Sim2Real을 다룰 때 다시 깊게 살펴볼 것이다.

State: 지금 어떤 상황인가

상태는 에이전트가 행동을 선택하기 위해 사용하는 현재 상황 정보다. 로봇팔이라면 현재 관절 각도, 관절 속도, 그리퍼 위치, 물체 위치, 목표 위치 같은 정보가 상태가 될 수 있다. 이동 로봇이라면 현재 위치, 방향, 라이다 거리, 목표 지점까지의 거리, 주변 장애물 정보가 상태가 될 수 있다.

강화학습에서는 보통 상태를 s로 표시한다. 현재 시점을 t라고 하면 현재 상태는 s_t라고 쓴다. 다음 순간의 상태는 s_{t+1}이다.

로봇에서 상태를 설계할 때는 다음 질문이 중요하다.

"에이전트가 좋은 행동을 선택하려면 무엇을 알아야 할까?"

컵을 집는 로봇팔이 있다고 하자. 로봇이 컵 위치를 모른다면 아무리 좋은 학습 알고리즘을 써도 컵을 안정적으로 집기 어렵다. 그리퍼가 열려 있는지 닫혀 있는지 모른다면 이미 물체를 잡았는지 판단하기 어렵다. 관절 속도를 모르면 너무 빠르게 움직이다가 진동하거나 충돌할 수 있다.

상태에는 여러 종류의 정보가 들어갈 수 있다.

상태 정보예시의미
로봇 자체 상태관절 각도, 관절 속도, 엔드 이펙터 위치로봇이 지금 어떤 자세인지 알려 준다
환경 상태물체 위치, 장애물 위치, 목표 위치로봇이 무엇을 향해 움직여야 하는지 알려 준다
센서 상태카메라 이미지, 깊이 이미지, 힘/토크 센서직접 측정한 세계의 단서를 제공한다
작업 상태그리퍼 열림 여부, 물체 파지 여부, 남은 시간작업이 어느 단계에 있는지 알려 준다

여기서 한 가지를 구분해야 한다. 엄밀히 말하면 로봇이 센서로 받는 정보는 상태라기보다 관찰, 즉 observation이라고 부르는 경우가 많다. 상태는 세계의 실제 완전한 상황이고, 관찰은 로봇이 센서로 볼 수 있는 일부 정보다.

예를 들어 컵의 뒷면은 카메라에 보이지 않을 수 있다. 상자 안의 물체 무게는 카메라 이미지로는 알 수 없다. 즉 로봇은 세계 전체를 완벽히 아는 것이 아니라, 제한된 센서 정보를 바탕으로 행동해야 한다. 하지만 처음 강화학습을 배울 때는 상태와 관찰을 너무 엄격하게 나누기보다, "에이전트가 현재 판단에 사용하는 입력 정보"라고 이해해도 충분하다.

중요한 것은 상태 표현이 행동의 품질을 크게 좌우한다는 점이다. 좋은 상태는 에이전트가 상황을 쉽게 이해하도록 돕는다. 나쁜 상태는 중요한 단서를 빼먹거나 불필요한 잡음을 너무 많이 담아 학습을 어렵게 만든다.

Action: 로봇이 할 수 있는 선택

행동은 에이전트가 환경에 가하는 명령이다. 강화학습에서는 행동을 a로 표시한다. 현재 상태 s_t에서 선택한 행동은 a_t다.

로봇에서 행동은 문제를 어떤 수준으로 정의하느냐에 따라 달라진다. 아주 낮은 수준에서는 각 모터에 보낼 토크나 속도 명령이 행동이 될 수 있다. 조금 높은 수준에서는 엔드 이펙터를 x, y, z 방향으로 몇 cm 움직이라는 명령이 행동이 될 수 있다. 더 높은 수준에서는 pick, place, move_to 같은 스킬 선택이 행동이 될 수도 있다.

예를 들어 같은 컵 집기 문제도 행동을 다음처럼 다르게 정의할 수 있다.

행동 수준행동 예시특징
모터 수준각 관절 토크 직접 출력매우 세밀하지만 학습이 어렵고 위험할 수 있다
관절 수준각 관절 목표 속도 출력로봇팔 제어에서 자주 쓰이며 연속 행동 공간을 만든다
엔드 이펙터 수준그리퍼를 x축으로 2cm 이동직관적이고 작업 목표와 연결하기 쉽다
스킬 수준approach, grasp, lift 선택안전 제어와 결합하기 쉽지만 세밀한 동작은 별도 제어기가 맡아야 한다

강화학습 교재에서 자주 나오는 간단한 예시는 격자 세계다. 에이전트가 위, 아래, 왼쪽, 오른쪽 중 하나를 선택해 움직인다. 이런 행동은 이산 행동이다. 선택지가 몇 개로 딱 나뉘어 있다.

하지만 로봇 제어에서는 행동이 대부분 연속적이다. 관절을 0.1라디안 움직일 수도 있고, 0.11라디안 움직일 수도 있고, 0.111라디안 움직일 수도 있다. 그리퍼를 앞으로 1cm 보낼 수도 있고 1.2cm 보낼 수도 있다. 행동 선택지가 사실상 무한히 많다.

이 연속 행동 공간이 로봇 강화학습을 어렵게 만든다. 게임에서 "왼쪽으로 갈까, 오른쪽으로 갈까?"를 고르는 것과 달리, 로봇은 "어느 관절을 어느 속도로 얼마나 부드럽게 움직일까?"를 정해야 한다. 조금만 과격한 행동을 해도 진동, 충돌, 파손이 생길 수 있다. 그래서 로봇 강화학습에서는 행동 범위를 제한하고, 안전 필터를 두고, 시뮬레이션에서 먼저 학습하는 경우가 많다.

좋은 행동 설계는 학습 난이도를 크게 낮춘다. 처음부터 모터 토크를 직접 학습시키기보다, 기존 제어기 위에서 목표 위치 변화량을 출력하게 만들면 더 안정적일 수 있다. 강화학습은 모든 것을 처음부터 끝까지 직접 해야만 하는 방법이 아니다. 기존 로봇 제어와 잘 결합될 때 훨씬 실용적이다.

Reward: 행동이 좋았는지 알려 주는 숫자

보상은 에이전트가 선택한 행동이 얼마나 좋았는지 알려 주는 숫자다. 강화학습에서 보상은 r로 표시한다. 현재 상태에서 행동한 결과 받은 보상은 보통 r_t라고 쓴다.

사람이 로봇에게 "잘했어" 또는 "그건 위험해"라고 말해 주는 것과 비슷하다. 다만 강화학습에서는 그 피드백을 숫자로 표현한다. 목표에 가까워지면 +1, 충돌하면 -10, 물체를 성공적으로 집으면 +100처럼 줄 수 있다.

보상은 강화학습의 방향을 결정한다. 에이전트는 보상을 크게 받는 행동을 더 자주 선택하도록 학습한다. 따라서 보상을 잘못 설계하면 로봇이 엉뚱한 행동을 배울 수 있다.

예를 들어 로봇팔에게 "물체와 그리퍼 사이의 거리가 가까울수록 높은 보상"을 준다고 하자. 그러면 로봇은 물체 가까이 가는 행동은 잘 배울 수 있다. 하지만 그 보상만으로는 물체를 안정적으로 집는 법을 배우지 못할 수 있다. 그리퍼를 닫지 않고 물체 옆에 머무르기만 해도 보상을 받을 수 있기 때문이다.

반대로 "물체를 집는 순간에만 큰 보상"을 주면 어떨까? 성공했을 때의 목표는 분명하지만, 초반 학습이 매우 어려울 수 있다. 로봇이 우연히 물체를 집기 전까지는 거의 보상을 받지 못하기 때문이다. 이런 보상을 희소 보상이라고 한다. 보상이 드물게 나타난다는 뜻이다.

보상은 로봇에게 매우 강력한 신호이지만, 동시에 조심해서 다뤄야 하는 설계 요소다. 다음 장에서는 로봇에서 보상을 어떻게 설계해야 하는지 더 구체적으로 다룬다. 이번 장에서는 우선 보상을 "에이전트가 행동 결과를 평가받는 숫자"로 이해하면 된다.

Policy: 상태에서 행동으로 가는 지도

정책은 상태를 보고 행동을 선택하는 방법이다. 강화학습에서 정책은 보통 그리스 문자 파이, π로 표현한다. 말로 쓰면 다음과 같다.

π(state) → action

즉 정책은 "이런 상태라면 이런 행동을 하라"는 지도다. 로봇팔이 목표보다 왼쪽에 있으면 오른쪽으로 움직이고, 목표보다 위에 있으면 아래로 내려가는 식이다. 처음 정책은 서툴다. 하지만 경험을 쌓으면서 점점 좋은 행동을 내도록 바뀐다.

정책은 결정적일 수도 있고 확률적일 수도 있다. 결정적 정책은 같은 상태에서 항상 같은 행동을 낸다. 예를 들어 "현재 위치가 목표보다 왼쪽이면 항상 오른쪽으로 1cm 이동"하는 식이다. 확률적 정책은 같은 상태에서도 여러 행동 중 하나를 확률적으로 선택한다. 예를 들어 "오른쪽으로 1cm 이동할 확률 70%, 오른쪽 위로 이동할 확률 20%, 가만히 있을 확률 10%"처럼 행동한다.

로봇 학습 초기에는 확률적 정책이 유용할 수 있다. 에이전트가 다양한 행동을 시도해야 어떤 행동이 좋은지 알 수 있기 때문이다. 이를 탐험이라고 한다. 이미 잘 아는 행동을 선택해 보상을 얻는 것은 활용이라고 한다. 강화학습은 항상 탐험과 활용 사이에서 균형을 잡아야 한다.

너무 탐험만 하면 로봇이 계속 이상한 행동을 하며 안정적으로 작업을 수행하지 못한다. 너무 활용만 하면 처음에 우연히 발견한 그저 그런 행동에 갇혀 더 좋은 방법을 찾지 못한다. 로봇에서는 이 균형이 특히 까다롭다. 게임 속 캐릭터는 절벽에서 떨어져도 다시 시작하면 되지만, 실제 로봇은 잘못된 탐험 한 번으로 그리퍼가 부러질 수 있다.

그래서 실제 로봇 시스템에서는 정책이 내놓은 행동을 그대로 실행하지 않고 안전 제어 계층을 통과시키는 경우가 많다. 정책은 "이 방향으로 가자"고 제안하고, 안전 제어기는 "그 방향은 충돌 위험이 있으니 제한하자"고 막는다. 강화학습 정책은 강력하지만, 로봇에서는 항상 안전 구조 안에 들어가야 한다.

한 번의 행동이 아니라 긴 여정을 평가한다

강화학습에서 에이전트의 목표는 지금 당장 받는 보상 하나를 크게 만드는 것이 아니다. 장기적으로 받을 보상의 합을 크게 만드는 것이다.

이 차이는 매우 중요하다. 로봇팔이 물체를 집으려면 처음에는 목표에서 조금 멀어지는 행동이 필요할 수도 있다. 장애물을 피하기 위해 돌아가야 할 수도 있고, 더 좋은 접근 방향을 만들기 위해 손목을 먼저 회전해야 할 수도 있다. 당장 한 걸음만 보면 손해처럼 보이지만, 전체 작업을 보면 성공에 가까워지는 행동일 수 있다.

강화학습에서는 이런 장기적인 점수를 누적 보상 또는 return이라고 부른다. 간단히 쓰면 다음과 같다.

G_t = r_t + γr_{t+1} + γ²r_{t+2} + ...

여기서 G_t는 현재 시점부터 앞으로 받을 보상의 합이다. γ는 감가율이라고 부르며, 미래 보상을 현재 보상에 얼마나 중요하게 반영할지 정하는 값이다. 보통 0과 1 사이의 값을 사용한다.

감가율이 0에 가까우면 에이전트는 당장의 보상만 중요하게 생각한다. 감가율이 1에 가까우면 먼 미래의 보상도 중요하게 생각한다. 로봇 작업에서는 보통 여러 단계가 이어져야 성공하기 때문에 미래 보상을 적절히 고려해야 한다.

컵을 집는 과정을 생각해 보자. 로봇은 먼저 컵을 찾아야 하고, 그다음 접근해야 하며, 그리퍼를 정렬하고, 닫고, 들어 올려야 한다. 각 단계가 조금씩 연결되어 최종 성공으로 이어진다. 만약 로봇이 당장 가까워지는 보상만 신경 쓴다면 컵 옆으로 빠르게 다가가다가 충돌할 수 있다. 반대로 장기 목표를 고려한다면 조금 천천히 접근하더라도 안정적인 자세를 만들 수 있다.

강화학습이 로봇 목표 달성과 연결되는 지점이 바로 여기다. 로봇의 최종 목표는 단순히 다음 0.1초 동안 좋은 행동을 하는 것이 아니다. 전체 작업이 성공하도록 행동의 연속을 만들어 내는 것이다. 강화학습은 그 행동의 연속을 누적 보상이라는 언어로 학습한다.

에피소드: 시작부터 끝까지의 한 판

강화학습에서는 하나의 작업 시도를 에피소드라고 부른다. 게임으로 치면 한 판, 로봇 작업으로 치면 한 번의 시도다.

로봇팔 목표 도달 문제라면 에피소드는 로봇팔이 초기 자세에서 시작해 목표 위치에 도달하거나, 제한 시간이 끝나거나, 충돌이 발생할 때 끝난다. 이동 로봇 문제라면 출발점에서 시작해 목적지에 도착하거나, 길을 잃거나, 시간이 초과되면 에피소드가 끝난다.

에피소드는 학습 데이터를 정리하는 단위가 된다. 에이전트는 한 에피소드 동안 여러 번 상태를 보고 행동하고 보상을 받는다. 에피소드가 끝나면 그 전체 경험을 이용해 정책을 업데이트한다.

로봇팔 목표 도달 에피소드 하나를 간단히 표현하면 다음과 같다.

초기화:
  로봇팔을 시작 자세로 이동
  목표 위치를 설정

반복:
  현재 상태 s_t 관찰
  정책 π로 행동 a_t 선택
  행동 a_t 실행
  다음 상태 s_{t+1} 관찰
  보상 r_t 계산
  경험 (s_t, a_t, r_t, s_{t+1}) 저장

종료:
  목표에 도달하면 성공
  충돌하거나 시간이 초과되면 실패
  저장된 경험으로 정책 개선

이 구조는 강화학습의 뼈대다. 알고리즘이 PPO이든 SAC이든, 로봇팔이든 이동 로봇이든, 카메라 이미지를 쓰든 관절값만 쓰든, 기본 반복은 크게 달라지지 않는다.

경험은 어떻게 정책을 바꾸는가

에이전트가 경험을 쌓는다고 해서 자동으로 똑똑해지는 것은 아니다. 경험을 이용해 정책을 어떻게 바꿀지 정하는 학습 알고리즘이 필요하다.

강화학습 알고리즘은 여러 종류가 있지만, 기본 생각은 비슷하다. 보상을 많이 받은 행동은 앞으로 더 자주 선택되도록 만들고, 나쁜 결과를 낸 행동은 덜 선택되도록 만든다.

아주 단순한 예를 들어 보자. 로봇팔이 목표 위치에 가까워져야 한다. 어떤 상태에서 정책이 오른쪽으로 움직였더니 목표와의 거리가 줄었다. 그러면 그 행동은 좋은 행동일 가능성이 높다. 다음에 비슷한 상태가 오면 오른쪽으로 움직일 확률을 높인다. 반대로 왼쪽으로 움직였더니 목표와 멀어졌다면 그 행동의 확률을 낮춘다.

물론 실제 강화학습은 이렇게 단순하지 않다. 어떤 행동이 당장은 나빠 보여도 나중에는 좋은 결과로 이어질 수 있고, 여러 관절이 동시에 움직이기 때문에 어떤 요소가 성공에 기여했는지 분리하기 어렵다. 카메라 이미지처럼 입력이 복잡하면 상태를 이해하는 것부터 어렵다. 그래서 PPO, SAC 같은 알고리즘이 등장한다. 이들은 연속 행동 공간에서 정책을 안정적으로 개선하기 위한 방법들이다.

하지만 어떤 알고리즘을 쓰더라도 핵심은 같다. 에이전트는 상태, 행동, 보상, 다음 상태의 경험을 모으고, 그 경험을 바탕으로 정책을 더 나은 방향으로 조정한다.

이것을 조금 더 학습 데이터 관점으로 보면 다음과 같다.

모방학습강화학습
사람이 만든 정답 행동을 학습한다에이전트가 직접 행동하고 보상을 통해 배운다
데이터 형식은 주로 state → expert_action이다데이터 형식은 state, action, reward, next_state이다
초반 학습이 비교적 안정적이다시행착오가 필요해 학습 비용이 크다
시연 범위 밖에서는 약해질 수 있다보상을 잘 설계하면 스스로 개선할 수 있다

이 비교를 보면 강화학습이 모방학습을 대체하는 기술이라기보다 보완하는 기술이라는 점을 알 수 있다. 실제 로봇 개발에서는 모방학습으로 기본 행동을 만들고, 강화학습으로 더 안정적이거나 효율적인 행동을 찾는 방식도 많이 사용한다. 사람이 보여 준 출발점 위에서 로봇이 스스로 다듬는 것이다.

로봇 제어에서 연속 상태와 연속 행동이 만드는 어려움

강화학습은 보드게임이나 간단한 격자 세계에서 출발하면 이해하기 쉽다. 하지만 로봇에 적용하는 순간 난이도가 급격히 올라간다. 가장 큰 이유 중 하나는 상태와 행동이 연속적이라는 점이다.

격자 세계에서는 상태가 3행 4열처럼 딱 떨어진다. 행동도 위, 아래, 왼쪽, 오른쪽 네 가지다. 하지만 로봇팔의 관절 각도는 0도, 1도, 2도처럼만 존재하지 않는다. 0.1도, 0.01도, 0.001도처럼 사실상 무한히 많은 값이 가능하다. 엔드 이펙터의 위치도 마찬가지다.

행동도 연속적이다. 관절 속도를 0.2 rad/s로 줄 수도 있고, 0.201 rad/s로 줄 수도 있다. 로봇이 움직일 수 있는 선택지가 너무 많기 때문에, 단순히 모든 행동을 하나씩 시도해 보는 방식은 불가능하다.

로봇 강화학습이 어려운 이유는 여기에만 있지 않다.

  • 상태 차원이 높다. 관절값 몇 개만 쓰는 것이 아니라 이미지, 깊이 정보, 힘 센서, 목표 위치까지 함께 사용할 수 있다.

  • 행동 하나의 영향이 늦게 나타난다. 지금 손목을 조금 돌린 행동이 몇 초 뒤 grasp 성공률을 바꿀 수 있다.

  • 시행착오가 비싸다. 실제 로봇은 느리고, 마모되고, 잘못 움직이면 고장 날 수 있다.

  • 안전이 중요하다. 학습 중에도 사람, 장비, 로봇 자신을 보호해야 한다.

  • 현실은 노이즈가 많다. 센서값이 흔들리고, 물체가 미끄러지고, 모터 응답이 매번 조금씩 다르다.

이런 어려움 때문에 로봇 강화학습은 보통 몇 가지 전략과 함께 사용된다. 먼저 시뮬레이션에서 충분히 학습하고, 행동 범위를 제한하며, 안전 제어기를 둔다. 또 상태와 행동을 너무 낮은 수준으로 잡지 않고, 기존 제어기가 잘하는 부분은 그대로 활용한다. 예를 들어 강화학습 정책이 "엔드 이펙터 목표 변화량"만 출력하고, 실제 관절 제어는 MoveIt2나 저수준 제어기가 처리하게 만들 수 있다.

좋은 로봇 강화학습 시스템은 무모한 시행착오 기계가 아니다. 안전한 실험 공간 안에서, 필요한 자유도만 열어 주고, 잘 설계된 보상으로 정책을 개선하는 구조다.

작은 예제로 보는 강화학습 구조: 로봇팔 목표 도달

이제 강화학습의 여섯 요소를 하나의 예제로 묶어 보자. 문제는 단순하다. 로봇팔의 엔드 이펙터를 목표 위치까지 이동시키는 것이다.

목표는 테이블 위의 한 점이다. 로봇은 시작 자세에서 출발한다. 매 순간 현재 관절 상태와 목표까지의 상대 위치를 보고, 엔드 이펙터를 조금씩 움직인다. 목표에 가까워질수록 보상을 받고, 너무 크게 움직이거나 충돌하면 벌점을 받는다.

이 문제를 강화학습 언어로 표현하면 다음과 같다.

구성 요소로봇팔 목표 도달 예시
Agent엔드 이펙터 이동 명령을 선택하는 학습 정책
Environment로봇팔, 테이블, 목표점, 물리 시뮬레이터 또는 실제 실험 환경
State관절 각도, 관절 속도, 엔드 이펙터 위치, 목표와의 거리
Actionx, y, z 방향 이동량 또는 관절 속도 명령
Reward목표에 가까워지면 양수, 멀어지면 음수, 충돌하면 큰 음수, 도달하면 큰 양수
Policy현재 상태에서 다음 이동 명령을 출력하는 신경망

이 예제에서 에이전트가 배워야 할 것은 "어떤 상태에서 어떤 방향으로 움직이면 목표에 도달하는가"이다. 처음에는 목표와 반대 방향으로 갈 수도 있다. 하지만 그런 행동은 낮은 보상을 받는다. 목표에 가까워지는 행동은 높은 보상을 받는다. 반복 학습을 통해 정책은 목표로 향하는 행동을 더 많이 선택하게 된다.

여기서 중요한 점은 로봇이 단순히 직선으로만 움직이는 법을 배우는 것이 아니라는 점이다. 관절 제한이 있거나 장애물이 있거나 특정 자세를 피해야 한다면, 정책은 그 조건을 반영한 경로를 배워야 한다. 보상이 잘 설계되어 있다면 로봇은 목표 도달뿐 아니라 부드러운 움직임, 충돌 회피, 에너지 절약까지 함께 배울 수 있다.

물론 처음부터 모든 것을 한꺼번에 배우게 하면 어렵다. 그래서 실제 프로젝트에서는 문제를 작게 시작한다. 장애물 없는 목표 도달부터 시작하고, 그다음 목표 위치를 다양하게 바꾸고, 이후 장애물이나 물체 조작을 추가한다. 강화학습은 단계적으로 문제를 키울 때 훨씬 안정적으로 작동한다.

강화학습 정책은 로봇 시스템의 어디에 들어갈까

지금까지는 강화학습을 하나의 독립적인 학습 문제로 설명했다. 하지만 이 책의 최종 목표는 자연어 명령을 받아 물리 세계에서 작업을 수행하는 AI 로봇 에이전트다. 그렇다면 강화학습 정책은 전체 시스템의 어디에 들어갈까?

강화학습은 보통 로봇의 특정 스킬을 더 잘 수행하는 모듈로 들어간다. 예를 들어 다음과 같은 스킬을 학습할 수 있다.

  • 목표 위치까지 부드럽게 접근하는 스킬

  • 물체를 안정적으로 집는 grasp 보정 스킬

  • 미끄러지는 물체를 다시 잡는 회복 스킬

  • 이동 로봇이 장애물을 피해 목적지로 가는 로컬 제어 스킬

  • 다리 로봇이 넘어지지 않고 걷는 보행 스킬

반면 "사용자의 자연어 명령을 해석해 전체 작업 순서를 만드는 일"은 강화학습 정책 하나에 맡기기보다 LLM 기반 계획 모듈이 담당하는 것이 자연스럽다. LLM은 "빨간 컵을 집어 오른쪽에 놓아줘"라는 문장을 이해하고, 작업을 detect_object → pick → place로 나눌 수 있다. 강화학습 정책은 그중 pick 내부에서 더 안정적인 접근과 파지를 담당할 수 있다.

즉 전체 AI 로봇 에이전트 구조에서 강화학습은 저수준 또는 중간 수준 행동을 개선하는 강력한 도구다. LLM이 계획을 세우고, 비전 모듈이 물체를 찾고, MoveIt2가 경로를 계획하고, 강화학습 정책이 특정 동작을 더 유연하게 만드는 식으로 결합할 수 있다.

이 관점이 중요하다. 강화학습을 배운다고 해서 기존 로봇공학이 사라지는 것이 아니다. 오히려 강화학습은 기존 제어, 비전, 계획, 안전 시스템과 함께 사용할 때 실용적인 힘을 낸다.

강화학습을 로봇에 적용할 때의 기본 설계 질문

로봇 강화학습 문제를 만들 때는 알고리즘 이름부터 고르기보다 문제 정의를 먼저 해야 한다. PPO를 쓸지 SAC를 쓸지는 그다음 문제다. 먼저 강화학습의 여섯 요소를 명확히 정해야 한다.

다음 질문을 차례로 던지면 문제 구조가 선명해진다.

  • 에이전트는 무엇을 결정하는가?

  • 환경은 어디까지 포함하는가?

  • 상태에는 어떤 정보를 넣을 것인가?

  • 행동은 어느 수준의 명령으로 정의할 것인가?

  • 보상은 어떤 행동을 좋은 행동으로 만들 것인가?

  • 정책은 어떤 입력을 받아 어떤 출력을 내야 하는가?

  • 에피소드는 언제 시작하고 언제 끝나는가?

  • 학습 중 위험한 행동은 어떻게 막을 것인가?

예를 들어 "로봇팔이 블록을 목표 위치로 밀기" 문제를 만든다고 해 보자. 에이전트가 엔드 이펙터 이동량을 결정하게 할 수 있다. 상태에는 엔드 이펙터 위치, 블록 위치, 목표 위치를 넣는다. 행동은 x-y 평면에서의 작은 이동량으로 제한한다. 보상은 블록이 목표에 가까워질수록 높게 주고, 블록을 테이블 밖으로 밀면 큰 벌점을 준다. 에피소드는 블록이 목표에 도달하거나 시간이 초과되면 끝난다.

이렇게 정의하면 학습 문제의 윤곽이 생긴다. 그다음에야 어떤 알고리즘을 쓸지, 시뮬레이션 환경을 어떻게 만들지, 실제 로봇으로 옮길 때 어떤 보정을 할지 논의할 수 있다.

강화학습에서 좋은 결과는 대개 좋은 문제 정의에서 시작한다. 알고리즘은 중요하지만, 상태와 행동과 보상이 엉망이면 아무리 좋은 알고리즘도 이상한 행동을 학습한다.

탐험은 필요하지만, 로봇에서는 조심스럽게

강화학습에서 에이전트는 새로운 행동을 시도해야 한다. 이것이 탐험이다. 탐험이 없으면 에이전트는 이미 아는 행동만 반복하고 더 좋은 방법을 찾지 못한다.

하지만 로봇에서 탐험은 위험할 수 있다. 로봇팔이 무작위로 움직이면 테이블을 치거나, 카메라를 건드리거나, 사람에게 가까이 갈 수 있다. 이동 로봇이 무작위로 주행하면 벽에 부딪힐 수 있다. 그래서 로봇 강화학습에서는 탐험을 안전하게 만드는 장치가 필요하다.

가장 단순한 방법은 행동 범위를 제한하는 것이다. 관절 속도와 가속도에 상한을 두고, 엔드 이펙터가 움직일 수 있는 영역을 제한한다. 충돌 위험이 있는 영역은 금지 구역으로 설정한다. 힘 센서나 충돌 감지기가 위험을 감지하면 즉시 정지한다.

또 다른 방법은 시뮬레이션에서 먼저 탐험하는 것이다. 시뮬레이션에서는 로봇이 넘어지거나 부딪혀도 실제 장비가 망가지지 않는다. 수천 번, 수만 번의 에피소드를 빠르게 반복할 수 있다. 물론 시뮬레이션에서 배운 정책이 현실에서도 잘 작동하려면 추가적인 보정이 필요하다. 이 주제는 뒤에서 Sim2Real로 다시 만난다.

탐험은 강화학습의 엔진이다. 그러나 로봇에서는 브레이크 없는 엔진이 되어서는 안 된다. 안전 제한, 시뮬레이션, 감독자 개입, 로그 기록이 함께 있어야 한다.

정책이 잘 배웠는지 어떻게 알까

강화학습 정책을 학습한 뒤에는 평가가 필요하다. 학습 중 받은 보상이 올라간다고 해서 항상 실제 작업 성능이 좋아졌다고 단정할 수는 없다. 보상 설계가 잘못되어 있으면 에이전트가 점수만 잘 받는 꼼수를 배울 수 있기 때문이다.

예를 들어 목표에 가까워질수록 보상을 주었더니 로봇이 목표 근처에서 계속 흔들리기만 하고 정확히 도달하지 않는 행동을 배울 수 있다. 또는 충돌 벌점이 약하면 빠르게 움직여 목표에는 도달하지만 자주 물체를 치는 정책이 나올 수 있다.

그래서 로봇 정책을 평가할 때는 누적 보상뿐 아니라 실제 작업 지표도 함께 봐야 한다. 목표 도달 성공률, 평균 도달 시간, 충돌 횟수, 움직임의 부드러움, 에너지 사용량, 실제 로봇에서의 반복 성공률 같은 지표가 필요하다.

특히 로봇에서는 "한 번 성공했는가"보다 "여러 번 안정적으로 성공하는가"가 중요하다. 데모 영상에서는 한 번의 성공 장면만 보여 줄 수 있지만, 실용적인 로봇은 조명과 물체 위치가 조금 바뀌어도 반복해서 성공해야 한다.

정책 평가는 학습의 마지막 단계가 아니라 다음 개선의 출발점이다. 실패한 에피소드를 분석하면 상태 정보가 부족한지, 행동 범위가 너무 큰지, 보상이 잘못되었는지, 시뮬레이션이 현실과 다른지 알 수 있다. 강화학습은 시행착오로 배우는 방법이지만, 개발자는 그 시행착오를 관찰하고 문제를 더 좋은 형태로 다듬어야 한다.

강화학습의 기본 흐름을 코드처럼 보기

마지막으로 강화학습의 전체 흐름을 의사코드로 정리해 보자. 실제 라이브러리 코드는 아니지만, 구조를 이해하는 데 도움이 된다.

policy = initialize_policy()

env = make_robot_environment()

for episode in range(num_episodes):
    state = env.reset()
    done = False

    while not done:
        action = policy.select_action(state)

        next_state, reward, done, info = env.step(action)

        policy.store_experience(
            state=state,
            action=action,
            reward=reward,
            next_state=next_state,
            done=done,
        )

        state = next_state

    policy.update()

여기서 env.reset()은 에피소드를 새로 시작한다. 로봇팔을 초기 자세로 이동하고, 물체와 목표 위치를 설정하는 과정이다. policy.select_action(state)는 현재 상태에서 행동을 고른다. env.step(action)은 행동을 실행하고 다음 상태와 보상을 돌려준다. policy.update()는 모은 경험을 이용해 정책을 개선한다.

이 짧은 구조 안에 강화학습의 핵심이 모두 들어 있다. 에이전트는 정책이고, 환경은 env이며, 상태와 행동과 보상이 매 반복마다 오간다. 이 흐름을 이해하면 이후 장에서 어떤 알고리즘이 등장해도 길을 잃지 않는다.

정리: 강화학습의 언어로 로봇을 바라보기

강화학습은 로봇에게 시행착오를 통해 더 나은 행동을 배우게 하는 틀이다. 에이전트는 상태를 관찰하고, 행동을 선택하고, 환경은 그 결과로 다음 상태와 보상을 돌려준다. 에이전트는 이 경험을 바탕으로 정책을 개선하며, 최종적으로 누적 보상을 크게 만드는 행동 방식을 학습한다.

이번 장의 핵심은 여섯 단어로 정리할 수 있다.

용어의미
Agent행동을 선택하고 학습하는 주체
Environment에이전트가 행동을 실행하는 세계
State현재 상황을 나타내는 정보
Action에이전트가 선택할 수 있는 명령
Reward행동 결과가 얼마나 좋았는지 알려 주는 숫자
Policy상태에서 행동을 선택하는 방법

로봇 강화학습은 게임보다 어렵다. 상태와 행동이 연속적이고, 시행착오가 비싸며, 안전 문제가 항상 따라온다. 하지만 바로 그렇기 때문에 강화학습은 로봇에게 매력적이다. 로봇은 사람이 모든 상황을 규칙으로 적어 줄 수 없는 물리 세계에서 움직인다. 강화학습은 그 복잡한 세계 속에서 경험을 통해 더 나은 행동을 찾는 방법을 제공한다.

다음 장에서는 이 여섯 요소 중 특히 중요한 하나, 보상에 집중한다. 보상은 로봇이 무엇을 좋은 행동으로 이해할지 결정한다. 보상을 잘 설계하면 로봇은 목표에 가까워지고, 충돌을 피하고, 부드럽게 움직일 수 있다. 반대로 보상을 잘못 설계하면 로봇은 개발자가 의도하지 않은 이상한 방법으로 점수만 얻으려 할 수 있다.

강화학습의 첫 번째 질문은 "어떤 알고리즘을 쓸까?"가 아니다. 진짜 첫 질문은 이것이다.

"로봇에게 무엇을 잘했다고 말해 줄 것인가?"

책 목록

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

전체 목차 보기

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

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

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

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

참여하기