26. 어휘를 늘리자 무너진 것 — 잣대가 틀려서 두 번 오진했고, 고치고 나니 판정선을 넘었습니다

25편 끝에 “어휘를 늘려 본 적 없는 조합을 제대로 재 보겠다”고 적었습니다. 큐브 색을 셋에서 다섯으로, 받침을 둘에서 셋으로 늘리자 옛 어휘에서 96%였던 성적이 24%로 떨어졌습니다. 이 편은 그 24%를 91%까지 끌어올린 일주일의 기록입니다. 중간에 원인을 두 번 잘못 짚었는데, 두 번 다 정책이 아니라 제 잣대가 틀려서였습니다.


어휘를 늘리면 무엇을 재나

지금까지의 어휘는 큐브 세 개(red, green, yellow)와 받침 두 개(blue, purple)였습니다. 조합은 여섯 개이고, 그중 yellow를 purple에 올리는 조합 하나만 학습에서 뺐습니다. 이렇게 학습에서 일부러 빼 둔 조합을 홀드아웃이라고 부릅니다. 22편부터 “정책이 yellow와 purple을 따로 읽어서 합친다”고 말해 왔지만, 그 근거는 홀드아웃 하나였습니다. 조합 하나로는 우연과 구별하기 어렵습니다.

그래서 어휘를 늘렸습니다. 큐브는 red, green, yellow, orange, cyan 다섯 개, 받침은 blue, purple, pink 세 개입니다. 조합은 열다섯 개이고, 그중 세 개를 홀드아웃으로 뺐습니다. yellow→purple, orange→blue, cyan→pink입니다. 세 조합은 색도 받침도 서로 겹치지 않게 골랐습니다.

정책이 받는 입력도 같이 늘었습니다. 22편 이후의 정책은 이미지를 회색으로 지운 채, 지각망이 읽은 큐브·받침 좌표와 지시문, 그리고 에피소드 안의 시간(t/T)을 받습니다. 좌표가 열 개에서 열여섯 개가 됐습니다. 판정선은 미리 정해 두었습니다. 편한 구역에서 학습 조합이 옛 어휘 수준인 90%대이고, 홀드아웃 세 개의 평균이 학습 조합의 70% 이상이면 “조합 일반화가 성립한다”고 보기로 했습니다. 편한 구역은 22편에서 정의한 대로 큐브와 받침이 작업공간 경계에서 3cm 이상 안쪽인 배치입니다. 경계 근처에서는 정책과 상관없이 성적이 절반으로 떨어지기 때문에 따로 봅니다.

첫 판은 배관 사고였습니다

첫 정책 v18은 전체 75시행에서 0이었습니다. 결과라기보다 사고였습니다.

원인은 지각망이었습니다. 수집은 배치 197개에 배치마다 지시문 열두 개씩, 2,364편이었습니다. 여기서 배치는 큐브와 받침을 늘어놓은 장면 하나를 말합니다. 2,364편이라지만 장면으로 세면 197개뿐이었고, 지각망은 이 장면들을 외웠습니다. 학습 손실은 0.0000까지 내려갔는데 처음 보는 장면에서는 대상 좌표를 7cm나 틀렸습니다. 큐브 한 변이 4cm입니다.

옛 어휘에서는 이 함정을 이미 피해 갔었습니다. 지각망만 따로, 배치 1,000개에 한 편씩 찍은 데이터로 배웠습니다. 새 어휘에서 그 단계를 빠뜨린 것입니다. 지각망은 에피소드 수가 아니라 장면 수로 배웁니다. 배치 1,000개짜리를 따로 모아 지각망을 다시 배우자 오차가 0.96cm로 돌아왔고, 그 망으로 좌표를 읽어 다시 배운 정책이 v19입니다.

고르기는 되는데 집기가 무너졌습니다

v19는 편한 구역 학습 조합 120시행에서 29, 24%였습니다. 옛 어휘의 v17은 편한 구역 학습 조합 50시행에서 48, 96%였습니다. 옛 어휘는 학습 조합이 다섯 개라 시행 수가 다릅니다.

그래도 언어는 읽었습니다. 22편에서 만든 입력 교체 시험, 즉 시뮬레이터 없이 지시문만 바꿔 넣고 행동이 얼마나 달라지는지 재는 시험에서 행동 변화가 잡음의 27배였습니다. 지시문을 무시하는 정책은 이 값이 1배 근처입니다.

더 결정적인 시험은 학습 배치 재현이었습니다. 학습 데이터에 있던 장면을 그대로 다시 깔고 굴려 보는 것입니다. v19는 학습 배치 24개에서 24개를 다 해냈고, 지시문을 다른 조합으로 바꿔도 24개 모두 말한 큐브를 말한 받침에 올렸습니다. 기술도 언어도 배웠다는 뜻입니다. 무너지는 곳은 처음 보는 배치뿐이었습니다.

여기서 v18의 교훈이 다시 떠올랐습니다. v17은 배치 799개로 배웠고 v19는 197개로 배웠습니다. 좌표가 열여섯 개인 배치 공간은 열 개일 때보다 훨씬 넓은데, 배치 수는 오히려 적었습니다. 지각망이 장면 수로 배운다면 정책도 그렇지 않을까요.

배치를 세 배로

v20은 편 수를 v19와 같게 두고 배치만 세 배로 늘렸습니다. 배치 600개에 지시문을 네 개씩 무작위로 붙여 2,400편입니다. 결과는 편한 구역 학습 조합 56/120, 47%였습니다. 24%에서 두 배가 됐으니 방향은 맞았습니다. 하지만 판정선 90%까지는 멀었습니다.

다음 수는 두 가지였습니다. 같은 데이터로 더 오래 배우거나(학습량), 배치를 더 늘리거나(배치 수)입니다. GPU 한 장으로 둘 다 돌리려고, 하나가 학습하는 동안 다른 하나의 데이터를 CPU로 변환하도록 순서를 짜서 하룻밤에 넣었습니다.

  • v20을 2만 스텝(20k)에서 4만 스텝(40k)까지 이어 배웠습니다. 편한 구역 56에서 63이 됐습니다.
  • v21은 배치를 1,200개로 두 배 늘리고 지시문을 배치당 두 개씩 붙였습니다. 57/120이었습니다.

둘 다 50% 안팎에서 멈췄습니다. 실패의 90%는 “큐브를 들어 올리지 못함”으로 분류됐습니다. 저는 이렇게 결론을 적었습니다. 배치 수는 600을 넘으면 더는 병목이 아니다. 고르기와 언어는 되고, 새 배치에서 집는 정밀도가 모자라다.

원인을 제대로 짚었나

결론을 적고 나서 한 번 더 물었습니다. 원인을 제대로 짚은 건가? 다시 보니 세 군데가 약했습니다.

첫째, 잡음. 편한 구역 시험은 학습 조합 120회입니다. 56과 63의 차이는 이 횟수에서 우연으로도 충분히 납니다. 나중에 같은 평가를 그대로 다시 돌려 보니 63이었던 v20 40k가 68이 나왔습니다. 같은 평가도 120회 중 ±5회는 흔들립니다. “학습량으로 +6%p”는 “뚜렷한 차이 없음”이 맞았습니다.

둘째, 섞인 변수. v21은 배치를 두 배로 늘리면서 배치당 지시문을 네 개에서 두 개로 줄였습니다. 바뀐 것이 두 개라 “배치 수가 병목이 아니다”라고 말할 수 없습니다.

셋째, 잣대. “집는 정밀도가 모자라다”의 근거는 손이 가장 낮게 내려갔을 때 큐브와의 거리였습니다. 그런데 이 거리는 성공한 시행에서도 중앙값이 4.2cm였고, 20%는 6cm가 넘었습니다. 6cm 떨어져서 4cm짜리 큐브를 집을 수는 없습니다. 이 잣대는 성공과 실패를 가르지 못하고 있었습니다.

여기서 한 번 더 넘어졌습니다. 같은 잣대로 “손이 어느 큐브로 갔나”를 보니 파지 실패 64건 중 17건이 엉뚱한 큐브였습니다. 그래서 “새 배치에서는 고르기도 4분의 1쯤 무너진다”고 고쳐 적었습니다. 이것도 틀린 결론이었다는 것은 다음 절에서 드러납니다.

잣대를 새로 만들었습니다

그래서 평가기에 궤적 기록을 넣었습니다. 제어 스텝마다 손, 두 손가락의 중심, 그리퍼가 벌어진 폭, 그리퍼 명령, 대상 큐브의 위치를 남깁니다. 같은 기록을 스크립트 전문가에게서도 40편 받았습니다. 스크립트 전문가는 19편부터 학습 데이터를 만들어 온, 정답 좌표를 아는 코드입니다. 그리고 판단 기준을 “그리퍼 명령이 처음 닫히는 순간”으로 바꿨습니다. 그 순간 손가락이 어디 있었는지가 집느냐 못 집느냐를 정할 것이기 때문입니다.

같은 150시행을 두 잣대로 잰 것. 왼쪽 옛 잣대는 성공과 실패가 겹치고, 오른쪽 새 잣대는 2cm를 사이에 두고 갈립니다

그리퍼를 닫는 순간 스크립트 전문가 성공 못 집음
손가락 중심과 큐브의 거리 0.5cm 1.5cm 4.0cm
손가락 높이 0.070m 0.071m 0.071m
닫는 시점(제어 스텝) 91 90 90
닫은 뒤 그리퍼 폭 0.039m 0.039m 0.002m

높이와 시점은 전문가와 똑같습니다. 다른 것은 옆으로 어긋난 거리 하나입니다. 못 집은 시행은 전부 2cm 넘게 어긋났고, 그리퍼는 큐브를 물지 못해 거의 끝까지 닫혔습니다. 큐브를 물면 폭이 0.039m에서 멈춥니다. 원인은 “정밀도” 같은 뭉뚱그린 말이 아니라 닫는 순간의 xy 어긋남이었습니다.

옛 잣대가 틀린 이유도 궤적에서 보였습니다. 옛 잣대는 에피소드 앞쪽 45% 동안 손 링크가 가장 낮았던 순간을 잡습니다. 그 순간은 정책이든 전문가든 제어 스텝 21 근처였습니다. 팔이 출발 자세에서 큐브 쪽으로 크게 휘두르며 지나가는 도중입니다. 파지는 스텝 90에 일어납니다. 옛 잣대는 파지보다 한참 전, 팔이 지나가던 자리를 재고 있었던 것입니다.

“엉뚱한 큐브”도 새 잣대로 다시 봤습니다. 궤적을 기록한 재평가에서도 옛 잣대는 17건을 엉뚱한 큐브로 분류했습니다. 그런데 닫는 순간 손가락이 실제로 다른 큐브에 더 가까웠던 것은 17건 중 2건뿐이었습니다. 나머지 15건은 맞는 큐브 옆 3~5cm에서 헛잡은 것이었습니다. 이웃 큐브는 보통 10cm 넘게 떨어져 있습니다. 새 배치에서도 고르기는 대체로 됩니다. 두 번째 오진도 잣대 탓이었습니다.

이미 배제해 둔 원인도 다시 적어 둡니다. 지각망의 좌표 오차는 성공과 실패 모두 0.8cm 안팎이라 원인이 아닙니다. 이웃 큐브 간격도 성공과 실패가 모두 10.7cm 안팎으로 같습니다.

원인이 xy라면 25편의 처방이 맞습니다

25편에서 만든 손목 보정은 정확히 이 문제를 위한 것입니다. 손목 카메라 영상에서 손과 큐브의 xy 어긋남을 읽고, 그만큼 대상 큐브의 좌표 입력을 반대로 밀어 줍니다. 정책의 가중치는 건드리지 않습니다. 밀어 주는 양은 읽은 어긋남에 이득이라는 배수를 곱하고, 한 번에 밀 수 있는 상한을 둡니다. 25편은 이득 0.5~1.0, 상한 3cm였습니다.

다만 25편의 손목 망은 옛 색 세 개로 배운 것이라, orange와 cyan은 처음 봅니다. 25편과 같은 방법으로 새 어휘에서 손목 영상을 다시 모아 배웠습니다. 수집과 학습을 합쳐 10분이었습니다.

v20 40k, 편한 구역 학습 조합 홀드아웃
보정 없음 68/120 (57%) 14/30
손목 보정 95/120 (79%) 23/30
오라클 보정(시뮬레이터의 실제 위치로) 94/120 (78%) 24/30

손목 보정이 실제 위치를 쓰는 오라클 보정과 같은 성적입니다. 손목 망이 병목이 아니라는 뜻입니다. 홀드아웃은 학습 조합의 97%라 판정선의 두 번째 조건(70%)은 이미 넘었습니다.

배치 수를 제대로 다시 쟀습니다

v21에서 섞였던 변수를 떼어 냈습니다. v22는 배치 1,200개에 배치당 지시문 네 개로, v20과 배치당 지시문 수가 같고 배치 수만 두 배입니다. 편 수도 4,768편으로 두 배가 된 점은 감안해야 합니다.

v22 20k는 보정 없이 74/120(62%)이었습니다. v20 20k의 56에서 18이 올랐고, 이 폭은 반복 잡음 ±5를 넘습니다. 배치 수 효과는 600에서 멈추지 않았습니다. 첫 결론의 앞 절반도 틀렸던 것입니다. 손목 보정을 얹으면 97/120(81%)이었습니다.

천장은 보정이 아니라 학습량이 움직였습니다

보정을 얹으면 v20 40k도 v22 20k도 80% 언저리에서 멈췄습니다. 남은 실패는 여전히 2cm 넘게 어긋난 경우라, 보정을 더 세게 걸면 될 것 같았습니다. 이득과 상한을 바꿔 가며 v22 20k에서 네 가지를 돌렸습니다.

보정 설정을 바꾼 네 판은 모두 반복 잡음 폭 안에 들어갑니다. 천장을 넘은 건 학습을 두 배로 한 v22 40k뿐입니다

  • 이득과 상한을 올려도 기준 97이 98~101에 그쳤습니다. 셋 다 반복 잡음 안입니다.
  • 받침에 내려놓을 때도 같은 보정을 걸어 봤습니다. 손에 든 큐브와 실제 받침의 어긋남으로 받침 좌표 입력을 미는 방식입니다. 효과를 확인하려고 실제 위치를 쓰는 오라클 판으로 돌렸는데도 98이었습니다. 이유는 입력 교체 시험에 있었습니다. v22 20k는 대상 큐브 좌표를 바꾸면 행동이 잡음의 42배 달라지는데, 받침 좌표를 바꾸면 3.4배밖에 안 달라집니다. 듣지 않는 입력을 밀어 봐야 소용이 없습니다. 첫 판은 큐브가 받침에 닿는 순간 기울며 튄 값을 쫓아가 오히려 큐브를 밀어냈고, 닿기 전까지만 보정하도록 고친 뒤에도 효과는 없었습니다.

천장을 움직인 것은 학습량이었습니다. v22는 편 수가 v20의 두 배라, 같은 20k 스텝이면 한 편을 보는 횟수가 절반입니다. 40k까지 이어 배우자 보정 없이 86/120(72%)이 됐습니다. 74에서 12가 올랐고, 이것은 잡음 밖입니다. v20은 같은 이어 학습에서 잡음 안이었습니다. 데이터가 넓을수록 더 배울 거리가 남아 있었던 것으로 보입니다.

어휘를 늘린 뒤 정책별 편한 구역 성공률(평가 배치를 뽑는 난수 씨앗 100). 파랑은 보정 없음, 주황은 손목 보정입니다

v22 40k, 편한 구역 학습 조합 홀드아웃 못 집음
보정 없음 86/120 (72%) 18/30 39
손목 보정(이득 1.5·상한 3cm) 106/120 (88%) 28/30 (93%) 12

판정선 90%는 108/120부터라 두 번이 모자랍니다. 반복 잡음 안의 차이라, 뒤에서 평가 배치를 바꿔 한 번 더 잽니다. 홀드아웃은 오히려 학습 조합보다 높습니다. 입력 교체 시험에서 지시문을 바꿨을 때 행동 변화는 잡음의 49.6배로, 어휘를 늘린 뒤로는 가장 컸습니다.

아래 영상은 학습 때 한 번도 보지 못한 조합, yellow를 purple에 올리는 장면입니다. 위와 아래는 같은 배치, 같은 정책 v22 40k입니다. 오른쪽은 대상 큐브를 가까이 찍은 화면입니다. 위는 보정 없이 굴렸고, 그리퍼를 닫는 순간 손가락이 큐브에서 5.5cm 옆에 있어 헛잡습니다. 아래는 손목 보정을 켰고, 어긋남이 1.4cm로 줄어 큐브를 받침에 올립니다. 정책이 받는 이미지는 둘 다 회색입니다.

그리퍼를 닫고 0.5초쯤 지난 순간을 멈춰 보면 차이가 분명합니다. 위는 노란 큐브가 손가락 바깥에 있고, 아래는 손가락 사이에 들어가 있습니다.

그리퍼를 닫은 직후. 위는 손가락이 노란 큐브 옆에서 닫혔고, 아래는 큐브를 물었습니다

같은 배치, 같은 정책 v22 40k. 위는 보정 없음, 아래는 손목 보정입니다. 오른쪽은 대상 큐브 근접 화면입니다

전체 영상:

한 번 더 쟀습니다

88%는 평가 씨앗 하나에서 나온 숫자입니다. 평가 씨앗은 평가에 쓸 배치 150개를 뽑는 난수의 시작값이라, 씨앗이 다르면 배치가 전부 달라집니다. 같은 정책과 같은 보정으로 씨앗만 200으로 바꿔 한 번 더 돌렸습니다.

v22 40k + 손목 보정, 편한 구역 학습 조합 홀드아웃 보정 없이 학습 조합
씨앗 100 106/120 (88%) 28/30 86/120
씨앗 200 112/120 (93%) 26/30 102/120
합계 218/240 (91%) 54/60 (90%) 188/240 (78%)

씨앗 200에서는 93%로 판정선을 넘었습니다. 두 씨앗을 합치면 학습 조합 91%, 홀드아웃 90%입니다. 판정선의 두 조건, 학습 조합 90%대와 홀드아웃이 학습 조합의 70% 이상을 모두 넘습니다.

눈여겨볼 것은 보정 없는 성적입니다. 같은 정책이 씨앗 100에서 86, 씨앗 200에서 102였습니다. 같은 씨앗을 다시 돌릴 때의 흔들림은 ±5였는데, 씨앗 사이의 차이는 16입니다. 씨앗이 바뀌면 150개 배치가 전부 바뀌고, 쉬운 배치가 많이 뽑힌 판과 어려운 배치가 많이 뽑힌 판이 생깁니다. 그러니 씨앗 하나의 88%도, 씨앗 하나의 93%도 그대로 믿으면 안 됩니다. 이 편의 결론은 두 씨앗을 합친 91%로 적습니다. 보정의 효과는 두 씨앗 모두에서 뚜렷합니다. 86이 106이 되고, 102가 112가 됩니다.

아직 남은 과제

  • 판정선은 넘었지만 겨우 넘었습니다. 씨앗 100의 남은 파지 실패 12건 중 8건은 여전히 큐브 옆 3cm 근처에서 헛잡습니다. 보정이 이만큼을 다 못 미는 이유는 아직 모릅니다.
  • 이 편의 앞쪽 비교들은 대부분 씨앗 하나로 쟀습니다. 씨앗 사이 차이가 16이나 되니, 차이가 작았던 비교는 씨앗을 바꿔 다시 재면 순서가 바뀔 수도 있습니다.
  • 받침에 놓는 쪽은 정책이 받침 좌표를 거의 듣지 않아 보정으로 고칠 수 없었습니다. 받침 옆에 놓는 실패가 몇 건 남아 있습니다.
  • 배치 수와 학습량은 둘 다 효과가 있었지만 편 수와 얽혀 있습니다. 배치 수만 바꾼 비교는 아직 하지 않았습니다.

이번 편에서 남은 것

  • 지각망도 정책도 에피소드 수가 아니라 장면 수로 배웁니다. 배치 197개는 좌표 열여섯 개짜리 공간에 턱없이 모자랐습니다.
  • 두 번의 오진은 둘 다 잣대 탓이었습니다. 성공한 시행에서도 6cm가 나오는 잣대라면, 잣대부터 의심해야 합니다. 17편에서 계단을 오진하고 “측정 도구도 검증 대상”이라고 적어 두고도 또 넘어졌습니다.
  • 새 잣대는 결정적인 순간을 기준으로 삼고 전문가와 나란히 놓았습니다. 그러자 높이도 시점도 아니고 xy 어긋남 하나라는 것이 바로 보였습니다.
  • 같은 평가를 다시 돌리면 120회 중 ±5회, 씨앗을 바꾸면 그보다 훨씬 크게 흔들립니다. 마지막 판정은 씨앗 두 개를 합쳐서 내렸습니다.
  • 한 번에 두 가지를 바꾸면 무엇이 효과를 냈는지 모릅니다. v21이 그랬습니다.
  • 정책이 듣지 않는 입력은 밀어도 소용이 없습니다. 보정은 정책이 잘 듣는 입력에 걸어야 합니다.

어휘를 늘린 첫날 24%를 봤을 때는 한 단계 물러서서 어휘를 줄일 생각도 했습니다. 결국 정책은 문제가 없었고, 모자란 것은 장면 수와 학습량, 그리고 제 잣대였습니다. 다음 편은 시즌 1~2에서 걷게 만든 G1에게 말로 길을 시켜 봅니다.


이 시리즈의 전체 글 목록 → 시리즈 목차