24편에서 시즌 3를 닫으며 “눈”을 못 푼 것 1순위로 적었습니다. 정책 안에 눈을 넣으면 지름길이 이기고, 나중에 붙이면 무익했습니다. 이 편은 방향을 바꿉니다. 정책은 그대로 눈을 감겨 두고, 정책 밖에서 손목 카메라를 읽는 작은 망이 내려가는 도중에 좌표 입력을 밀어 줍니다. 재학습 없이 하루 만에, 전체 작업공간 30시행에서 24가 28이 됩니다.
정책을 고치지 않고 정책을 움직이는 법
시즌 3의 마지막 정책 v17은 좌표 열 개와 지시문, 시간을 받아 큐브를 집습니다. 22편의 입력 교체 시험에서 이 정책은 대상 큐브의 좌표를 바꾸면 행동이 60배 넘게 달라졌습니다. 좌표를 아주 잘 듣는다는 뜻입니다. 그렇다면 좌표를 조금 속이면 정책을 조금 움직일 수 있습니다.
남은 실패는 거의 전부 “못 집음”이었고, 내려가는 손이 큐브에서 2~5cm 빗나가는 것이었습니다. 빗나간 만큼 좌표를 반대로 밀어 주면 어떨까요. 손이 큐브보다 3cm 왼쪽에 있으면, 대상 큐브의 좌표를 3cm 오른쪽으로 적어 넣는 겁니다. 정책은 새 좌표를 향해 가고, 손은 큐브 위로 옵니다. 정책의 가중치는 하나도 건드리지 않습니다. 이미지도 정책에는 여전히 회색입니다.
빗나간 정도를 재려면 무언가가 봐야 합니다. 두 단계로 갔습니다. 먼저 시뮬레이터가 아는 실제 위치로 재서 이 방법의 상한선을 확인하고, 되면 손목 카메라 영상에서 그 값을 읽는 망을 만듭니다.
첫날, 상한선
정책은 1초에 한 번 행동을 내놓는데, 보정이 먹으려면 더 자주 되물어야 합니다. 23편에서 만든 되묻기 주기 10스텝을 씁니다. 손이 접근 높이 아래로 내려온 뒤 파지까지의 구간에서, 매 제어 스텝마다 손과 큐브의 xy 차이를 재서 그 절반(이득 0.5) 또는 그대로(이득 1.0)를 대상 큐브 좌표에서 뺍니다. 한 번에 3cm까지만 밉니다.
첫 판은 망했습니다. 어긋남을 스텝마다 누적해서 더하도록 짜는 바람에 50스텝 만에 한계치까지 밀려 버렸습니다. 편한 구역 60장면에서 보정 없이 55였던 것이 38이 됐습니다. 현재 어긋남에 비례해서 미는 방식으로 고쳤습니다. 보정기 하나 짜는 데도 한 번은 넘어집니다.
| 보정 없음 | 오라클 보정 | |
|---|---|---|
| 전체 작업공간 30시행 (이득 1.0) | 24 | 27 |
| 몸통 앞 구역 60장면 (이득 0.5) | 49 | 53 |
| 먼 쪽 구역 60장면 (이득 0.5) | 54 | 55 |
| 경계 3cm 안쪽 60장면 (이득 0.5) | 55 | 57 |
같은 장면끼리 짝지어 보면, 보정으로 새로 성공한 장면이 전체에서 3, 몸통 앞에서 4이고 그 두 시험에서 보정 때문에 실패한 장면은 없습니다. 먼 쪽만 3 대 2로 비겼습니다. 내려가는 동안의 어긋남은 어디서나 1.4~1.8cm에서 0.7~1.1cm로 줄었습니다. 크지 않지만 어디서나, 해 없이 오릅니다. 상한선은 확인됐습니다.
둘째 날, 손목 카메라
이제 실제 위치 대신 손목 카메라로 어긋남을 읽어야 합니다. 손목 카메라에는 손가락 두 개와 그 사이의 큐브가 보입니다. 손이 큐브 바로 위에 있으면 큐브가 화면 가운데에 있고, 왼쪽으로 빗나갔으면 큐브가 오른쪽에 보입니다. 손의 방향은 늘 같으니(19편의 스크립트 전문가가 그렇게 잡습니다) 화면 속 큐브 위치가 곧 어긋남입니다.
학습 데이터는 전문가에게 일부러 틀린 목표를 줘서 만들었습니다. 큐브 위치에 4cm 안쪽의 무작위 오프셋을 더한 곳으로 내려가게 하고, 내려가는 동안 손목 프레임과 그 순간의 실제 어긋남을 기록합니다. 정확히 맞춰 내려가는 전문가만 찍으면 라벨이 전부 0이라 아무것도 배울 수 없습니다. 200장면에 오프셋 3개씩, 프레임 12,000장을 모으는 데 1분 반 걸렸습니다.

망은 21편의 지각망과 같은 방식입니다. 작은 CNN 뒤에 공간 소프트맥스를 두어 위치를 평균으로 뭉개지 않게 했습니다. 학습에 3분, 학습에 쓰지 않은 장면에서 오차 0.25cm입니다. 평균만 찍는 기준선이 2.06cm이니 여덟 배 정확합니다.

오라클을 따라잡았습니다
오라클 자리에 손목 망을 끼우고 같은 배터리를 다시 돌렸습니다.

| 보정 없음 | 오라클 보정 | 손목 망 보정 | |
|---|---|---|---|
| 전체 작업공간 30시행 (이득 1.0) | 24 | 27 | 28 |
| 몸통 앞 구역 60장면 (이득 0.5) | 49 | 53 | 52 |
| 먼 쪽 구역 60장면 (이득 0.5) | 54 | 55 | 54 |
| 경계 3cm 안쪽 60장면 (이득 0.5) | 55 | 57 | 56 |
전체 작업공간 28은 20편에서 좌표를 공짜로 줬던 오라클 정책의 28과 같은 성적입니다. 학습 조합은 25시행 중 25로, 시즌 3에서 처음 나온 만점입니다. 같은 장면끼리 짝지으면 전체에서 손목 망으로 새로 성공한 장면이 4, 잃은 장면은 0입니다. 내려가는 동안의 어긋남은 1.6cm에서 0.6cm로 줄었습니다.
정책은 여전히 이미지를 보지 않습니다. 언어를 읽는 방식도 그대로입니다. 보정기는 정책이 받는 좌표를 매 스텝 조금씩 고쳐 줄 뿐이고, 지름길이 생길 자리가 없습니다. 22편에서 정책 안에 눈을 넣으려다 세 번 지고 23편에서 나중에 붙여도 무익했던 그 눈이, 밖에 달자 파지를 구했습니다.
남은 것
- 먼 쪽 구역은 보정으로 오르지 않았습니다(54 그대로). 그 구역의 실패는 집은 뒤에 떨어뜨리거나 받침 가장자리에 놓는 것이 섞여 있는데, 이 보정은 집는 순간만 다듬습니다. 놓는 순간에도 같은 보정을 걸면(받침 위로 내려갈 때 받침과의 어긋남) 더 오를 여지가 있습니다.
- 보정은 큐브가 손가락 사이에 보일 때만 작동합니다. 손이 큐브에서 8cm 넘게 빗나가 큐브가 화면 밖이면 읽을 것이 없습니다. 다행히 v17의 어긋남은 대부분 2cm 안쪽입니다.
- 이 방식은 정책과 보정기가 따로 있는 두 조각짜리 시스템입니다. VLA 하나가 눈과 언어를 다 쓰는 그림은 아닙니다. 다만 이 시리즈에서는 “한 모델”보다 “왜 되는지 아는 두 조각”이 낫다고 봅니다.
이번 편에서 남은 것
- 정책이 좌표를 잘 들으면, 좌표를 조금 속여서 정책을 움직일 수 있습니다. 가중치를 건드리지 않는 닫힌 고리입니다.
- 상한선부터 잽니다. 실제 위치로 보정해 전체 24에서 27이 되는 것을 본 뒤에 카메라로 갔습니다. 안 됐으면 하루 만에 접었을 겁니다.
- 손목 영상 한 장에서 손과 큐브의 어긋남을 0.25cm로 읽는 망은 1분 반의 데이터와 3분의 학습으로 됐습니다. 정확히 맞춘 시연만 찍으면 안 되고, 일부러 틀린 시연을 찍어야 배웁니다.
- 손목 망 보정은 오라클 보정과 같은 성적입니다. 전체 28/30, 학습 조합 25/25.
- 보정기 하나에도 누적과 비례를 헷갈리는 함정이 있었습니다. 첫 판 38/60은 설계 오류였습니다.
로봇은 여전히 눈을 감고 있습니다. 대신 손목에 눈을 하나 달아 주었고, 그 눈은 정책에게 말을 걸지 않고 좌표만 살짝 고쳐 줍니다. 다음 편은 어휘를 늘려 “본 적 없는 조합”을 제대로 재 봅니다.
이 시리즈의 전체 글 목록 → 시리즈 목차