Action Chunking
액션 청킹에서는 로봇 정책이 한 번의 관측으로 미래 액션 시퀀스를 예측하여 오류 누적을 줄입니다. ACT, 스무딩, VLA를 다룹니다.
액션 청킹은 로봇 학습 기법으로, 제어 단계마다 하나의 액션을 예측하는 대신 단일 관측값으로부터 다음 k개 액션의 시퀀스, 즉 청크를 예측하는 방식입니다. 이 용어는 일련의 액션을 하나의 단위로 묶는 심리학 및 신경과학 개념에서 비롯되었으며, 2023년 트랜스포머를 이용한 액션 청킹(ACT)을 통해 로봇 학습 분야에 도입되었습니다. ACT는 저비용 ALOHA 로봇 팔에서 시연 데이터 10분만으로 배터리를 슬롯에 끼우는 것과 같은 정교한 양손 작업을 80~90% 성공률로 학습했습니다. 청크 예측은 이제 모방 학습과 범용 로보틱스를 위해 개발된 시각-언어-행동(VLA) 모델의 표준이 되었습니다.
청크 예측이 효과적인 이유#
행동 복제에서는 정책이 인간 시연의 액션을 모방하도록 학습합니다. 작은 실수 하나로도 로봇이 시연에서 다루지 않은 상태에 놓이고, 그 상태에서 다음 예측의 정확도는 더 낮아져 긴 작업 동안 오류가 누적됩니다. 예측 한 번에 k개의 액션을 수행하는 정책은 에피소드당 의사결정 횟수를 k분의 1로 줄입니다. ACT 저자들은 이를 작업의 실질적인 시간 범위가 k분의 1로 줄어드는 것으로 설명합니다. 저자들의 시뮬레이션 제거 실험에서는 한 번에 액션 하나를 예측했을 때 두 작업의 평균 성공률이 1%였지만, 100개 액션으로 구성된 청크에서는 44%로 상승했습니다.
청크는 단일 관측값으로 포착할 수 없는 타이밍도 담아냅니다. 인간 시연자는 잠시 멈추거나 주저하기도 합니다. 일시 정지 전후에 같은 이미지를 보는 단일 단계 정책은 기다릴지 움직일지 구별할 수 없지만, 일시 정지를 포함한 청크는 이를 재현합니다. 시연에 작업을 수행하는 유효한 방법이 두 가지 나타나는 경우에도 전체 시퀀스를 한 번에 예측하면 두 방법의 평균을 내는 대신 로봇이 한 가지 방법을 유지합니다.
로봇은 청크를 실행한 다음 정책에 새 청크를 요청합니다:
청크 전체를 실행한 뒤 재계획하면 모델 호출 횟수가 가장 적습니다. Diffusion Policy처럼 청크 일부를 실행한 뒤 재계획하면 모델 예측 제어의 이동 지평선 개념을 따라 예기치 못한 상황에 더 빠르게 대응합니다.
청크 사이의 연결부를 부드럽게 처리하기#
청크를 실행하는 동안 로봇은 개방 루프 방식으로 움직이며, 새 청크는 새로운 예측으로 시작하므로 청크가 이어지는 지점에서 움직임이 갑자기 바뀔 수 있습니다. ACT의 시간 앙상블은 매 단계 정책에 질의하고 현재 단계에 대한 모든 청크의 예측을 가중 평균해 실행합니다. 가중치는 exp(−m·i)이며 가장 오래된 예측에 가장 큰 가중치를 부여합니다. 이 NumPy 예시는 각 청크에 작은 오차가 포함된 대리 정책을 사용해 일반 청킹과 시간 앙상블을 비교합니다:
import numpy as np
rng = np.random.default_rng(0)
k, steps, m = 10, 100, 0.1 # chunk size, episode length, temporal-ensembling decay
target = np.sin(np.linspace(0, np.pi, steps + k)) # the demonstrated joint trajectory
# Stand-in policy: at step t it predicts actions for steps t..t+k-1, each chunk off by its own error
chunks = [target[t : t + k] + rng.normal(0, 0.05) for t in range(steps)]
# Plain chunking: query every k steps and execute each chunk open loop
plain = np.concatenate([chunks[t] for t in range(0, steps, k)])
# Temporal ensembling (ACT): query every step and average all predictions for step t, oldest weighted most
ensembled = []
for t in range(steps):
preds = [chunks[s][t - s] for s in range(max(0, t - k + 1), t + 1)]
weights = np.exp(-m * np.arange(len(preds)))
ensembled.append(np.dot(weights, preds) / weights.sum())
for name, actions in (("plain", plain), ("ensembled", np.array(ensembled))):
print(f"{name}: largest jump between consecutive actions = {np.abs(np.diff(actions)).max():.3f}")
print(f"demonstration: largest jump = {np.abs(np.diff(target[:steps])).max():.3f}")일반 청킹에서는 청크 사이의 연결 지점에서 단계별 최대 변화량이 0.085로 나타나 시연의 0.029보다 약 3배 큽니다. 앙상블에서는 서로 다른 관측값으로 생성된 예측을 최대 10개까지 평균해 이를 0.044로 줄입니다.
추론 시간이 제어 단계보다 길어질 수 있으므로 모델 규모가 커지면 청크 사이의 연결부를 감추기가 더 어려워집니다. Physical Intelligence의 실시간 청킹은 현재 청크가 실행되는 동안 다음 청크를 생성하고, 추론 지연 시간 동안 실행될 액션을 고정한 뒤 나머지 액션을 해당 액션에 맞춰 채웁니다. 이를 통해 300ms가 넘는 지연에서도 성냥을 치는 것과 같은 동적 작업을 계속 수행할 수 있었습니다.
현대 로봇 정책에서의 액션 청킹#
- ACT: 조건부 변분 오토인코더로 학습된 Transformer로, 100개의 관절 위치 목표값으로 구성된 청크를 출력합니다. ALOHA의 50 Hz 제어 속도에서는 2초 분량의 움직임에 해당합니다.
- Diffusion 정책: 각 액션 시퀀스를 반복적으로 노이즈 제거하여 생성하므로, 여러 가지 뚜렷한 해답이 있는 시연을 잘 표현합니다.
- VLA 모델: Physical Intelligence의 π0는 비전-언어 모델과 flow matching으로 학습된 액션 전문가 모델을 결합합니다. 이 모델은 50개 액션으로 이루어진 청크를 출력하여 최대 50 Hz로 제어합니다. Hugging Face의 LeRobot 라이브러리는 ACT, Diffusion Policy, π0의 오픈 구현을 제공합니다.
대부분의 이러한 정책은 학습된 백본으로 원시 카메라 이미지를 인코딩합니다. 정책은 대신 검출기에서 얻은 객체 위치를 조건으로 사용할 수 있습니다. 작업 셀의 부품으로 파인튜닝한 Ultralytics YOLO26 모델은 각 프레임을 몇 개의 박스 또는 키포인트 좌표로 변환하며, 청크 단위 정책은 원시 픽셀 대신 이 좌표를 상태로 사용합니다.










