책상 위에 놓인 저가형 SO-100 로봇팔, 원격조작과 정책 학습을 위해 설정되어 있다
DAggerSO-100모방 학습VLA원격조작

VLA 정책으로 SO-100에서 DAgger 루프 실행하기

AY-Robots ResearchAugust 27, 202615분 분량

SO-100 로봇팔에서 사람이 게이팅하는 DAgger 라운드 한 번을 단계별로 다룬다: 정책을 실행하고 기록하고, 잘못될 때 개입하고, 실행 결과를 교정 데이터로 등록하고, 혼합 데이터셋을 구성하고, 체크포인트에서 학습을 이어간다. 리더 암이 없는 사람을 위한 키보드·슬라이더 개입 경로와, 라운드를 무의미하게 만드는 네 가지 실수도 함께 다룬다.

정책이 실행된다. 큐브를 향해 손을 뻗다가 그리퍼를 1센티미터 일찍 닫아버리고, 마치 큐브를 쥔 것처럼 계속 움직인다. 에러는 전혀 나지 않고, 학습 손실을 아무리 들여다봐도 원인이 설명되지 않는다. 해법은 같은 시연 데이터로 그래디언트 스텝을 2만 번 더 도는 것이 아니다. 잘못되는 바로 그 지점에서 다시 팔에 손을 얹어 대신 무엇을 했는지 기록하고, 기존 데이터에 그 교정 데이터를 더해 다음 체크포인트를 학습시키는 것이다. 이것이 DAgger 라운드이며, 다음은 그 라운드가 SO-100 위에서 비전-언어-행동(vision-language-action) 정책과 함께 어떻게 진행되는지에 대한 설명이다.

이론은 다른 글에서 다룬다: 데이터셋 집계가 애초에 왜 효과가 있는지 그리고 사람이 게이팅을 하면 무엇이 달라지는지. 이 글은 실전 운영 매뉴얼이며, 학습된 체크포인트와 작동하는 카메라 세트, 움직이는 로봇팔이 이미 있다고 전제한다. 아래 여섯 단계는 이 플랫폼의 DAgger 페이지에 구현된 형태의 루프이지만, 직접 만든 스크립트로 진행하더라도 순서는 동일하다.

한 라운드 요약

  • 학습된 정책을 실행하고 기록한다. 이때 일반적인 원격조작 라벨이 아니라 그 실행의 태스크 텍스트를 사용한다.
  • 행동이 잘못되는 순간 개입한다: 리더 암이 있으면 미러링을 통한 인계, 없으면 키보드나 슬라이더로 즉시 수동 개입한다.
  • 모든 실행을 분류한다: 교정 데이터로 등록하거나, 평가 에피소드로 보관하거나, 폐기한다.
  • 혼합 데이터셋은 직접 구성한다 - 원본 시연 데이터에 교정 데이터를 더하고, 에피소드는 출처별로 선택한다. 교정 데이터만으로는 절대 학습하지 않는다.
  • 마지막 체크포인트에서 학습을 이어가고, 어떤 체크포인트가 어떤 혼합 데이터셋을 만들었는지 기록해둔다.
  • 라운드가 의미가 있었는지를 말해주는 수치는 학습 손실이 아니라 개입률이다.

두 번째 라운드가 단순히 데이터를 더하는 것이 아닌 이유

행동 복제(behavior cloning)는 사람이 방문한 상태(state)들로 학습한다. 하지만 테스트 시점에는 정책 스스로가 만들어낸 상태를 방문하게 되고, 작은 행동 오차가 누적되어 어떤 시연 데이터도 다루지 않은 상태로 이어진다. Ross, Gordon, Bagnell은 AISTATS 2011에서 이 실패 양상을 정식화하고, 정적인 결정론적 정책을 학습시키는 반복 알고리즘으로 이에 답했다. 이들의 축소(reduction) 하에서는 정책 스스로가 유도하는 상태 분포에서도 좋은 성능을 내야 한다: 현재 정책을 실행하고, 전문가가 정책이 실제로 도달한 상태에 라벨을 붙이고, 이를 데이터셋에 추가하고, 재학습하고, 반복한다. Kelly 등은 HG-DAgger로 이 질의(query) 과정을 실용화했는데, 여기서는 사람이 조종간을 잡지 않은 채 상태에 라벨을 붙이는 대신 언제 제어권을 가져올지를 직접 결정한다. 이들은 시뮬레이션과 실제 자율주행 과제 모두에서 DAgger와 행동 복제보다 향상된 성능을 보고한다. 사람이 게이팅을 한다는 점이 바로 이 루프를 책상 위 로봇팔에서도 견딜 만하게 만드는 요인이다 - 무언가 잘못될 때만 손을 움직이면 되기 때문이다.

실전에서는 이론보다 더 중요한 결과가 두 가지 있다. 첫째, 교정 데이터는 일반적인 시연 데이터가 아니다: 이는 Mandlekar 등이 설명하는 병목(bottleneck) 구간에 집중되는데, 이 구간에서는 작은 편차만으로도 정책이 시연 데이터가 전혀 다루지 않은 상태로 빠지게 된다. 둘째, 그런 어려운 부분만으로 이루어진 데이터셋은 형태가 나쁜 데이터셋이다 - Belkhale, Cui, Sadigh는 데이터 측면에서 상태 다양성이 항상 유익한 것은 아니며, 행동 발산(action divergence)과 전이 다양성(transition diversity)이 함께 데이터셋 품질을 결정한다고 주장한다. 혼합 데이터셋은 타협안이 아니라 핵심 그 자체다.

1라운드 전에 반드시 고정해둘 것들

DAgger 라운드는 정책을 시간 축을 두고 스스로와 비교하는 것이다. 데이터셋이 아닌 다른 무언가를 라운드 사이에 바꾸면 그 비교는 의미를 잃는다.

  • 카메라 위치와 거치대. 손목 카메라도 포함된다. 클램프 하나만 느슨해져도 정책이 아니라 관측 분포가 바뀐 것이다.
  • 노출과 화이트 밸런스. 캡처 스택에서 고정할 수 있다면 고정한다. 라운드 사이에 자동 노출이 표류하는 것은 느리고 눈에 띄지 않는 도메인 시프트다.
  • 로봇팔 캘리브레이션과 서보 영점(zero position). 재보정이 불가피하다면, 그 이전에 기록된 모든 데이터를 별도의 데이터셋으로 취급한다.
  • 태스크 텍스트. 여기서 다루는 모든 VLA는 이 텍스트에 조건화되어 있으므로, 루프 도중에 문구를 바꾸면 다른 태스크가 된다.
  • 조명, 테이블 표면, 물체 구성. 새 물체를 추가하는 것은 다음 라운드가 아니라 새로운 실험이다.
  • 녹화 프레임 레이트. 서로 다른 샘플링 래스터(raster) 간에 개입률을 비교하면 그 차이는 래스터 자체에서 비롯된 것이다.
손목 카메라는 있어도 그만 없어도 그만인 부속품이 아니다

Hsu 등은 손 중심 시점을 일반적인 3인칭 시점과 비교했고, 눈-손(eye-in-hand) 시점이 장면을 더 적게 보는데도 불구하고 학습 효율과 분포 외(out-of-distribution) 일반화를 일관되게 향상시킨다는 것을 발견했다. 5축 로봇팔에서 교정이 대개 바로잡는 대상은 그리퍼 타이밍이며, 그리퍼 타이밍을 담아내는 것이 바로 손목 시점이다.

라운드 전 과정

  1. 1
    추론을 실행하고 기록하기

    개선하려는 체크포인트를 대상으로 실행을 시작한 다음, 추론 루트(inference root)로 녹화를 시작한다. 이렇게 기록하면 기본 원격조작 라벨이 아니라 정책이 학습받은 그 실행 고유의 태스크 텍스트를 그대로 물려받는다. 녹화 없이는 실패를 지켜볼 수는 있어도 그것으로 학습할 수는 없다.

    bash
    # two calls, not one: the run, then its recording
    POST /inference/start      # model_id, and hf_repo_id = the checkpoint to drive
    POST /recording/start      # root=inference
    # root=inference also makes the recording inherit the run's task text
  2. 2
    잘못될 때 개입하기

    개입(Take over) 버튼을 누르고 입력 모드를 선택한다: 리더 암, 키보드, 또는 슬라이더. 실행기가 일시정지되고, 교정을 수행한 뒤 제어권을 다시 넘긴다. 직접 조작하는 동안 기록된 프레임은 자동으로 개입(intervention)으로 표시된다.

    bash
    POST /inference/takeover/start   # input = leader | keyboard | sliders
    POST /inference/takeover/nudge   # keyboard, relative delta per call
    POST /inference/takeover/set     # sliders, absolute target
    POST /inference/takeover/stop    # back to the policy
  3. 3
    에피소드 분류하기

    에피소드별로 결정한다: 교정 데이터로 등록하거나, 평가용으로 보관하거나, 폐기한다. 정책이 도움 없이 완료한 실행은 평가 데이터다.

  4. 4
    교정 데이터셋 동기화하기

    교정 데이터는 정책별로 로컬 데이터셋에 모이며, 자동 동기화를 통해 클라우드 스토리지로 전송된다. 직접 넣지 않은 데이터는 섞이지 않는다.

  5. 5
    혼합 데이터셋 구성하기

    원본 데이터셋과 교정 데이터를 결합하되, 에피소드는 출처별로 명시적으로 선택한다. 그 결과물은 이 시점부터는 평범한 데이터셋이 된다.

    bash
    POST /training/datasets/compose
      sources  = [ original_dataset, korrekturen_<policy> ]
      episodes = explicit selection per source
  6. 6
    체크포인트에서 학습 이어가기

    베이스 모델이 아니라 이전 체크포인트에서 혼합 데이터셋을 학습시킨다. 어떤 체크포인트와 어떤 혼합 데이터셋을 사용했는지 기록해둔다. 이 조합이 없으면 라운드를 재현할 수 없다.

    bash
    # field on the training job
    base_checkpoint = s3://ay-robots/checkpoints/<run>/<checkpoint>
    # the platform passes it to the training pod as BASE_CKPT_S3

2단계 자세히 보기: 개입하는 두 가지 방법

리더 암을 사용하는 경우

해당 리더-팔로워 모드에서는 개입이 서로 다른 자세에 있는 두 팔 사이의 인계로 이루어진다. 개입(Take over) 버튼을 누르면 실행기가 일시정지되고 리더 암이 팔로워의 현재 자세로 구동되므로, 토크가 넘어갈 때 아무것도 튀지 않는다. 이 정렬 구동이 타임아웃되면 리더를 손으로 직접 정렬한 뒤 두 팔의 각도차가 5도 이내가 되었을 때만 놓아준다. 그 이후로는 평소처럼 원격조작하며, 액션(action) 열에는 당신이 명령한 값이 그대로 기록된다.

이 경로에 대해서는 솔직해질 필요가 있다: 정렬 구동과 토크 인계는 실제 하드웨어에서 루프 중 가장 테스트가 덜 된 부분이다. 중요한 실행에 의존하기 전에, 느리고 위험하지 않은 자세에서 먼저 인계를 테스트해보라. 리더 암은 세 가지 모드 중 가장 매끄러운 교정을 만들어내지만, 동시에 기계적으로 잘못될 수 있는 요소도 가장 많다.

리더 암이 없는 경우: 키보드와 슬라이더

이 글을 읽는 대부분의 사람은 로봇팔을 하나만 가지고 있을 것이다. 그것으로 충분하다. 개입(Take over) 버튼을 누르는 순간 키보드나 슬라이더 입력을 선택하면 개입은 즉시 수동으로 이루어진다 - 정렬할 두 번째 팔이 없으므로 정렬 단계 자체가 없다. 팔로워는 자세를 유지한 채 입력을 기다린다.

입력 모드팔이 움직이는 방식서버가 강제하는 호출당 제한잠기는 조건
리더 암미러링이 리더의 관절 각도로 팔로워를 구동한다이 모드에서는 nudge나 set 호출이 없다; 미러링이 팔로워 목표값을 계속해서 기록한다결코 잠기지 않으며, 입력 모드를 지정하지 않았을 때의 기본값이다 - 다만 두 번째 팔이 필요하며, 리더 id가 없으면 개입이 거부된다
키보드키를 누를 때마다 상대적인 nudge를 전송하며, 개입 nudge 엔드포인트로 보내진다관절당 2도, 그리퍼는 4도로 하드 클램프된다개입이 리더 모드로 시작된 경우 409로 거부된다
슬라이더절대 목표 자세를 전송하며, 개입 set 엔드포인트로 보내진다호출당 목표를 향해 최대 6도까지만 이동하며, 인터페이스는 초당 약 10회씩 계속 전송한다개입이 리더 모드로 시작된 경우 409로 거부된다

이 클램프는 인터페이스가 아니라 서버 측에서 강제되는데, 버스 서보 방식 로봇팔에서는 델타값 오타 하나가 충돌로 이어지기 때문이다. 키보드 교정은 계단식으로 다소 거칠게 나오는 반면, 슬라이더 교정은 서버가 목표를 향해 점진적으로 이동하고 인터페이스가 계속 스트리밍하기 때문에 더 매끄럽다. 어느 쪽이든 액션 열에는 명령된 자세 벡터 전체가 기록되고 개입 표시는 리더 경로와 동일하므로, 키보드 교정도 형식 차이 없이 같은 데이터셋에 들어간다.

text
Q / A   joint 1      R / F   joint 4
W / S   joint 2      T / G   joint 5
E / D   joint 3      Z / X   gripper
스택의 다른 모든 곳과 동일한 키 배치를 사용하므로, 녹화 과정에서 익힌 근육 기억을 그대로 활용할 수 있다.
SO-100 데이터셋에 대한 GR00T 파인튜닝 실행의 순서를 보여주는 학습 가이드
라운드의 학습 단계는 첫 실행 때와 동일한 안내된 절차를 따르며, 체크포인트 필드만 다르다.

버튼을 눌러야 할 시점

늦기보다는 이른 편이 낫다. 그리퍼가 허공을 쥐고 닫힌 뒤에 시작되는 교정은 정책이 애초에 빠지지 말았어야 할 실패로부터의 회복을 가르치게 되는데, 회복 데이터는 회피 데이터보다 가치가 훨씬 낮다. 궤적이 잘못되었다고 확신하는 첫 순간에 개입하고, 어려운 구간을 교정으로 통과시킨 뒤, 정책이 이전에 처리해본 적 있는 상태가 되는 즉시 제어권을 돌려준다. ThriftyDAgger는 정해진 사람 예산(human budget) 안에서 새로움(novelty)과 추정 위험도를 기준으로 개입 여부를 게이팅함으로써 이 결정을 자동화하지만, 이미 사람이 지켜보고 있는 단일 로봇팔에서는 사람이 직접 게이팅하는 편이 어떤 튜닝보다 저렴하고 더 잘 보정되어 있다.

오픈소스 스택과 몇 개의 스크립트만으로 충분히 할 수 있다. 대가로 치러야 하는 것은 기록 관리(bookkeeping)이며, DAgger 라운드는 대개 이 기록 관리에서 무너진다.

  1. 직접 만든 추론 스크립트에서 나온 프레임을, 정책이 학습받은 태스크 문자열과 함께 LeRobot 데이터셋에 기록한다.
  2. 정책 루프를 일시정지하고, 명령 소스를 전환한 뒤, 직접 조작한 모든 프레임을 개입(intervention)으로 표시한다. 이 표시가 없으면 교정 데이터가 일반 시연 데이터처럼 보이게 된다.
  3. 정책이 제어권을 놓은 시점과 당신의 첫 입력 사이에 있는 전이(transition) 프레임을 어떻게 처리할지 의도적으로 결정한다.
  4. 교정 데이터는 정책별로 별도의 데이터셋에 보관하고, 에피소드 인덱스를 직접 추적하여 나중에 혼합 구성을 재현할 수 있도록 한다.
  5. 파인튜닝 진입점(entry point)이 이전 체크포인트를 가리키도록 설정하고, 로그에서 해당 가중치가 실제로 로드되었는지 확인한다.

3단계 자세히 보기: 품질을 결정하는 것은 분류다

실행이 끝나면 일부 프레임이 개입으로 표시된 녹화 데이터가 생긴다. 갈 곳은 세 가지이며, 잘못된 곳으로 보내면 다음 라운드가 조용히 오염된다.

  • 개입이 진짜 수정이었을 때 교정으로 등록한다: 정책이 잘못된 방향으로 가고 있었고, 당신의 입력이 정책 스스로가 만들어낸 그 상태에서 올바른 행동을 보여준 경우다.
  • 깔끔하게 자율적으로 완료된 실행과, 조심스러움 때문에 개입했던 실행은 평가용으로 보관한다. 평가 에피소드는 다음 체크포인트를 측정하는 수단이므로, 절대로 학습에 사용해서는 안 된다.
  • 무관한 이유로 망가진 실행은 폐기한다 - 카메라 프레임 드롭, 서보 멈춤, 당신이 건드려 넘어뜨린 물체 등. 지저분한 교정은 교정이 아예 없는 것보다 나쁘다.
인계 시점의 정지 프레임은 원본 녹화에 있을 자리이지, 학습 데이터에 있을 자리가 아니다

정책이 제어권을 놓은 시점과 당신의 첫 입력 사이에는, 레코더가 계속 기록하는 동안 로봇팔은 가만히 멈춰 있다 - 거의 똑같은 자세가 조금씩 다른 이미지와 짝지어져 연속으로 이어지는 구간이다. 여기서는 그런 인계 프레임을 원본 녹화에만 남겨두고 교정 데이터셋에서는 제외한다. 루프를 직접 구축한다면 이 구간을 의도적으로 잘라내라: 이런 프레임으로 학습된 정책은 행동해야 할 곳에서 멈추는 법을 배우게 된다.

5단계 자세히 보기: 혼합 데이터셋 구성하기

구성(composition)은 원본 데이터셋과 교정 데이터셋을 합쳐 새로운, 평범한 LeRobot 데이터셋을 만들어내며, 이것은 다른 어떤 데이터셋과도 똑같이 학습에 쓰인다. 중요한 특성은 에피소드 선택이 출처별로 명시적으로 이루어진다는 것이다 - 자동으로 섞여 들어가는 것은 없다. 이는 정책이 이상하게 행동하기 시작해서 무엇으로 학습되었는지 재구성해야 하는 순간이 오기 전까지는 사소해 보인다.

아직 풀리지 않은 질문은 비율이며, 어디에나 통하는 숫자를 가진 사람은 아무도 없다. 문헌들이 동의하는 지점은, 교정 데이터가 프레임 비중 이상의 무게를 가져야 한다는 것이다. Mandlekar 등은 자신들의 개입 시스템이 수집한 데이터로 반복적으로 재학습시켜 정책이 병목 구간을 통과하는 법을 배우게 하며, 이렇게 학습된 에이전트가 개입하지 않는 시연자로부터 얻은 동일한 개수의 표본으로 학습된 에이전트보다 뛰어나다고 보고한다. Sirius는 한발 더 나아가 근사된 사람 신뢰도(human trust)로 학습 표본에 가중치를 다시 부여하여, 비교 대상 방법들 대비 시뮬레이션에서는 8퍼센트, 실제 하드웨어에서는 27퍼센트의 정책 성공률 향상을 두 배의 수렴 속도로 보고한다. 여기서 다루는 학습 진입점 중 어느 것도 표본 가중치를 조절하는 손잡이를 제공하지 않으므로, 거친 대안은 원본 시연 데이터는 서브샘플링하면서 모든 교정 에피소드는 그대로 유지하는 것이다 - 그리고 자신이 무엇을 했는지 기록해두는 것이다.

카메라 스트림과 함께 SO-100 데이터셋의 에피소드들을 보여주는 데이터셋 녹화 화면
교정 에피소드는 프레임 단위 개입 표시가 붙은 평범한 에피소드이므로, 변환 없이 원본 데이터셋과 그대로 결합된다.

6단계 자세히 보기: 체크포인트에서 이어간다는 것이 실제로 의미하는 것

베이스 모델에서부터 혼합 데이터셋을 학습시키는 것도 가능은 하지만, 이전 라운드를 버리는 셈이고 학습을 통째로 다시 도는 비용이 든다. 이전 체크포인트에서 이어가는 편이 더 빠르고 대체로 더 낫다. 다만 이 표현이 암시하는 것보다는 더 제한적이다.

가중치 초기화는 옵티마이저 재개가 아니다

가중치만 있는 체크포인트에는 파라미터만 들어 있을 뿐 그 외에는 아무것도 없다. 이를 로드하면 베이스 모델보다 더 나은 출발점을 얻게 되지만, 옵티마이저 모멘트, 학습률 스케줄 위치, 데이터 순서는 모두 0에서 다시 시작한다. 이어서 진행한 실행 초반에는 손실 급등을 예상해야 하며, 이를 실패로 읽어서는 안 되고, 이 라운드를 재개(resume)라고 불러서도 안 된다. 이것은 웜 스타트다.

정책크기GPU 등급액션 스텝당 추론 시간데이터셋 형식시도해볼 만해지는 에피소드 수
GR00T N1.7약 30억 개, 파인튜닝 중 학습되는 파라미터는 약 4천만 개A100 80GB 또는 H100 80GB약 152msLeRobot v2.0 또는 v2.150
GR00T N1.5약 30억 개A100 80GB 또는 H100 80GB약 165msLeRobot v2.0 또는 v2.150
Pi0.5PaliGemma 백본 기준 약 30억 개A100 80GB 또는 H100 80GB약 485msLeRobot v3.050
SmolVLA약 4억 5천만 개RTX 4090 또는 24GB급 카드약 245msLeRobot v3.030
ACT약 8천만 개, 처음부터 학습RTX 4090 또는 24GB급 카드약 20msLeRobot v3.050

지연시간(latency)은 시연 때와 달리 DAgger 루프 안에서는 누적된다: 액션 스텝당 약 485ms이면, 로봇팔이 틀려서가 아니라 머뭇거려서 개입하게 되는데, 이런 머뭇거림에 대한 교정은 학습 데이터로서 쓸모가 없다. 최종 성공률을 좇기보다 데이터를 반복적으로 다듬는 단계라면, 빠른 모델로 반복하라. Shukor 등은 SmolVLA를 단일 GPU로 학습하고 소비자용 GPU나 CPU에서도 배포할 수 있도록 설계했다고 설명하며, 행동 예측과 실행을 분리하는 비동기 추론 스택을 통해 더 높은 제어 주기를 가능하게 한다고 밝힌다 - 이것이 개입 루프를 반응성 있게 유지해주는 특성이다.

데이터셋 형식도 서로 호환되지 않는다. GR00T는 LeRobot v2.0 또는 v2.1을 사용하며, Isaac-GR00T 저장소는 자신의 입력을 모달리티(modality) 설명 파일이 추가된 LeRobot v2 형식의 변형이라고 설명한다. 반면 여기서 다루는 더 최신 트레이너들은 v3.0을 요구한다. 잘못된 버전으로 구성된 혼합 데이터셋은 나쁜 정책을 만들어내는 대신 로드 시점에 실패하는데 - 그나마 나은 실패 방식이긴 하지만, 그래도 대기열 자리 하나를 낭비한 셈이다. 데이터셋 문서에 각 트레이너가 요구하는 형식이 정리되어 있다.

이미 기록 관리가 끝난 루프

리더 암, 키보드, 슬라이더를 이용한 개입; 프레임 단위 개입 표시; 실행을 교정 또는 평가로 등록하기; 출처별로 명시적인 에피소드 선택을 통한 혼합 데이터셋 구성; 베이스 모델 대신 체크포인트에서 학습 이어가기. 여전히 당신의 판단으로 남는 것은 어떤 실행을 교정으로 볼지, 무엇을 혼합 데이터셋에 넣을지, 그리고 개입률이 더 이상 떨어지지 않는 시점이 언제인지다.

DAgger 루프가 어떻게 구성되어 있는지 살펴보기

라운드를 낭비하는 네 가지 방법

1. 교정 데이터만으로 학습하기

가장 흔한 실패이자 가장 유혹적인 지름길이다. 교정 데이터만으로 이루어진 데이터셋은 거의 전부가 태스크의 어려운 중간 구간이고, 접근과 후퇴 구간은 빠져 있다; 그 결과 정책은 어려운 부분은 나아지지만 그곳에 도달하는 방법은 잊어버린다. 데이터 집계(aggregation)는 이 방법의 구현 세부사항이 아니라 메커니즘 그 자체다: 교정 데이터가 행동의 한 부분을 바꾸는 동안, 나머지 행동을 붙잡아두는 것은 바로 기존 데이터다.

2. 라운드 사이에 카메라를 옮기기

라운드 사이에 2센티미터만 옮겨진 카메라는 처음보다 더 나쁜 정책을 만들어내고, 원인 진단에는 하루가 걸린다. 여기서 다루는 모든 VLA는 이미지에 조건화되어 있다; 관절 상태만으로는 물체가 어디에 있는지 구분할 수 없다. 첫 라운드 전에 셋업을 사진으로 남기고, 이후의 각 라운드 전에 그 사진과 대조하라.

3. 인계 아티팩트를 학습 데이터에 섞이게 두기

위에서 이미 다뤘고, 눈에 띄지 않는다는 이유로 이 목록에 올라 있다. 증상은 이전 라운드에서 조작자가 개입했던 바로 그 지점에서 정책이 아주 짧은 순간 멈칫거리는 것이다. 겉보기엔 머뭇거림 같지만, 실제로는 모방이다.

4. 웜 스타트를 재개(resume)라고 부르기

옵티마이저 상태가 그대로 이어졌다고 믿으면, 초반의 손실 급등이 버그처럼 보여서 손상된 데이터를 찾아 헤매게 된다. 옵티마이저가 처음부터 다시 시작했다는 것을 알고 있다면, 그 급등은 예상된 일이고 그 이후에 무엇이 오는지를 살펴보게 된다. 같은 숫자를 두고 정반대의 결론에 이르는 것이다.

라운드 측정하기

사람이 게이팅하는 루프의 지표는 개입률이다: 당신이 제어권을 쥐고 있는 동안 기록된 프레임 수를 그 실행의 전체 프레임 수로 나눈 값이다. 이 값은 개입 상태(takeover status)에 나타나며, 라운드가 던진 질문에 답하는 유일한 수치다. 학습 손실은 정책이 실제로 좋아졌는지 여부와 무관하게 떨어진다; 성공률은 이진값이고 책상 위 로봇팔이 만들어내는 표본 크기에서는 잡음이 심하다. 개입률은 연속값이며, 정책 스스로가 만들어낸 상태들에 대해 측정되고, 정책이 당신을 덜 필요로 할수록 낮아진다.

개입률은 동일한 조건에서 기록된 실행끼리만 비교해야 한다. 이에 대한 전체 논의와, 두 라운드 이상 유효한 평가 세트를 구축하는 방법은 DAgger 루프 측정에 관한 글에 있다. 현실적으로 1라운드는 실현 가능성 테스트에 가깝다: 당신의 하드웨어에서 개입이 실제로 작동하는지, 교정 데이터가 표시와 함께 잘 들어오는지, 이어서 진행한 실행이 지정한 체크포인트를 제대로 로드했는지를 확인하는 단계다. 개입률이 움직이기 시작해야 하는 것은 2, 3라운드부터다. 4라운드가 되어도 움직이지 않는다면, 문제는 DAgger보다 앞단에 있는 것이다.

라운드마다 기록해둘 것나중에 왜 중요한가
구동에 사용된 체크포인트이것이 없으면 개선을 특정 혼합 데이터셋의 공로로 돌릴 수 없다
개입에 사용한 입력 모드키보드 교정은 리더 교정보다 거칠고, 그 차이가 데이터에 드러난다
실행 횟수와 각각이 어떻게 분류되었는지이 라운드에 의미가 있을 만큼 충분한 교정이 있었는지
실행별 개입률과 그 평균루프의 진행 지표
출처별 정확한 에피소드 선택 내역라운드를 재현하거나 되돌릴 수 있는 유일한 방법
웜 스타트인지 완전히 새로운 학습인지일주일 뒤 보게 될 손실 곡선을 설명해준다

아직 체크포인트가 없다면

이 루프는 체크포인트 없이는 진입점이 없다. 먼저 첫 데이터셋을 기록하고, 첫 정책을 학습시키고, 실행해보라 - 녹화, 학습정책 실행 문서가 그 경로를 다룬다. 녹화 클라이언트는 다운로드 페이지에, GPU 등급과 시간당 요금은 가격 페이지에, 그리고 쓸 만한 에피소드가 어떤 모습인지는 SO-100 데이터 수집 가이드에 나와 있다. 교정에 앞서 시연 데이터부터 제대로 만들어라: DAgger는 수리 메커니즘이며, 이미 거의 맞았던 것에 대해 훨씬 더 잘 작동한다.

리더 암 없이도 DAgger 루프를 실행할 수 있나요?

네. 개입(Take over) 버튼을 누를 때 키보드 또는 슬라이더 입력을 선택하면 된다: 개입은 즉시 수동으로 이루어지며 정렬할 두 번째 팔이 없다. 키보드는 서버가 관절당 2도, 그리퍼는 4도로 강하게 제한하는 상대적 nudge를 전송한다; 슬라이더는 절대 목표값을 전송하며, 서버는 호출당 최대 6도까지만 그 목표를 향해 움직이는 동안 인터페이스는 계속 스트리밍한다. 액션 열과 개입 표시는 리더 모드와 동일하므로, 데이터셋 안에서 교정 데이터를 구분할 수 없다.

한 라운드에는 교정 데이터가 몇 개나 필요한가요?

방어 가능한 보편적인 숫자는 없으며, 에피소드 개수보다 프레임 개수가 더 중요하다. 실용적인 규칙은 교정 데이터가 혼합 데이터셋 안에서 묻혀버리면 안 된다는 것이다: 원본 에피소드 200개에 교정 에피소드 3개를 더해봐야 아무것도 움직이지 않는다. 같은 구조 상황을 세 번 반복하기보다는, 실패 행동을 여러 시작 구성에서 포괄하는 교정 데이터를 목표로 삼아라.

교정 데이터만으로 학습하는 것이 왜 그렇게 나쁜 생각인가요?

교정 데이터는 거의 전부가 태스크의 어려운 중간 구간이기 때문이다. 접근, 정렬, 후퇴 구간이 빠져 있어서, 정책은 고친 부분에서는 나아지는 대신 이미 잘하던 것을 잃어버린다. 기존 데이터를 유지하면서 거기에 더하는 것 자체가 이 방법의 메커니즘이지, 선택적인 부가 사항이 아니다.

체크포인트에서 이어가는 것이 이전 학습 실행을 재개(resume)하는 건가요?

아니다. 가중치만 있는 체크포인트는 파라미터만 복원할 뿐 그 외에는 아무것도 복원하지 않는다: 옵티마이저 모멘트, 학습률 스케줄 위치, 데이터 순서는 모두 처음부터 다시 시작한다. 이것은 웜 스타트이며, 초기 손실 급등은 문제의 징후가 아니라 예상된 일이다. 둘 중 실제로 무엇을 했는지 기록해두어, 일주일 후 곡선을 올바르게 읽을 수 있도록 하라.

개입률이 떨어지지 않는다면 어떻게 하나요?

라운드를 더 추가하는 것을 멈춰라. 개입률이 정체되어 있다는 것은 교정 데이터가 당신이 생각하는 것을 가르치고 있지 않다는 뜻이다. 흔한 원인은 대개 더 앞단에 있다: 카메라가 움직였거나, 교정이 회피 데이터가 되기에는 너무 늦게 시작되었거나, 인계 프레임이 학습 세트에 섞여 있거나, 정책이 실제로 받는 관측만으로는 태스크가 충분히 결정되지 않는 경우다.

이 중 어느 것도 완전히 풀린 문제가 아니고, 클릭 한 번으로 해결되는 것도 없다. 상호작용형 모방 학습이 활발한 연구 분야인 이유는 정확히, 언제 개입할지, 사람이 한 행동에 얼마나 가중치를 둘지, 기존 데이터를 얼마나 남겨둘지와 같은 질문들에 정해진 답이 없기 때문이다; Celemin 등의 서베이는 아직 열려 있는 부분들을 정리해서 보여준다. 하지만 이 루프가 가진 것은, 신중하게 진행했을 때 몇백 유로짜리 하드웨어에서도 측정 가능한 수렴이 나타난다는 점이다. 셋업을 고정하고, 일찍 개입하고, 정직하게 분류하고, 신중하게 혼합하고, 매번 개입률을 기록하라.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started