검색
← 모듈 로드맵

Hugging Face LeRobot: 로봇 학습 오픈소스

강의 · 입문자 · Hugging Face

원제 · LeRobot

행동 복제 · 분포 이동 · 다봉 행동 · 행동 청킹 · 확산 정책과 LeRobot 학습 흐름을 익히는 모방 학습 수업

먼저 알아야 할 것

지도 학습과 손실 함수평균 제곱 오차파이썬 · PyTorch로봇 관절과 손끝 자세

다루는 내용

Hugging Face LeRobot을 바탕으로 로봇 모방 학습의 기본을 직접 해설하는 수업입니다. 행동 복제 손실을 손으로 계산하고, 분포 이동으로 오차가 쌓이는 이유와 평균 제곱 오차가 다봉 행동에서 실패하는 이유를 숫자로 보입니다. ACT의 행동 청킹 · 시간 앙상블과 확산 정책의 아이디어, LeRobotDataset 구조, README의 학습 · 평가 · 녹화 명령까지 다룹니다.

해설

로봇 모방 학습 첫 수업: 행동 복제 · 분포 이동 · 행동 청킹 · 확산 정책 (Hugging Face LeRobot 기반)

사람이 로봇을 조종해 보여 준 시연을 그대로 따라 하도록 정책을 배우는 모방 학습(imitation learning)을 이 페이지 안에서 직접 배웁니다. 행동 복제 손실을 손으로 계산하고, 왜 작은 실수가 쌓여 실패로 번지는지, 왜 평균을 내면 안 되는 행동이 있는지, 행동을 묶어 내는 청킹과 확산 정책이 이를 어떻게 푸는지 본 뒤, Hugging Face LeRobot에서 데이터 → 학습 → 평가를 돌리는 흐름까지 잇습니다.

항목내용
출처LeRobot · Hugging Face LeRobot 팀 · github.com/huggingface/lerobot · 문서
트랙 · 수준피지컬 AI · 기초
이 수업이 다루는 범위모방 학습의 기본 개념(행동 복제 · 분포 이동 · 다봉 행동), ACT의 행동 청킹과 확산 정책의 아이디어 개요, LeRobotDataset 구조, README에 실린 학습 · 평가 · 녹화 명령. 개념 설명과 숫자 예는 이 사이트가 직접 만든 것이며, 명령과 데이터 형식은 저장소 README와 공식 문서에서 확인한 것만 옮겼습니다
먼저 알면 좋은 것지도 학습(손실 · 학습 루프), 평균 제곱 오차, 파이썬 · PyTorch 기초, 관절 각도와 손끝 자세의 구분

들어가기 전에

한눈에 보기

  • 행동 복제(behavior cloning)를 "관측을 넣으면 사람의 행동을 맞히는 회귀 문제"로 이해하고 손실을 직접 계산합니다.
  • 학습 때 못 본 상태로 조금씩 밀려나며 실수가 쌓이는 분포 이동(distribution shift)을 숫자로 체감합니다.
  • 시연이 두 갈래로 나뉠 때 평균 제곱 오차가 엉뚱한 "가운데 행동"을 배우는 이유를 보고, 확산 정책이 왜 이를 피하는지 압니다.
  • 행동 청킹(action chunking)이 결정 횟수를 줄이고, 겹친 예측을 섞어 움직임을 부드럽게 하는 원리를 계산해 봅니다.
  • LeRobotDataset의 폴더 · 키 구조와 lerobot-train · lerobot-eval · lerobot-record 명령의 역할을 압니다.

1. 행동 복제: 시연을 회귀로 따라 하기

직관(해설용 비유): 운전 강사 옆자리에서 강사가 어떤 장면에서 핸들을 얼마나 돌렸는지를 수천 장면 받아 적고, "이 장면이면 이만큼"을 외우는 것과 같습니다. 보상도 시행착오도 없이, 정답 행동이 있는 지도 학습입니다.

단계:

  1. 사람이 조종기(원격 조종, teleoperation)로 로봇을 움직이며 과제를 여러 번 수행합니다. 한 번 수행한 기록을 에피소드(episode)라 합니다.
  2. 매 순간의 관측 oto_t(카메라 영상, 관절 상태)와 사람이 낸 행동 ata_t(목표 관절 각도 등)를 짝으로 저장합니다.
  3. 정책 신경망 πθ\pi_\theta가 oto_t를 받아 ata_t를 맞히도록 학습합니다.
  4. 실행할 때는 관측 → 정책 → 행동 → 로봇 → 새 관측을 되풀이합니다.

가장 단순한 손실은 평균 제곱 오차입니다(설명용으로 가장 단순하게 쓴 식이며, ACT · 확산 정책 등 실제 정책은 이를 바꾼 손실을 씁니다).

L(θ)=1N∑t=1N∥πθ(ot)−at∥2\mathcal{L}(\theta) = \frac{1}{N}\sum_{t=1}^{N} \big\lVert \pi_\theta(o_t) - a_t \big\rVert^2
기호뜻
oto_ttt번째 프레임의 관측(영상 · 관절 상태)
ata_t그 프레임에서 사람이 실제로 낸 행동
πθ(ot)\pi_\theta(o_t)정책이 예측한 행동
NN학습에 쓴 프레임 수
∥⋅∥2\lVert\cdot\rVert^2각 성분 차이의 제곱합

숫자로 해 보기(해설용): 관절 두 개짜리 팔에서 시연 행동이 a=(0.5,−0.2)a = (0.5, -0.2) 라디안, 정책 출력이 (0.4,0.0)(0.4, 0.0)이면 차이는 (0.1,−0.2)(0.1, -0.2), 제곱합은 0.01+0.04=0.050.01 + 0.04 = 0.05입니다. 데이터 양은 초당 30프레임으로 10초짜리 시연을 50번 녹화하면 30×10×50=15,00030 \times 10 \times 50 = 15{,}000개의 (관측, 행동) 짝입니다.

왜 강화학습 대신 모방 학습인가: 실제 로봇은 시행착오가 느리고 비싸며 위험합니다. 보상 함수를 설계하기도 어렵습니다("셔츠를 잘 갰다"를 숫자로 어떻게 줄까요?). 사람이 수십 번 보여 주는 것이 훨씬 빠른 경우가 많아서, 최근 로봇 조작 연구의 상당수가 시연 데이터에서 출발합니다.

2. 분포 이동: 작은 실수가 쌓이는 문제

직관: 강사가 늘 차선 가운데로만 달렸다면, 학생은 "차선 가장자리에 붙었을 때 어떻게 돌아오는지"를 본 적이 없습니다. 학생이 조금만 삐끗해 가장자리로 가면, 처음 보는 장면이라 더 엉뚱하게 반응하고, 그래서 더 밀려납니다.

단계:

  1. 학습 데이터의 관측은 사람이 만든 궤적 위에만 있습니다.
  2. 정책은 완벽하지 않아 작은 오차를 냅니다.
  3. 오차 때문에 로봇이 시연에 없던 상태로 조금 벗어납니다.
  4. 처음 보는 상태라 오차가 더 커지고, 더 벗어납니다(오차 누적, compounding error).

숫자로 해 보기(해설용, 단순화한 가정): 매 걸음 1% 확률로 시연 범위를 벗어나고, 한 번 벗어나면 돌아오지 못한다고 가정합시다. 10걸음 과제를 끝까지 범위 안에서 마칠 확률은 0.9910≈0.9040.99^{10} \approx 0.904이지만, 100걸음 과제는 0.99100≈0.3660.99^{100} \approx 0.366입니다. 한 걸음 정확도가 같아도 과제가 길수록 실패가 급격히 늘어납니다.

어떻게 줄이나:

  • 결정 횟수 자체를 줄이기: 한 번에 여러 걸음의 행동을 내면(4절의 행동 청킹) 오차가 끼어들 기회가 줄어듭니다.
  • 회복 장면을 데이터에 넣기: 일부러 조금 벗어난 상태에서 사람이 바로잡는 시연을 더 모읍니다. 학습된 정책을 돌려 보고 그 상태에서 사람이 정답을 다시 달아 주는 방법(DAgger 계열)도 있습니다.
  • 관측을 다양하게: 조명 · 카메라 위치 등을 바꿔 가며 녹화하거나, 학습 때 영상 증강(밝기 · 대비 변화)을 씁니다. LeRobot은 학습 시점에만 적용하는 영상 변환 옵션을 제공합니다.

3. 다봉 행동: 평균을 내면 안 되는 경우

직관: 컵 앞에 장애물이 있고, 사람은 절반은 왼쪽으로, 절반은 오른쪽으로 돌아서 컵을 집었습니다. 둘 다 옳은 행동입니다. 그런데 평균을 내면 "가운데로 직진", 즉 장애물에 부딪히는 행동이 됩니다.

숫자로 해 보기(해설용): 같은 관측에서 시연 행동이 −1-1(왼쪽)과 +1+1(오른쪽)로 반반이라 합시다. 정책이 상수 cc를 낸다면 평균 제곱 오차는

12(c−(−1))2+12(c−1)2=c2+1\tfrac12(c - (-1))^2 + \tfrac12(c - 1)^2 = c^2 + 1

이고, 이것을 가장 작게 하는 값은 c=0c = 0입니다. 평균 제곱 오차는 언제나 조건부 평균을 배우므로, 정답이 여러 갈래인(다봉, multimodal) 행동에서는 어느 쪽도 아닌 가운데를 냅니다.

어떻게 푸나:

  • 확산 정책(Diffusion Policy): 행동을 하나의 값으로 내지 않고, 잡음에서 시작해 관측을 조건으로 잡음을 여러 번 걷어 내며 행동을 표본으로 생성합니다. 생성 모델은 분포 전체를 배우므로, 왼쪽 · 오른쪽 두 봉우리를 모두 기억하고 실행 때는 그중 하나를 뽑습니다. 개념적으로는 다음 갱신을 KK번 되풀이합니다(설명용으로 단순화한 꼴).
ak−1=(잡음을 조금 걷어 낸 값)≈ak−γ εθ(o,ak,k)+(작은 잡음)a^{k-1} = \text{(잡음을 조금 걷어 낸 값)} \approx a^{k} - \gamma\,\varepsilon_\theta(o, a^{k}, k) + \text{(작은 잡음)}

여기서 aKa^K는 순수한 잡음, εθ\varepsilon_\theta는 "이 행동에 섞인 잡음이 무엇인지" 예측하는 신경망, kk는 남은 단계 수입니다. 정확한 식과 결과 수치는 확산 정책 항목에서 원 논문 기준으로 봅니다.

  • 행동을 이산 토큰으로: 행동을 구간으로 나눠 분류 문제로 바꾸면 소프트맥스가 여러 봉우리를 표현할 수 있습니다(VQ-BeT, 일부 VLA가 이런 방식을 씁니다).
  • 잠재 변수 쓰기: ACT는 변분 오토인코더(CVAE) 방식으로 "어느 스타일로 할지"를 잠재 변수에 담습니다.

4. 행동 청킹: 한 번에 여러 걸음 내기

직관: 피아노를 칠 때 음 하나하나를 따로 생각하지 않고 한 소절을 묶어 손가락에 맡깁니다. 정책도 매 프레임 행동 하나가 아니라 앞으로 kk걸음의 행동 묶음(chunk)을 한 번에 냅니다. ACT(Action Chunking with Transformers)가 이 방식을 씁니다.

단계:

  1. 관측 oto_t를 받으면 정책이 a^t,a^t+1,…,a^t+k−1\hat{a}_{t}, \hat{a}_{t+1}, \dots, \hat{a}_{t+k-1}을 한꺼번에 냅니다.
  2. 가장 단순하게는 그 kk개를 차례로 실행한 뒤 다시 관측합니다.
  3. 더 부드럽게 하려면 매 프레임 새 묶음을 내고, 같은 시점에 대한 여러 묶음의 예측을 가중 평균으로 섞습니다(ACT 논문의 '시간 앙상블').
aˉt=∑iwi a^t(i)∑iwi,wi=e−m i\bar{a}_t = \frac{\sum_i w_i\, \hat{a}_t^{(i)}}{\sum_i w_i}, \qquad w_i = e^{-m\, i}
기호뜻
a^t(i)\hat{a}_t^{(i)}시점 tt에 대해 ii번째로 오래된 묶음이 낸 예측(오래된 것부터 i=0i = 0)
wiw_i가중치. mm이 클수록 한쪽(가장 오래된 예측)에 무게가 쏠림
aˉt\bar{a}_t실제로 실행하는 행동

숫자로 해 보기(해설용):

  • 결정 횟수: 400걸음짜리 과제에서 묶음 크기 k=1k = 1이면 정책이 400번 결정하지만, k=100k = 100이면 4번이면 됩니다. 2절의 "결정마다 오차가 끼어드는" 기회가 그만큼 줄어듭니다.
  • 시간 앙상블: 같은 시점에 대해 세 묶음이 0.500.50, 0.540.54, 0.580.58을 예측했고 m=0.5m = 0.5라면 가중치는 11, e−0.5≈0.607e^{-0.5} \approx 0.607, e−1≈0.368e^{-1} \approx 0.368입니다. 섞은 값은 (0.50+0.607×0.54+0.368×0.58)/1.975≈0.527(0.50 + 0.607 \times 0.54 + 0.368 \times 0.58) / 1.975 \approx 0.527입니다. 한 묶음만 쓸 때보다 묶음 경계에서 행동이 툭 튀는 일이 줄어듭니다.

왜 이렇게 하나: 사람의 시연에는 잠시 멈칫하는 순간처럼 "지금 관측만으로는 설명되지 않는" 행동이 섞여 있습니다. 한 걸음씩 맞히면 이런 부분에서 흔들리지만, 묶음으로 내면 앞뒤 맥락이 함께 학습됩니다. 대신 묶음이 너무 길면 바뀐 상황에 늦게 반응하므로, 앙상블처럼 자주 다시 예측하는 장치를 함께 씁니다.

5. 시연 데이터의 구조: LeRobotDataset

LeRobot은 시연 데이터를 LeRobotDataset이라는 표준 형식으로 저장합니다. 공식 문서(v3.0) 기준으로 세 덩어리입니다.

덩어리형식담는 것
표 데이터(data/)Apache Parquet상태 · 행동 · 시각 같은 저차원 · 고빈도 값. 한 파일에 여러 에피소드
영상(videos/)MP4카메라별 프레임을 이어 붙여 인코딩
메타데이터(meta/)JSON · Parquetinfo.json(특성 이름 · 모양 · 자료형 · FPS), stats.json(평균 · 표준편차 · 최솟값 · 최댓값), tasks.jsonl(자연어 과제 설명), episodes/(에피소드별 길이 · 위치)

불러온 한 프레임은 observation.state, action, observation.images.<카메라 이름>, timestamp 같은 키를 가진 사전(딕셔너리)입니다. delta_timestamps로 "현재보다 0.1초, 0.2초 전 영상"처럼 시간 창을 함께 받아 올 수도 있습니다.

숫자로 해 보기(해설용): 정규화. 관절 값은 단위와 범위가 제각각이라 학습 전에 보통 평균과 표준편차로 정규화합니다(meta/stats.json 의 통계가 이 용도입니다). 어떤 관절의 평균이 1.01.0 rad, 표준편차가 0.250.25 rad일 때 값 1.51.5는 (1.5−1.0)/0.25=2.0(1.5 - 1.0) / 0.25 = 2.0이 됩니다. 정책은 정규화된 값을 예측하고, 실행 직전에 2.0×0.25+1.0=1.52.0 \times 0.25 + 1.0 = 1.5로 되돌립니다.

왜 영상과 숫자를 나눠 저장하나: 영상은 동영상 압축으로 용량을 크게 줄일 수 있고, 숫자는 표 형식이 빠르게 읽고 걸러 내기 좋기 때문입니다. v3에서는 에피소드 여러 개를 큰 파일 몇 개에 모으고, 에피소드 경계는 메타데이터로 찾습니다. 파일 수가 줄어 대규모 데이터에서도 빨리 열립니다.

6. LeRobot에서 돌려 보는 흐름

mermaid
flowchart LR
  A[pip install lerobot] --> B[Hub 데이터셋 불러 보기]
  B --> C[lerobot-train 으로 ACT 학습]
  C --> D[lerobot-eval 로 시뮬레이션 평가]
  D --> E[로봇 연결 · 원격 조종]
  E --> F[lerobot-record 로 시연 녹화]
  F --> C

아래 명령은 저장소 README에 실린 그대로입니다.

설치와 환경 확인:

코드
pip install lerobot
lerobot-info

공개 데이터셋으로 ACT 정책 학습:

코드
lerobot-train \
  --policy.type=act \
  --dataset.repo_id=lerobot/aloha_mobile_cabinet

공개된 미세조정 모델을 LIBERO 시뮬레이션에서 10 에피소드 평가:

코드
lerobot-eval \
  --policy.path=lerobot/pi0_libero_finetuned \
  --env.type=libero \
  --env.task=libero_object \
  --eval.n_episodes=10

내 로봇과 조종기로 시연 녹화(꺾쇠 안은 자기 장비 이름으로 바꿉니다):

코드
lerobot-record \
  --robot.type=<robot_name> \
  --teleop.type=<teleoperator_name> \
  --dataset.repo_id=${HF_USER}/my-dataset

파이썬에서 데이터셋 열어 보기(README 예시를 줄인 것):

python
from lerobot.datasets.lerobot_dataset import LeRobotDataset
dataset = LeRobotDataset("lerobot/aloha_mobile_cabinet")
print(dataset[0]['action'].shape)

어떻게 공부하면 좋은가: 로봇이 없어도 위 순서의 앞 절반(데이터 열기 → 학습 → 시뮬레이션 평가)은 할 수 있습니다. 먼저 데이터셋에서 action의 모양과 값 범위를 확인하고, 1절의 손실이 실제로 어떤 텐서에 대해 계산되는지 감을 잡은 뒤 학습을 돌리기를 권합니다. 정책마다 필요한 GPU 메모리와 학습 시간이 크게 다르니 저장소의 하드웨어 안내를 먼저 확인하세요.

연습 문제

문제 1. 시연 행동 (0.2,0.3,−0.1)(0.2, 0.3, -0.1), 정책 출력 (0.1,0.3,0.1)(0.1, 0.3, 0.1)일 때 제곱 오차합은?

풀이: 차이 (0.1,0,−0.2)(0.1, 0, -0.2), 제곱합 0.01+0+0.04=0.050.01 + 0 + 0.04 = 0.05.

문제 2. 2절 가정에서 매 걸음 벗어날 확률이 0.5%라면 200걸음 과제를 범위 안에서 마칠 확률은 대략?

풀이: 0.995200≈0.3670.995^{200} \approx 0.367. 오차율을 절반으로 줄여도 과제 길이가 두 배면 성공률이 비슷하게 남습니다.

문제 3. 3절에서 시연이 −1-1이 70%, +1+1이 30%라면 평균 제곱 오차를 가장 작게 하는 상수 cc는?

풀이: 조건부 평균 0.7×(−1)+0.3×1=−0.40.7 \times (-1) + 0.3 \times 1 = -0.4. 여전히 두 시연 어느 것과도 다른 값입니다.

문제 4. 정규화된 예측이 −1.2-1.2이고, 그 관절의 평균 0.80.8, 표준편차 0.50.5일 때 실제로 보낼 각도는?

풀이: −1.2×0.5+0.8=0.2-1.2 \times 0.5 + 0.8 = 0.2 rad.

스스로 점검

  1. 행동 복제가 지도 학습과 같은 점과, 실행할 때 다른 점은?
    • 답: 관측 → 행동을 정답 짝으로 맞히는 점은 같습니다. 그러나 실행할 때는 정책 자신의 행동이 다음 관측을 바꾸므로, 학습 데이터에 없던 상태로 밀려나는 분포 이동이 생깁니다.
  2. 평균 제곱 오차로 다봉 행동을 배우면 무엇이 문제인가요?
    • 답: 조건부 평균을 배워 여러 정답 사이의 가운데, 즉 어느 시연에도 없는 행동을 내기 쉽습니다. 확산 정책 같은 생성형 정책은 분포 전체를 배워 이를 피합니다.
  3. 행동 청킹이 분포 이동을 줄이는 이유는?
    • 답: 한 번에 여러 걸음을 내므로 정책이 결정하는 횟수가 줄고, 그만큼 오차가 끼어들어 쌓일 기회가 줄기 때문입니다.

용어 정리

용어쉬운 뜻
모방 학습(imitation learning)사람의 시연을 따라 하도록 정책을 학습하는 방법
행동 복제(behavior cloning)관측 → 행동을 지도 학습 회귀로 맞히는 가장 기본적인 모방 학습
원격 조종(teleoperation)사람이 조종기로 로봇을 직접 움직이는 것 — 시연을 모으는 방법
에피소드(episode)과제 하나를 처음부터 끝까지 한 번 수행한 기록
분포 이동(distribution shift)실행 중 상태가 학습 데이터 분포에서 벗어나는 현상
오차 누적(compounding error)작은 실수가 다음 상태를 바꿔 더 큰 실수로 번지는 것
다봉 분포(multimodal distribution)정답이 여러 갈래로 나뉜 분포
행동 청킹(action chunking)앞으로 여러 걸음의 행동을 한 번에 예측하는 방식
시간 앙상블(temporal ensembling)같은 시점에 대한 여러 묶음의 예측을 가중 평균으로 섞는 것
확산 정책(diffusion policy)잡음을 여러 번 걷어 내 행동을 생성하는 정책
정규화(normalization)값에서 평균을 빼고 표준편차로 나눠 범위를 맞추는 것
LeRobotDataset영상(MP4) · 표 데이터(Parquet) · 메타데이터로 시연을 저장하는 LeRobot 표준 형식

더 깊이 보려면

저장소 README와 문서에는 이 수업 밖의 내용이 많습니다.

  • 지원 로봇 · 조종기: SO100 · Koch · LeKiwi · Unitree G1 등 공통 Robot 인터페이스로 묶인 하드웨어와 커뮤니티 플러그인.
  • 정책: 모방 학습(ACT · Diffusion · VQ-BeT 등), 강화학습(HIL-SERL · TDMPC), VLA(Pi0 · SmolVLA · GR00T 등).
  • 평가 환경: LIBERO · MetaWorld 벤치마크, 직접 만든 환경을 Hub로 배포하는 EnvHub.
  • 배우는 자료: 공식 문서의 데이터셋 · 녹화 안내, 무료 실습 튜토리얼.

이 사이트의 논문 항목으로는 저가 하드웨어로 정밀한 양팔 조작 학습 (ALOHA · ACT)과 확산 정책에서 4절 · 3절의 방법을 원 논문 수치와 함께 보고, 이어서 RT-1 · Open X-Embodiment · OpenVLA · π0 같은 대규모 로봇 정책으로 넘어갑니다.

다음에 볼 것

라이선스

저장소는 Apache 2.0 라이선스입니다. 이 페이지의 명령은 README에서 그대로 옮겼고(파이썬 예시는 README 예시를 줄인 것), 나머지 설명과 숫자 예는 이 사이트가 직접 썼습니다. Hub에 올라온 데이터셋과 모델 가중치는 각각 따로 라이선스가 붙어 있으니 쓰기 전에 확인해야 합니다.

출처

AI 원리부터 이해하기 · 피지컬 AI 모듈

피지컬 AI 모듈 학습

이 글은 피지컬 AI 모듈의 학습 자료입니다. 전체 26개 자료 중 4번째입니다.

AI 기초 과정은 현재 진도 저장을 지원하지 않습니다.

출처·원문

원문 보기

번역가능

Apache 2.0