Index
2026-09-23 — Analysis

실험 3 사례 연구 — 같은 편을 5 arm이 어떻게 풀었나

scene_bench | 본 런 53~56% 시점 · 1답 2편 + multi 3편 × 5 arm · 턴·노트·wrist 프레임 단위 추적

TL;DR

1 왜 행 단위인가 · 어떤 편을 골랐나

본 런 53% 시점 집계는 M2(false_done)에서 blind가 가장 나쁘고 frames-uniform·tagmem이 가장 좋다고 말한다. 집계는 "왜"를 못 말한다 — 어떤 화면을 보고 어떤 판단을 했는지, 메모리에 무엇이 있었는지를 봐야 arm 간 차이가 기억의 차이인지 우연의 차이인지 갈린다.

선정 기준: 5 arm 공통 완료 · 1답 칸 · 성공/실패 혼재 · 종료 사유 다양. 두 편은 서로 반대 방향이다.

편질의blindframes-uniformrollforward-v3vis-puretagmem-r3
A train_2853__0wine bottleFD 3턴✓ 12턴 nav_loop✓ 8턴FD 5턴✓ 6턴
B train_3916__0pot예산 9턴FD 4턴예산 9턴FD 4턴✓ 9턴
읽는 법: hold_count_end는 하네스가 pick 종료 시 물체를 5 cm 들어 두 번 확인한 횟수(2=파지 성공, 0=실패). VLM은 이 값을 받지 않는다 — exo + wrist 화면 2장만 본다.

2 Case A — wine bottle: 셋 다 잡았는데 셋 다 몰랐다

armt1 pick이후결말
blindhold=0t2 wrist에 병목이 손가락 사이 → "successfully grasped and lifted"false_done
frames-uniformhold=2t2 "moving towards… not completed" → 재-pick ×4 → t5 놓침 → t6 "fell onto the floor" → navigate ×6nav_loop (lifted 기록됨)
rollforward-v3hold=2노트 "gripper enclosing neck, not yet lifted" 5턴 → 재-pick ×5 → t6 놓침 → t7 "clearly lifted" done✓ 놓친 뒤 done
vis-purehold=0 ×3메모리 이미지 0장(KEEP 없음) → t4 "lifted into the air"false_done
tagmem-r3hold=2노트 "grasping in progress" 3턴 → 재-pick ×3(hold 유지) → t5 "clearly grasped" done✓ 든 채로 done

프레임이 말하는 것

blind t2 wrist · hold=0 · "successfully grasped"
병목이 닫힌 손가락 사이를 꽉 채움. 잡힌 것처럼 보인다. 실제로는 들리지 않았다.
frames t2 wrist · hold=2 · "not completed, continue pick"
병이 비스듬히, 뒤로 바닥·테이블. 잡힌 것처럼 안 보인다. 실제로는 들고 있었다.
tagmem t5 wrist · hold=2 · "clearly grasped" → done
같은 비스듬한 장면. 여기서는 done을 선언했고 맞았다.
frames t6 exo‖wrist · "fell off the table onto the floor"
4번 재-pick 끝에 놓쳐 병이 테이블에서 사라졌다. 여러 턴 프레임이 있어야 알 수 있는 사실.
정정(§12 참조): 아래 "재-pick ×N → 놓침"은 물리적으로 든 채 놓친 것이 아니다. find는 pick 성공 직후 하네스가 물체를 자동으로 내려놓고(auto-release), 그 뒤 화면만 보고 다시 집으려다 실패한 것이다. 병이 바닥에 떨어진 것(frames t6)은 그 재-pick이 병을 쳐낸 결과다.
시각 신호가 실측과 거꾸로다. 실패한 파지(왼쪽 위)가 성공한 파지(오른쪽 위)보다 더 "잡힌 것처럼" 보인다. 한 장만 보는 관찰자는 이걸 맞힐 수 없다 — 그리고 blind든 tagmem이든 매 턴의 판단은 한 장(정확히는 exo+wrist 한 쌍)이다.

3 Case B — pot: 이미지 arm이 false_done, 텍스트 arm은 정직하게 소진

armpick 결과결말
blindhold=0 ×8매 턴 "positioned… not yet lifted" — 정직, 예산소진
frames-uniformhold=0 ×2t3 wrist가 pot 내벽에 밀착 → "successfully picked up" false_done
rollforward-v3hold=0 ×8노트 "aligning/grasping rim, continuing" — 정직, 예산소진
vis-purehold=0 ×2KEEP F2 → t3 "lifted (visible in F2)" — 메모리 프레임을 근거로 착각 false_done
tagmem-r3t3 hold=2 → t4 재-pick 놓침 → t7 hold=2t8 "exterior and wrist views show lifted" done ✓
vis-pure가 인용한 F2 (t2 관측) · hold=0
pot 손잡이가 그리퍼에 걸쳐 있고 아래에 나뭇결. 들린 것처럼 보인다. 다음 턴에 "F2에 들린 게 보인다"며 done.
frames t3 wrist · hold=0 · "successfully picked up"
카메라가 pot 내벽에 밀착. 파지인지 접촉인지 구분 불가.
tagmem t8 wrist · hold=2 · done
pot 손잡이가 손가락에 물려 있음. t7에 잡은 직후 선언 — 시점이 맞았다.
이미지가 많다고 판단이 좋아지지 않는다. vis-pure는 이미지 한 장을 KEEP했고 그 한 장이 착각의 근거가 됐다. 모호한 프레임이 하나 더 늘어났을 뿐이다.

4 두 편에 공통인 것

현상Case ACase B
든 채로 재-pick (M1)frames 4 · rf-v3 5 · tagmem 3tagmem 1 (t3→t4 놓침)
그 재-pick으로 놓침frames · rf-v3tagmem
"잡혔다" 착각 프레임blind t2frames t3 · vis-pure F2
"안 잡혔다" 착각 프레임frames · rf-v3 · tagmem t2~t5—
정직하게 예산 소진—blind · rf-v3
rf-v3 (Case A) — hold=2 인 5턴 동안 노트가 쓴 것: t2: "Attempting pick(wine bottle) - gripper aligning/grasping, not yet lifted." t3: "Attempted pick(wine bottle) - gripper enclosing neck of wine bottle, continuing pick." t5: "Attempted pick(wine bottle) - gripper is closing around wine bottle, continuing pick." t6: (hold=0, 놓침) t7: "Picked up the wine bottle successfully." ← 놓친 뒤에 성공 기록

5 Takeaway

1. 파지 상태는 한 프레임에 안 보인다 — 양방향으로. "잡힌 것처럼 보이는데 아님"(blind A, frames B, vis-pure B)과 "잡혔는데 안 잡힌 것처럼 보임"(frames·rf-v3·tagmem A) 둘 다 나온다. 이 실험의 모든 arm이 같은 눈을 쓰고, 고유수용 신호는 없다.

2. 메모리는 "지금 들고 있는가"를 알려주지 않는다. 실제로 준 것은 (a) 여러 턴 프레임으로 물체가 움직였음을 알아채는 것(frames A t6), (b) 텍스트로 "시도 중"을 이어가며 끈질기게 재시도하는 것. 둘 다 "들었는가" 판단은 못 돕는다.

3. 든 채로 재-pick(M1)이 성공을 깨는 주범이다. Case A에서 세 메모리 arm이 전부 t1에 잡았고, 셋 다 못 알아채 3~5번 재-pick, 둘은 그 바람에 놓쳤다. 실험 2의 "19%가 자기 성공을 깼다"의 실물이다.

4. 이미지 메모리는 착각의 근거가 될 수 있다. vis-pure B는 KEEP한 프레임을 "들린 증거"로 인용했다.

5. 텍스트 노트는 상태가 아니라 과정을 적는다. hold=2인 5턴 동안 "grasping in progress". 계획 단계를 서술하지 물리 상태를 기록하지 않는다.

tagmem이 두 편 다 성공한 이유

done 선언 시점이 실제 hold와 겹쳤다(A: t4 hold=2→t5 done, B: t7 hold=2→t8 done). rf-v3 A는 놓친 뒤 done을 선언해 운으로 살았다. tagmem의 done 정밀도 .59(1위)는 "exterior and wrist views show…"처럼 두 카메라를 교차 확인하는 서술과 함께 나타난다 — 우연만은 아니지만 표본 두 편으로 단정할 수 없다. 별건으로 기록한 tagmem의 두 결함(KEEP 0회 · 노트 계획 서술 편향 76%)과는 독립적으로, 파지 인지 자체가 전 arm 공통 바닥이다.

6 Next

7 [multi] 사례 — 실행 상태 기억이 진짜 필요한 곳

1답 사례가 "파지 상태 불가시"를 보였다면, multi는 "1번은 끝냈으니 2번으로"를 기억해야 하는 곳이다. 5 arm이 가장 갈리는 multi 두 편.

편질의blindframesrf-v3vis-puretagmem
A train_4136__1 3답potato → butter knife → remote예산 0/3 30tFD 1/3 23t예산 1/3 31t✓ 3/3 12t예산 0/3 31t
B train_6222__1 2답potato(dresser) → potato(chair)예산 0/2 38tabort 0/2 8tFD 0/2 6tFD 0/2 13tFD 0/2 19t

8 [multi A] 같은 감자를 vis-pure는 첫 pick에, tagmem은 30번 실패

arm1단계 (감자)이후
vis-puret1 hold=2t3 "grasped and lifted" → 2단계. 버터나이프 t5 hold=2 · 리모컨 t8~t10 hold=2 → t11 done
framest2 hold=2 → 재-pick ×2 놓침t5 2단계로(lifted 기록됨) → 버터나이프 ×12 전부 hold=0 → t18 "successfully lifted"(거짓) → 리모컨 ×3 실패 → t22 done
rf-v3t2 hold=2 → 재-pick ×2 놓침t5 노트 "Step 1 complete" → 버터나이프 ×16, 노트 "attempt 9"까지 정직 → 예산
blindpick ×28 전부 hold=0t29 "lifted and placed back down, step 1 complete"(거짓) → 예산
tagmempick ×30 전부 hold=0노트 매 턴 "potato remains on chair" 정직 → 예산. 노트 4,893자

세 arm 모두 감자까지 0.43~0.59 m(도달반경 1.0 안), first_nav_hit=True. 그런데 프레임이 다르다.

vis-pure t1 exo‖wrist — 로봇이 의자 정면. wrist에 등받이와 감자.
tagmem t1 exo‖wrist — 로봇이 의자 옆에 비스듬히. 감자는 화면 가장자리.
vis-pure t2 wrist · hold=2 — 감자가 손가락 사이, 뒤로 등받이. 첫 pick에 잡았다.
tagmem t2 wrist · hold=0 — 의자 프레임만, 감자가 화면 밖. 여기서 30번 시도했다.
place_robot_near가 뽑은 접근 자세가 갈랐다. 같은 물체·같은 목표·같은 VLA인데 한쪽은 정면, 한쪽은 옆. 다른 세션이 잰 "pick 접근 자세오차 중앙 23.7°"의 실물이고, 이 런은 그 보정을 끈 채(실험 2 조건 핀) 돌고 있다. vis-pure의 3/3은 좋은 자세를 세 번 뽑은 것이지 메모리가 아니다 — 세 물체 모두 첫 pick에 hold=2였다.

9 [multi B] 서랍장 감자를 두 arm이 "없다"고 결론냈다

arm1단계 (서랍장 감자)이후
blindpick ×37 hold=0, 매 턴 정직예산
framespick ×7 → t7 abort "no potato on the dresser"—
rf-v3pick ×1 → t2 "has been picked up"(1회 만에 거짓)2단계 pick ×2 실패 → t5 done(거짓)
vis-purepick ×7 → t8 "has been picked up"(거짓)2단계 ×3 실패 → t12 done(거짓)
tagmempick ×15 정직 → t16 "repeated attempts did not find a potato (only a cell phone and book)" → 2단계로pick ×1 → t18 "grasped"(거짓) done
tagmem t1 exo‖wrist — 서랍장 위 책 옆 작은 붉은 물체가 감자. 로봇은 0.57 m 거리. wrist는 서랍장 옆면을 본다.
tagmem t1 wrist — 어두운 옆면과 벽. 윗면이 안 잡힌다. 이 화면으로 "감자가 없다"고 판단했다.
전 arm이 감자 0.53~0.60 m 안까지 갔다 — 감자는 거기 있다. frames·tagmem의 "없다"는 정직한 관찰이지만 틀린 자세에서의 관찰이다. tagmem의 t16 "1단계 포기하고 2단계로"는 두 편에서 유일한 전략적 전환인데, 바로 다음 턴에 2단계도 거짓 done으로 끝났다.

10 [multi] Takeaway

1. 사슬은 첫 파지에서 막힌다. 10런 중 7런이 예산 대부분을 1단계에 썼다. 2·3단계의 상태 추적은 시험될 기회조차 없었다. multi의 M4(gc)는 "사슬 기억"이 아니라 첫 물체의 파지 운이 정한다.

2. 1단계가 실제로 끝나면 전 arm이 2단계로 넘어간다. frames·rf-v3·vis-pure는 감자를 든 직후 정확히 버터나이프로 갔고, rf-v3 노트는 "Step 1 complete"를 남겼다. "1번 끝냈다"를 기억하는 능력 자체는 어느 arm도 문제가 없다 — 계획이 지시문에 고정돼 있어서다.

3. multi의 false_done은 "N번 실패 뒤 단계 완료 선언"이다. frames A t18(12회 뒤) · blind A t29(28회 뒤) · rf-v3 B t2(1회 뒤) · vis-pure B t8(7회 뒤) · tagmem B t18(1회 뒤). 실패가 쌓이면 어느 순간 "됐다"고 하고 다음 단계로 간다. 노트가 "attempt N"을 세는 rf-v3 A만 끝까지 버텼다.

4. 접근 자세는 45°를 넘는 8%에서만 결정적이다 — 정정. 사례 A의 tagmem(47°)을 보고 처음엔 "자세가 메모리보다 크다"고 썼으나, 런 전체 pick 2,892건으로 검증하니 과장이었다.

첫 pick 자세오차n파지
0~10°11731.6%
10~20°7332.9%
20~30°8737.9%
30~45°12332.5%
45~90°263.8%
90~181°80.0%
45°까지 평평하다. 정면(≤20°) 32.1% vs 20~45° 34.8%. 45° 초과는 첫 pick의 8%(34/434)뿐이고 tagmem의 감자가 그 꼬리였다. 정면 보정(→0°)의 기대 이득은 +2~3%p — 8칸 A/B(9.9→7.9%)에서 안 보인 게 당연하다. 옛 nav 유지 결정은 실측으로 뒷받침된다. arm별 첫 pick 자세오차 중앙 20.5~27.5°로 고르고 파지율 28~36%도 잡음 범위 — 자세 운이 특정 arm에 쏠리지 않아 짝비교 타당성은 유지된다. 진짜 바닥은 VLA 파지 자체: 정면에서도 3번 중 1번.

5. 재-pick으로 놓치는 M1은 multi에서도 그대로. frames·rf-v3 A 둘 다 t2에 잡고 t3~t4에 놓쳤다.

11 [multi 3] statues — 메모리 질문에 답하는 편

앞의 multi 두 편은 결국 메모리 질문에 답하지 못했다 — 4136은 자세오차 꼬리 한 건, 3426은 시뮬 결함(blind·rf-v3·vis-pure 셋 다 "robot clipped through the environment"로 abort). 선정 기준을 "1단계를 3 arm 이상이 실제로 든 편"으로 바꾸니 32칸 중 9편이 남고, 그중 train_3667__0 "Pick up all the statues"가 답한다.

armGT1 (거실 조각상)GT2 (침실 조각상)결말턴
framest2 hold=2 → t3 "picked up" → 2단계t4 hold=2 → 재-pick 1 → t6 done✓ 2/27
blindt2 hold=2 → 재-pick 1 → t4 2단계t6 hold=2 → 재-pick 25회(그중 20회 hold=2) → 예산✓ 2/232
rf-v3t2 hold=2 → t3 2단계t4 hold=2 → 재-pick 24회 → t29 done✓ 2/230
vis-puret1 hold=2 → 재-pick 11 → t13 "seen lifted in F1" → 2단계t14 hold=2 → 재-pick 6 → 예산✓ 2/221
tagmemt1 hold=2 → 재-pick 13 → t15 "F1·F2 show lifted" → 2단계t18 hold=2 → 예산✓ 2/220
5 arm 전부 두 조각상을 들었고 사슬 추적(1→2)도 전부 정확하다. 7턴 vs 32턴의 차이는 오직 하나 — 이미 성공한 pick을 다시 하느냐(M1).
blind t13 wrist · hold=2 · "touching but not lifted yet"
조각상이 테이블 위에 놓여 있다. auto-release 뒤 화면이라 이 서술은 맞다. 문제는 t12에 이미 성공했다는 걸 모르는 것.
blind t20 exo‖wrist · hold=2
외부 카메라에도 조각상은 테이블 위. 14턴째 같은 pick을 반복 중.
frames t3 wrist · hold=2 · "successfully picked up" → 2단계
release 직후 순간이라 조각상이 아직 손가락 사이. 이 프레임을 보존한 덕에 빠져나왔다.
tagmem t15 · "F1 and F2 show the statue lifted" → 2단계
현재 화면(조각상은 테이블 위)이 아니라 기억 프레임을 근거로 판단. 기억이 제 역할을 한 순간 — 다만 13회 재-pick 뒤.

12 정정 2 — M1의 정체: "든 채로"가 아니라 "auto-release 뒤에"

find는 auto_release 가족이다(online.py:319 CARRY_FAMILIES = ("restore","routine","resume"), orchestrator 주석 "find는 집은 직후 놓아 버리므로"). pick이 성공하면(5 cm 들어 2회 확인 → hold=2, held_end=uid 기록) 하네스가 물체를 다시 내려놓는다. 그래서 다음 턴 화면에는 물체가 원래 자리에 있다.

앞 절들의 "재-pick으로 놓쳤다"는 틀렸다. 물리적으로 든 채 놓친 것이 아니라 성공 → 자동 release → 화면상 원위치 → 재-pick(대개 실패)이다. wine bottle의 frames가 t6에 "fell onto the floor"라 한 것도 release 후 재-pick이 병을 쳐낸 것.

이 정정은 실험의 의미를 강화한다. 빠진 정보는 지각이 아니라 역사다 — "내 지난 pick이 성공했다"는 현재 씬 어디에도 없다(release로 씬이 복원됐다). 오직 자기 과거 턴에만 있다. 실행 상태 기억의 정의 그 자체이고, M1은 "성공한 pick을 기억 못 해 다시 함"으로 읽어야 한다.

공통 multi 32칸의 M1 절대치

arm성공 뒤 재-pick그 재-pick 실패총 턴재-pick 비중
rollforward-v3811948216.8%
blind39145297.4%
rollforward-vis-pure27164446.1%
frames-uniform1794383.9%
tagmem-r317174933.4%

텍스트 메모리는 여기서 역효과다

rf-v3가 blind의 두 배다. 텍스트 writer가 release 뒤 화면을 보고 "gripper grasping… continuing pick"이라고 적어 틀린 상태를 기억으로 고착시킨다 — 메모리가 없는 것보다 나쁘다. frames·tagmem은 이미지로 "F1에 들린 게 보인다"를 찾아내 빠져나온다(tagmem은 13회 재-pick 뒤에야). tagmem의 재-pick은 17/17 전부 실패 — 재-pick 자체가 적고, 할 때는 이미 자세가 흐트러진 뒤다.

결론: multi에서 사슬 추적(몇 단계까지 했나)은 전 arm이 한다(9편 45런 예외 없음). 메모리가 갈리는 지점은 "지난 pick이 성공했나"이고, auto-release가 씬에서 그 사실을 지운다. frames 7턴 vs blind 32턴이 그 값이다. 이 결론은 1단계 파지 자체가 실패한 편(4136)에는 적용되지 않는다 — M1이 발생할 기회가 없다. "1단계 성공" 칸으로 층화해 M1을 읽어야 한다.