⚠제목을 고쳤다(2026-07-29 00시). 원래 제목은 “자가 설 자리가 없다는 것을 재는 데 성공했다”였는데, 이 페이지 자신이 그 결론을 두 번 뒤집는다 — 아래 “★뒤집혔다” 절에서 한 번, 그리고 밤의 복사 억제 실험에서 또 한 번(자의 장치가 복사율을 세 시드 모두 −11.6%p 낮췄다). 철회된 결론이 제목에 남아 있는 것은 이 프로젝트가 가장 경계하는 일이라 고친다.
2026-07-27~28 · ARC-AGI-1 · 사전등록 측정 141건 · 예측 46승 37패 · 정정 64건 · 학습 2팔×3시드 + 3팔×3시드 · 판정 4건 완료
ARC는 몇 개의 예시(시연쌍)를 보고 규칙을 알아내 새 입력에 적용하는 과제다. 우리 접근의 중심에는 “자(ruler)”라는 장치가 있다. 자는 정답을 모른 채 시연쌍만 보고 “이 칸은 아마 이 색일 것”이라고 말해 주는 물건이고, 그 말을 학습 신호로 써서 생성기를 가르치는 것이 계획이었다. 정답 없이 만들어지므로 시험 문제를 미리 보는 반칙이 아니다.
오늘 한 일은 자를 만든 것이 아니라, 자가 실제로 무엇을 알고 있는지를 잰 것이다. 모든 측정은 수치를 보기 전에 합격선을 문서에 못 박고 진행했다. 그래야 결과를 보고 기준을 바꾸는 일이 원천적으로 불가능해진다.
하루 종일 “자의 정확도 94%”, “생성기 정확도 73%” 같은 숫자를 보고했다. 그런데 가장 값싼 비교 대상을 빼먹고 있었다 — 입력을 그대로 베끼기다.
| 구간 | 입력 복사 | 생성기 | 자 |
|---|---|---|---|
| 전체 칸 | 0.8427 | 0.7343 | 0.8541 |
| 바뀌는 칸 | 0.0000 | 0.0539 | 0.1195 |
ARC 문제에서 0.8427, 즉 84%의 칸은 입력과 출력이 같다. 배경이 넓기 때문이다. 그래서 아무것도 안 하고 베끼기만 해도 84%를 맞힌다. 우리 생성기는 그보다 10.8%p 나쁘다. 그리고 문제의 실체인 “바뀌는 칸”에서 생성기는 5.4%, 자는 12.0%만 맞힌다.
이건 우리 헌법이 금지한 “고전 통제군 없는 양성 보고”에 우리가 걸린 사례다. 격자 전체 단위로는 고전 기준선(0.0125)을 꼬박꼬박 대조하면서, 칸 단위로는 하루 종일 빠뜨렸다. 외부 검토자가 지적해서 잡았고, 그날의 서술 네 건을 정정했다.
정답 칸을 일부 보여주면 나머지 칸의 정답을 얼마나 더 잘 맞히는지를 비트 단위로 쟀다. 비트는 “불확실성이 얼마나 줄었나”의 단위다.
색이 10가지이므로 아무것도 모를 때 3.32 비트 자만 봤을 때 2.90 비트 (자가 0.42 비트 제거) 자 + 주변 칸 문맥까지 2.3982 비트 (문맥이 0.50 비트 더 제거) -------------------------------------------------------- 둘을 합쳐도 전체 불확실성의 27.8% 만 제거한다
처음에 나는 이 값을 두고 “정보가 진하다”고 썼다. 정규화해 보니 남은 불확실성의 0.1734, 즉 17.3%만 제거한다. “진하다”는 철회하고 “실재하되 부분적”으로 고쳤다.
어떤 영리한 조합 규칙을 쓰든, “원소 중 하나라도 맞히는 칸의 비율”을 넘을 수 없다. 이것이 구조적 천장이다. 정답을 보고 고르는 반칙을 허용한 상한이므로 실제 성능이 아니라 “가능한 최대”다.
| 양 | 값 | 의미 |
|---|---|---|
| 필요한 정확도(손익분기) | 0.56 | 이보다 낮으면 예측하느니 침묵하는 편이 낫다 |
| 천장(원소 12종 중 하나라도) | 0.3617 | 완벽한 선택자를 공짜로 줘도 여기까지 |
| 실제 배치 가능한 조합 | 0.1224 | 정답 없이 고르면 이만큼 |
완벽한 선택자를 공짜로 줘도 36.2%이고, 필요한 것은 56%다. 19.8%p 부족하다. 즉 문제는 “어떻게 고르나”가 아니라 “원소가 부족하다”이다.
원소들이 쓸모없는 것은 아니다. 천장 0.3617는 단일 최고(0.1821)의 1.99배이고 색 규칙 자(0.1195)의 3.03배다. 서로 다른 칸을 맞히고 있다는 뜻이다. 다만 정답 없이 그 상보성을 뽑아낼 수 없고, 뽑아내도 문턱에 못 미친다.
측정 위생 하나 더: 동결 체크포인트의 순전파가 실행마다 완전히 같지는 않아 칸 단위 지표가 ±0.002 정도 흔들린다. 이 페이지의 수치는 최종 실행의 파일 값이며, 소수 넷째 자리는 그만큼의 불확실성을 갖는다.
남은 길은 원소를 크게 늘리는 것 하나인데, 그것은 사실상 ARC 전용 규칙 언어를 새로 만드는 일이라 프로젝트의 성격이 바뀐다. 그리고 선행 측정에서 연산 23종·깊이 3~4의 훨씬 큰 규칙 언어로도 400문제 중 5문제만 풀렸다. 그래서 이 갈래는 승인 사항으로 올려 둔 상태다.
모든 수치는 autoresearch/order_mdl-260711/intent_*.json에서 직접 추출했다.
사전등록 문서는 같은 디렉터리의 PREREG_*.md 20종. 크기 보존 문제로 한정되며
이는 ARC의 약 66%다.
이 페이지의 앞부분은 “자가 설 자리가 없다”로 끝났다. 그 뒤 네 번을 더 재고 그 결론을 취소한다. 원인은 하나다 — 나는 칸 전체를 한 덩어리로 놓고 쟀다.
외부 검토자가 낮에 이렇게 지적했다: “고치는 행동을 어디를 건드릴까(gate)와 무엇으로 바꿀까(value)로 나누어 재라.” 나는 그 지적을 마지막 네 측정에서야 따랐다.
| 축 | 우리 장치 | 성능 | 고전 기준선 | 배율 |
|---|---|---|---|---|
| value 무엇으로 | 바뀌어 간 색 + 문맥 조건 | 0.4148 | 팔레트 0.1867 | 2.22배 |
| gate 어디를 | 입력색 + 덩어리 크기 순위 | F1 0.5412 | 전부 바뀜 0.2719 | 1.99배 |
시연 출력에 나온 색 전부 0.1867 (후보 5.45개) 그중 **바뀐 칸에 나온 색만** 0.3539 (후보 3.96개) <- 1.90배 + 입력색·이웃 조건 0.4148 (후보 3.31개) <- 2.22배 (참고) 우리가 만든 규칙 12종 0.1323
ARC 문제의 0.8427가 안 바뀌는 칸이라, 후보 목록에 배경색을 넣어 두면 후보만 넓어지고 정보는 안 는다. 그걸 빼는 한 줄이 하루치 작업보다 컸다.
“이 칸이 바뀐다”고 말하면 0.7677 맞는다. 아무 칸이나 찍으면 0.1573이니 정밀도가 4.9배다. 다만 재현율이 0.4179이라 바뀌는 칸의 58%를 놓친다 — 조심스럽게 말하고, 말할 때는 맞다.
“후보 밖으로 나가지 마라”는 항을 재보니 위반율 0.8286로 높았다. 그러나 그중 0.7330는 생성기가 그냥 입력을 베낀 것이고, 후보 목록은 “바뀌어 간 색”이라 베낀 색은 정의상 절대 후보에 없다. 즉 위반의 88.5%는 “여기서 베끼지 마라”이고, 그건 value가 아니라 gate 신호다.
두 항을 그냥 같이 쓰면 같은 신호를 두 번 세게 된다. 그리고 후보 목록이 정답을 빼먹는 비율이 0.1672 — 여섯 번에 한 번은 정답에서 밀어낸다.
바뀌는 칸에서 입력 복사는 0%, 생성기는 0.0539, 색 규칙 자는 0.1195다. 생성기는 손을 거의 안 댄다. 반면 가르칠 타깃은 0.4148까지 올라왔다.
가장 그럴듯한 해석: 생성기의 병목은 “무엇으로 바꿀까”가 아니라 “여기를 바꿔야 한다”를 모르는 것이다. 다만 이건 아직 가설이고, “바꿀 색을 몰라서 안전하게 베낀다”는 반대 설명과 아직 구별하지 못했다. 그 구별이 다음 측정이다.
앞 절의 “닫혔다”는 나누지 않은 틀에서만 성립했다. 앞 절을 고치지 않고 남겨 둔 이유는, 그것이 실제로 내가 통과한 경로이기 때문이다. 오늘 예측은 19승 10패였고, 정정은 일곱 건이다.
모든 수치는 autoresearch/order_mdl-260711/intent_z0*.json에서 프로그램으로
추출했다. 크기 보존 문제 한정(ARC의 약 66%).
바로 위 절에서 “어디를 건드릴지 맞히는 규칙이 76.8% 정확하다”고 썼다. 취소한다. 외부 검토자가 1순위 위험으로 지목한 것이 사실이었다 — 나는 모든 칸을 문제 구분 없이 한 통에 넣고 셌다.
gate 정확도 한 통 집계 0.5412 -> **문제별 중앙값 0.1584** (29%)
**하위 25% 문제는 0.0000**
value 품질 한 통 집계 0.4148 -> 문제별 중앙값 0.4004 (97%) <- 이쪽은 무사
문제 넷 중 하나에서 gate 규칙은 아무것도 못 맞힌다. 한 통 집계값은 격자가 큰 소수 문제가 면적만큼 끌어올린 것이었다. 오늘 이미 “확신이 높을수록 더 틀린다”는 관측이 똑같은 기제로 무너졌는데, 같은 함정을 두 번째로 밟았다.
다른 벤치마크(ARC-2)에서 gate가 무너진 것(0.2893)과도 앞뒤가 맞는다 — 큰 문제가 적은 분포로 가면 무너진다는 설명 하나가 두 관측을 동시에 설명한다.
검토자가 제안한 방식으로 갈라 보니 — 생성기가 어디가 바뀔지 아는 정도는 0.5521 (찍는 것이 0.5), 입력을 못 베끼게 했을 때 맞히는 비율은 0.2322였다. 어디인지도 모르고 무엇인지도 모른다.
“안 바뀌는 색을 후보에서 뺀다”는 것 하나가 살아남았다. 세 개 분할에서 재현됐고(2.22 / 2.23 / 2.32배), 문제별 중앙값도 한 통 집계와 같다(0.97배). 오늘 스물다섯 번을 재서 남은 견고한 양성은 이것뿐이다.
검토자가 짚은 것 하나 더 — 시연 문제에는 정답이 있으므로 정답 자체가 완벽한 타깃이다. 이 후보 목록이 정답 학습을 이길 수 있는 길은 정보가 아니라 매끄럽게 만드는 효과뿐이고, 그건 순전히 해봐야 아는 문제다. 오늘 하루의 “타깃 품질 경쟁”은 이 점을 한 번도 말하지 않았다.
오늘 측정 25건 · 예측 21승 11패 · 정정 10건 · 학습 0건. 문제 236/400(59%)에 한정된 결과다.
앞 절에서 “안 바뀌는 색을 후보에서 빼는 것” 하나만 살아남았다. 그렇다면 그 후보 목록을 더 좁게, 더 똑똑하게 만들면 되지 않을까. 이 계획의 원래 야심은 후보 목록을 여러 개 만들어 두고 “설명이 가장 짧은 것”을 고르는 것이었다. 짧은 설명이 좋은 설명이라는 오래된 원리(최소 기술 길이)를 자에 심겠다는 뜻이다.
일곱 번 시도했다. 후보를 고르는 잣대를 세 가지 방식으로 바꿔 보고, 평활 계수를 훑고, 문제를 난이도별로 갈라 보고, 확신도로 걸러 보고, 두 갈래로 나눠 서로 얼마나 동의하는지도 봤다. 어느 것도 합격선을 넘지 못했다. 가장 좋았던 것이 오라클(정답을 알고 최선을 고른 경우)이 잡을 수 있는 여지의 36.6%였고, 합격선은 50%였다.
마지막 시도는 후보 만드는 방식을 10가지에서 14가지로 늘린 것이다. 결과는 둘로 갈렸다.
| 재는 것 | 10가지 | 14가지 | 변화 |
|---|---|---|---|
| 오라클이 낼 수 있는 최선(작을수록 좋음) | 2.1581 | 2.0888 | 좋아짐 |
| 여지가 있는 문제의 비율 | 27.5% | 40.7% | 좋아짐 |
| 실제로 잡아낸 비율 | 0.3658 | 0.1330 | 3분의 1로 붕괴 |
넓히니 잡을 것은 늘었는데 잡는 능력은 3분의 1이 됐다. 후보가 10개에서 14개가 되자 “그중에 뭐가 맞나”를 고르는 일이 훨씬 어려워진 것이다.
이것이 오늘의 막다른 패턴을 완성한다. 앞의 실험은 “고르는 방식은 더 손볼 데가 없으니 후보를 넓혀라”고 말했고, 이 실험은 “넓혔더니 고르기가 무너진다”고 말한다. 두 결론이 서로를 가리킨다. 고르기를 고치면 잡을 게 없고, 잡을 것을 만들면 고르기가 무너진다.
다만 이것은 왜 그 다음 단계가 필요한지에 대한 논거를 준다. 문제 하나가 주는 시연은 보통 서너 개뿐이다. 후보가 늘수록 그 서너 개로 고르는 일은 급격히 어려워진다. 반면 수백 개 문제를 가로질러 통계를 공유할 수 있다면 한 문제의 서너 개가 아니라 누적된 증거로 고를 수 있다. 즉 “손으로 만든 통계가 바닥났다”는 소거법이 아니라, 문제 하나만 보고 고르는 방식이 정보의 한계에 부딪혔다는 진단이다.
여기서 멈추고 물었다. 우리 가설이 전부 실패한 것인가? 외부 검토자에게 하루치 결과를 전부 넘기고 냉정한 판정을 요청했다. 답은 이랬다.
“오늘의 핵심 실패는 가설이 전부 무너진 것이 아니라, 진단 단계가 핵심 학습 가설을 막아버린 실험 순서의 실패다.”
무슨 말인가. 이 계획의 핵심 주장은 “자가 아는 것을 생성기에 가르치면 생성기가 좋아진다”는 것이다. 그런데 우리는 여기에 조건을 하나 걸어 두고 있었다 — “자가 최소 기술 길이라는 새로운 원리로 만들어졌을 때에만 학습을 걸겠다”. 그 조건은 새로움을 주장하기 위한 조건이었는데, 그것을 학습을 시작하기 위한 조건으로 써버렸다. 결과는 순환이다.
자가 새로운 원리여야 핵심 주장을 시험할 수 있다 →
핵심 주장에 가치가 있는지 영원히 알 수 없다.
하루 종일 측정 39건, 정정 19건, 학습 0건이 이 설계의 대가였다.
또 하나 아픈 지적이 있었다. 시연 문제에는 정답이 있다. 우리 후보 목록은 그 정답에서 기계적으로 만들어진다. 그렇다면 이 목록은 정답 자체가 주는 정보를 넘어설 수 없다.
| 주장 | |
|---|---|
| 버림 | “자가 정답 너머의 정보를 준다” |
| 살림 | “정답에서 유도한 구조적 힌트가 학습을 매끄럽게 만들어 일반화를 돕는다” |
훨씬 약한 주장이다. 효과가 있어도 그것은 새 정보를 얻은 것이 아니라 학습이 잘 굴러간 것이다. 그래도 참일 수 있고, 참인지 아닌지는 재봐야만 안다.
조건을 바꿨다 — 새로움의 조건은 새로움을 주장할 때 걸고, 학습은 지금 시작한다. 설계는 단순하다. 똑같은 모델·데이터·초기값·예산으로 두 갈래를 돌린다.
A (대조군) — 정답만 보고 배운다.
B (처치군) — 정답 + 후보 목록 힌트. 바뀌는 칸마다 “이 칸의 답은 이 몇 개 중 하나”라는 부드러운 힌트를 함께 준다.
힌트는 그 문제의 나머지 시연에서만 만든다. 자기 자신의 정답이 자기 힌트에 들어가지 않도록 한 칸씩 빼고 만든다는 뜻이다. 그리고 시험 볼 때는 자를 쓰지 않는다 — 힌트는 오직 학습할 때만 쓰고, 실제 문제를 풀 때는 생성기 혼자다.
첫째, 힌트가 진짜 그 힌트인지. 학습에 들어가는 후보 목록의 정답 포함 정도가 0.4627, 가장 값싼 비교 대상(시연에 나온 색 전부)이 0.2234였다. 2.07배로, 낮에 잰 값과 맞는다.
둘째, 두 갈래가 정말 힌트만 다른지. 같은 조건에서 50걸음째를 대조했다. A의 손실 3.0342에 힌트 손실 3.5383의 0.3배를 더하면 4.0957이고, B의 실제 손실은 4.1132였다. 0.4% 차이 — 두 갈래가 같은 자리에서 출발해 힌트 때문에 조금씩 갈라지고 있다는 뜻이다. 차이가 0이 아닌 것이 정상이다. 0이면 힌트가 학습에 닿지 않았다는 뜻이니까.
셋째, 결과가 바닥이어서 아무것도 못 가릴 경우를 미리 막았다. 두 갈래가 둘 다 0에 붙어 있으면 그건 “힌트가 무효”가 아니라 “자가 아무것도 못 잰다”이다. 그래서 대조군이 최소한 얼마는 맞혀야 판정하겠다는 바닥선을 결과를 보기 전에 못 박았다.
나는 차이가 없을 것이라고 본다. 후보 목록의 정답 포함 정도가 0.46이라는 건
질량의 절반 이상이 오답으로 간다는 뜻이다. 매끄럽게 만드는 효과라기보다
잡음을 섞는 것에 가깝다.
그리고 만약 해롭다는 결과가 나오면 그것이 오늘 가장 값진 결과다.
하루 39번을 재서 남은 유일한 양성 신호가 학습으로는 옮겨가지 않는다는 뜻이고,
그러면 이 기질에서 이 계획을 정직하게 닫을 수 있다.
(이 절 시점) 측정 39건 · 예측 25승 18패 · 정정 19건 · 학습 1건(진행 중). 합격선과 예측은 전부 수치를 보기 전에 문서에 못 박혔고, 결과와 무관하게 고정된다.
학습이 도는 동안 첫 대조군이 끝났다. 결과는 바뀌는 칸에서 정확도 0이었다. 그런데 이상했다 — 아무 색이나 찍는 것보다도 9배 나빴다. 아무렇게나 찍어도 시연에 나온 색 중에서 뽑으면 19%는 맞는데, 우리 모델은 2.1%였다. 무작위보다 나쁘려면 체계적으로 틀려야 한다. 그래서 원인을 팠다.
| 바뀌는 칸에서 모델의 예측이… | 비율 |
|---|---|
| 입력과 같다(= 베꼈다) | 0.7543 |
| 정답과 같다 | 0.0211 |
바뀌는 칸은 정의상 베끼면 틀리는 자리다. 거기서 75%를 베끼니 정확도가 0에 붙는 건 당연하고, 무작위보다 나쁜 이유도 이것이다 — 무작위는 최소한 여러 색에서 뽑지만 베끼기는 체계적으로 틀린다.
오늘 아침 가장 중요한 발견이 “우리가 재던 기준선이 틀렸다 — 입력 베끼기가 84%”였다. 이제 생성기가 바로 그 기준선으로 수렴해 있었다는 것이 실측됐다. 하루 종일 자를 만들었는데, 그 자가 가르쳐야 할 학생이 입력을 베끼고 있었다.
베끼기가 “못 배워서”인지 확인했다. 아니었다.
| 바뀌는 칸 정확도 | |
|---|---|
| 학습에 쓴 문제 | 0.3859 (무작위의 2배) |
| 처음 보는 문제 | 0.0211 (무작위의 1/9) |
과거 실험도 같은 말을 하고 있었다. 문제별로 모델 전체를 다시 학습시키면 시연 손실이 0.00000117까지 떨어진다 — 시연을 완벽하게 외운다. 그런데 그 문제의 시험 문항은 100개 중 0개를 맞힌다.
시연이 답을 결정하지 않는다. 시연과 완벽히 일치하는 답이 여럿이고 모델은 그중 틀린 것을 고른다. 이걸 “결정되지 않음”이라 부르고, 스도쿠 쪽에서도 같은 벽에 부딪혔던 문제다.
위 ②는 학습에 쓴 문제와 처음 보는 문제 둘만 비교했다. 그 사이에는 서로 다른 두 가지가 겹쳐 있다 — 그 (입력, 출력) 쌍을 봤는가와 같은 과제의 새 입력에 규칙을 적용할 수 있는가. 학습에는 각 과제의 시연쌍만 썼으므로, 학습 과제의 test 쌍이 그 둘을 가른다. 격자 크기를 맞춘 띠(내용 칸 32~128)에서 다시 쟀다.
| 단계 | 바뀌는 칸 정확도 | 전체 내용 칸 — 모델 | 전체 내용 칸 — 베끼기 | 차이 |
|---|---|---|---|---|
| 본 쌍(학습 과제 · 시연쌍) | 0.4412 | 0.7978 | 0.6827 | +0.115 이김 |
| 본 과제 · 새 입력(학습 과제 · test쌍) | 0.1189 | 0.7090 | 0.7535 | −0.045 짐 |
| 새 과제(평가 과제 · test쌍) | 0.0495 | 0.6240 | 0.7448 | −0.121 짐 |
⚠두 지표가 다르다. 왼쪽 굵은 숫자는 바뀌는 칸만의 정확도이고, “이김/짐”은 전체 내용 칸에서 베끼기와 비교한 것이다. 0.4412 와 0.6827 을 직접 비교하면 안 된다 — 모집단이 다르다. (코덱스가 이 표를 그렇게 오독했다. 열을 나눠 고쳤다.)
과제 단위로 묶어 재표집한 신뢰구간(같은 과제의 쌍은 독립이 아니므로 함께 뽑는다, 4,000회):
| 비교 | 차이(%p) | 95% 신뢰구간 | 배율 |
|---|---|---|---|
| 본 쌍 → 본 과제 새 입력 (짝지음, 공통 118과제) | +0.2491 | [+0.161, +0.363] | 3.18배 [2.15, 5.20] |
| 본 과제 → 새 과제 (독립) | +0.0699 | [+0.018, +0.122] | 2.48배 [1.24, 5.19] |
★더 큰 하락이 “같은 과제의 새 입력”에서 이미 일어난다. 그리고 두 신뢰구간의 하한을 보면 — 본 과제 안에서의 하락(하한 2.15배)이 견고하고, 새 과제에서의 추가 하락(하한 1.24배)은 약하다. 내가 하루 종일 “벽은 과제 간 전이”라고 불렀던 그것이 증거가 가장 약한 쪽이었다.
그런데 여기서 원인을 말하면 안 된다. 나는 처음에 “모델이 배운 것은 규칙이 아니라 쌍의 목록이다”라고 썼다가 스스로 철회했다 — 학습 손실이 3000스텝 끝에서도 가파르게 떨어지고 있어서(마지막 300스텝에 −0.026) 모델이 수렴하지 않았기 때문이다. 순수 암기였다면 본 쌍에서 0.44가 아니라 1에 가까웠어야 한다. 그 다음 “과제 규칙이 형성되지 않았다”로 바꿨는데 그것도 과장이라는 지적을 받았다. 지금 말할 수 있는 것은 이것뿐이다 —
확정되는 것은 실패의 원인이 아니라, 본 쌍 → 홀드아웃 → 새 과제로 갈수록 성능이 급격히 감소한다는 현상이다. 이 감소는 쌍 특이적 적합 · 지름길 학습 · 미수렴 · 과제 정보 채널 실패 모두와 양립하며, 어느 것인지는 학습 예산과 시연 채널을 분리한 후속 실험이 있어야 갈린다. (체크포인트 하나 · 시드 하나. 위 신뢰구간은 데이터 표집 불확실성만 담고 시드 선택 불확실성은 담지 않는다.)
오늘 하루 돌린 학습은 하나다 — 초안 채널(모델이 낸 답을 다시 입력으로 넣어 고치게 하는 장치) 3팔 × 3시드 = 9런. 합격선은 결과를 보기 전에 문서에 못 박았고, 판정은 내가 아니라 스크립트가 기계적으로 냈다.
| 팔 | 시드 0 | 시드 1 | 시드 2 |
|---|---|---|---|
| 초안 없이 한 번 | 0.0 | 0.0 | 0.0 |
| 통제군(초안 없이 두 번 통과) | 0.0 | 0.0 | 0.0 |
| 초안 채널 | +0.000292 | +0.000067 | +0.000415 |
숫자는 “라운드를 더 돌려서 고쳐진 칸의 순증”이다. 통제군이 세 시드 모두 정확히 0이므로 초안 채널의 값이 곧 그 장치의 순효과다.
★판정 = (b) 무효과. 시드평균 +0.0003, 합격선은 ±0.01이었다. 내가 미리 적어 둔 예측은 “(b) 무효과, 평균 −0.005~+0.008”이었고 적중했다. 격자를 통째로 맞힌 문제는 9런 × 두 조건 전부 0개다.
이 실험의 설계 문서에는 합격선이 둘 있었다. 위의 것(초안 채널이 도왔는가)과, 사다리를 다음 칸으로 올려도 되는지 정하는 G-S(“암기 없이 시연쌍을 재현하는가”, 밴드 ≥ 0.10). 나는 앞의 것만 추적했고, 진단 코드가 시연 재현율을 계산하지 않아 로그만으로는 판정할 수 없었다. 설계 문서를 다시 읽다가 밤 10시에 찾았다.
| 측정 | 값 |
|---|---|
| 9 체크포인트 × 2 조건, 시연 재현율 | 0.0000 ~ 0.0015 |
| 합격선 | 0.10 |
| 비율 | 밴드의 1/67 (시연쌍 1,363개 중 최대 2개) |
★G-S 불통과. 예측(0.00~0.02)도 적중했다. 그리고 세 팔이 구분되지 않는다 — 정제 루프도, 상태 채널도, 반복 표집도 시연 재현에는 아무 차이를 못 만든다. 위 판정을 완전히 다른 지표가 재확인한 셈이다.
설계 문서는 이 게이트를 왜 뒀는지도 미리 적어 뒀다 — “기질이 0.006인 상태에서 자의 기여를 잴 추정량 자체가 없기 때문이며, 이 저장소는 같은 실패를 이미 기록했다.” 그래서 사다리는 여기서 정지이고, 다음 단(자를 인증하는 실험)은 차단된다.
| 어디서 왔나 | 결론 |
|---|---|
| G-S 게이트 (설계가 미리 정해 둔 분기) | 기질이 안 서면 정지 |
| 오늘의 진단 (조건화 절제 · 전이 사다리 · TRM 대조) | 과제 정보가 모델 입력에 없다 |
| 복사 억제 실험 + 과거 후보확장 실험 | “무엇으로 바꿀지” 축은 손으로 만든 후보집합으로 원리적으로 막힘 |
⇒ “자를 만들기 전에 기질을 세운다.” 사다리 순서를 뒤집자는 제안은 규칙 위반이 아니라 G-S가 예정해 둔 분기다. 오늘 하루 GPU로 돌린 학습은 이 하나뿐이고, 나머지는 전부 기존 체크포인트의 재측정이었다. 정지하라는 지점에서 학습을 더 얹지 않은 것이 오늘 판단의 핵심이다.
바뀌는 칸을 “입력을 그대로 낸 것”과 “바꾸기로 결정한 것”으로 갈랐다.
| 단계 | 베낀 비율 | 바꾸기로 결정했을 때의 정확도 | 팔레트 우연 대비 | 팔레트 안 |
|---|---|---|---|---|
| 본 쌍 | 0.369 | 0.6987 | 3.56배 | 0.813 |
| 본 과제 · 새 입력 | 0.695 | 0.3902 | 1.88배 | 0.766 |
| 새 과제 | 0.766 | 0.2112 | 1.02배(=우연) | 0.398 |
분해가 정확히 맞는다 — 0.305 × 0.3902 = 0.1190(실측 0.1189). 실패가 둘로 갈린다. ①베끼기 편향: 바뀌는 칸의 70~77%를 그대로 낸다. 거기선 정의상 오답이므로 집계가 우연 아래로 내려가는 이유는 전부 이것이다. ②판단의 질: 바꾸기로 결정했을 때의 정확도가 3.56배 → 1.88배 → 1.02배(우연)로 떨어진다.
★본 과제의 새 입력에서 모델은 실제 지식을 갖고 있다 — 바꾸기로 결정한 칸에서 우연의 1.88배다. 문제는 결정을 30%밖에 안 한다는 것이다. 이것은 “체계적으로 틀린다”와 처방이 완전히 다르다. 그리고 우리가 만든 후보집합 보조 손실은 성질이 정확히 복사 반대 사전분포다 — 자(ruler)를 “규칙을 고르는 물건”이 아니라 “어디를 바꿀지 정하는 물건”으로 쓰는 것이 이 측정과 정합한다.
오늘 저녁 정의를 검사하다 찾았다. 나는 두 개의 다른 것을 같은 이름으로 쓰고 있었다.
| 정의 | 내용 | 학습 시연쌍 1,302개에서 |
|---|---|---|
| (A) 내용마스크 | 예측[정답≠빈칸] == 정답[정답≠빈칸] — 출력 격자 크기를 요구하지 않는다 | 24 |
| (B) 전체 캔버스 | (예측 == 정답).all() — 진짜 ARC 기준 | 4 |
(A)는 (B)를 6배 부풀린다. 그리고 (B)의 4개 중 3개는 정답이 문자 그대로 입력과 같은 자명한 쌍이다(그런 쌍은 전부 5개).
⇒ 37 에폭 학습한 1,302쌍에서 자명하지 않게 완성한 격자는 1개(0.077%)다. 평가에서는 0개다. 그리고 정답이 출력 = 입력인 쌍 5개 중 2개를 못 맞힌다. 칸으로는 우연의 2.25배인데 격자로는 0.077% — 칸 축과 격자 축은 다른 문제다.
아래 TRM/HRM 사실관계는 코덱스가 원논문·공식 코드·ARC Prize 재현 분석을 웹으로 확인한 것이고, 나는 이 환경에서 독립 검증하지 못했다. 그 한계를 적어 둔다.
| 항목 | TRM / HRM | 우리 |
|---|---|---|
| 시연쌍을 입력에 넣는가 | 아니오(입력 격자 + puzzle_id 임베딩) | 아니오 |
| 과제 벡터의 내용물 | 그 과제의 시연쌍으로 학습된 임베딩 | 전 과제 공통 상수 |
| 평가 과제의 시연 | 학습에 사용(ARC 규칙상 허용) | 미사용 |
| 학습 증강 | 최대 1,000배 | 0 |
| 추론 | 증강 투표 · pass@2 | 단일 후보 · pass1 |
| 학습량 | 약 100K epoch 급 | 3,000 step(미수렴) |
내 가장 큰 오해가 깨졌다. 나는 “TRM은 시연을 입력에 넣는데 우리는 안 넣는 것이 결함”이라 믿었고 그 위에 설계까지 세웠다. 그들도 안 넣는다. 진짜 차이는 그 벡터가 무엇으로 채워지느냐이고, 그들은 평가 과제의 시연으로 채운다. ARC Prize 재현에서 평가 과제만으로 학습해도 31% pass@2가 나온다.
그리고 우리 저장소에 이미 답이 있었다 — 가중치를 얼리고 과제 벡터만 그 과제의 시연으로 맞추는 팔이 세 번 실행됐고 전부 0, 시연 재현율 0.000~0.006이다(사전등록 게이트 0.30의 1/50). 벡터 하나로는 그 과제의 시연조차 못 맞춘다. 오늘 나는 이미 측정된 것을 세 번 새 실험으로 제안했다. 세 번 다 기존 로그가 답을 갖고 있었다.
코드를 다시 읽다가 확인했다. no-TTT 평가에서 생성기가 받는 입력은 테스트 입력 격자 하나와 모든 평가 과제에 공통인 평균 task 벡터뿐이다. 그 과제가 무엇인지 정하는 시연쌍(t["train"])은 모델 입력으로 전혀 들어가지 않는다 (시연쌍은 평가 코드 안에서 “시연 재현율”이라는 진단 출력에만 쓰인다). arc_gram_train.py:150,163,166 · ARCFeaturizer.forward:87-93.
정확히 적으면 — “평균 task 벡터”는 임베딩의 부재가 아니라 과제별 정보가 없는 공통 전역 벡터다. 그리고 시연이 없으면 ARC 과제의 변환 규칙은 일반적으로 식별되지 않는다 — 같은 입력 격자에 어떤 과제는 그대로 두기를, 다른 과제는 색 반전이나 회전을 정답으로 요구할 수 있기 때문이다. (다만 “시연 없이는 어떤 ARC도 풀 수 없다”는 틀린 말이다 — 격자 구조·색분포·대칭성만으로 꽤 맞힐 수 있는 과제도 있다.)
따라서 이 페이지의 no-TTT 결과는 시연이 없는 조건에서의 성능을 재며, ARC의 표준적인 시연 기반 추론 성능을 재지 않는다.
그리고 위 ②의 해석을 좁힌다. 나는 “학습 과제에서 과제 임베딩을 평균 벡터로 바꿔도 성능 변화가 작다(+0.53%p)”를 근거로 조건화 부재 가설을 기각하고 원인을 “전이 실패”로 단정했었다. 그 절제(ablation)는 학습 과제 안에서의 측정이라 입력 격자 기반 암기·과제 식별 가능성에 교란된다. 미학습 과제에서 과제별 조건화가 필요한지를 판정하는 실험이 아니다. “처음 보는 문제 0.0211”은 기억도 없고 시연도 없는 조건이라 “전이 실패”와 “과제 지정 부재”를 이 설계로는 분리할 수 없다. (평가 과제 · 과제 임베딩 칸은 미학습 과제에 학습된 임베딩이 없어 애초에 채울 수 없다 — 이 비대칭이 그 설계의 한계다.)
TTT도 다시 적는다. 전-가중치 TTT는 t["train"], 즉 시연쌍으로 가중치를 적응시킨다(arc_ttt_fullweight.py:126-132). 성능이 오른 것은 사실이지만, 그 상승이 시연 정보 때문인지 200스텝 최적화 자체 때문인지 격자 분포 적응 때문인지는 아직 분리되지 않았다. 가르려면 네 팔이 필요하다 — 무적응 · A의 시연 · 다른 과제 B의 시연 · A의 입력·출력 대응을 깨뜨린 위약 시연. (A→A는 영 통제군이 아니라 양성 대조군이다.) 이 측정은 GPU 비결정성만으로 ±0.05 흔들리므로 결정성 강제와 과제 단위 짝 비교가 함께 필요하다. 아직 돌리지 않았다.
여기서 자의 역할을 다시 정의해 봤다. 거리를 재는 물건이 아니라 여럿 중 하나를 고르는 제약이라면 어떨까. 그런데 그건 고를 후보가 여럿일 때만 말이 된다. 그래서 같은 문제를 서로 다른 난수로 여덟 번 풀려 봤다.
| 재는 것 | 값 |
|---|---|
| 여덟 번 중 어딘가에 정답이 있는 칸 | 4.4% |
| 칸당 서로 다른 색의 개수 | 1.25개 |
| 여덟 번 전부 입력을 베낀 칸 | 65% |
여덟 번을 굴려도 칸마다 사실상 한 가지 색만 나온다. 확신을 갖고 틀리고 있다. 어떤 자도, 어떤 제약도 — 후보에 없는 답을 고를 수는 없다. 하루 만에 내 재정의가 반증됐다.
이것이 오늘 하루를 설명한다. 자의 후보 목록을 아무리 좋게 만들어도 (팔레트의 2.2배까지 올렸다) 생성기가 내놓는 여덟 개 안에 정답이 4.4%뿐이면 고를 대상이 없다. 벽은 고르기가 아니라 만들기다.
모델 내부에는 “잡음 세기” 손잡이가 있다. 이걸 0으로 두고 재보니 성능이 다섯 배 좋아졌다. 처음엔 “잡음이 해로웠구나, 끄면 공짜로 좋아진다”고 적었다. 그 설명은 틀렸다.
코드를 다시 읽으니, 그 손잡이를 정확히 0으로 두면 계산 자체가 바뀐다 — 모델의 핵심 내부 상태를 통째로 버리고 대신 작은 보조 신경망의 출력만 쓴다. 그래서 진짜 “잡음만 끈 판”(손잡이를 0 대신 0.000000001로)을 따로 만들어 비교했다.
| 설정 | 문제별 중앙값 | 전체 | 0점 아닌 문제 |
|---|---|---|---|
| 현행 | 0.0000 | 0.0211 | 61/270 |
| 잡음만 끔 | 0.0000 | 0.0363 | 82/270 |
| 핵심 상태를 버림 | 0.0208 | 0.1048 | 140/270 |
| (주의 — 이 표는 체크포인트 하나의 값이다. 여섯 개로 재확인한 결과는 맨 아래 절 참조) | |||
정정한다. 잡음을 끈 효과는 일부일 뿐이고, 개선의 대부분(2.9배)은 모델의 핵심 내부 상태를 버린 데서 왔다. “잡음을 끄면 여섯 배”라는 내 설명은 폐기한다.
그게 “그냥 아무 답이나 내는 퇴화”인지도 확인했다. 아니었다 — 같은 자리라도 문제가 다르면 예측이 90% 갈리고, 한 색에 몰리지도 않는다(가장 흔한 색이 35%). 입력에 의존하는 진짜 계산이다.
우리 구조의 이름은 “재귀적 흘러가기”다. 같은 계산을 여섯 번 반복하며 답을 다듬는다는 뜻이다. 그런데 핵심 상태를 버리는 게 낫다면, 그 상태를 만드는 재귀는 뭘 하고 있나? 반복 횟수를 바꿔 봤다.
| 반복 횟수 | 1 | 2 | 4 | 6(학습값) | 8 |
|---|---|---|---|---|---|
| 성능 | 0.0857 | 0.1007 | 0.1029 | 0.1048 | 0.1052 |
한 번만 돌려도 여섯 번의 82%가 나오고, 두 번이면 96%로 포화한다. 여섯 번 중 실제로 일하는 것은 한두 번이고 나머지는 거의 아무것도 안 한다. 그리고 잡음을 켜면 반복할수록 나빠진다 — 반복마다 잡음이 쌓이기 때문이다.
종합. 벽은 자가 아니었다. 생성기는 (ⓐ) 입력을 베끼고,
(ⓑ) 외우기만 하고 옮기지 못하며, (ⓒ) 확신을 갖고 틀리고,
(ⓓ) 그 답을 만드는 재귀는 한두 번이면 할 일이 끝나고,
(ⓔ) 그 재귀가 만든 상태는 버리는 편이 낫다.
“재귀적으로 흘러가며 답을 다듬는다”는 전제가 가정만큼 작동하지 않고 있다.
이것이 오늘 자를 마흔다섯 번 재고 나서야 보인 것이다.
오늘 측정 45건 · 예측 26승 23패 · 정정 22건. 합격선과 예측은 전부 수치를 보기 전에 문서에 못 박혔다. 예측 적중률이 겨우 절반인 것이 사전등록이 실제로 일하고 있다는 증거다 — 오늘만 세 건의 잘못된 결론을 밴드가 막았다.
검토자가 요구했다 — “시연 손실이 0.0000012인데 시험이 0개라는 조합은 능력 부족만으로 설명하기 어렵다. 배선이 정말 맞는지 한 사례씩 확인하라.” 옳은 요구였다. 처음부터 끝까지 한 스크립트 안에서 다시 쟀다.
| 재는 것 | 재학습 전 | 재학습 후 |
|---|---|---|
| 가중치가 실제로 변했는가 | 변했다 (변화량 5.19) | |
| 시연을 그대로 재현하는가 | 0.0000 | 1.0000 |
| 시험 문제의 바뀌는 칸 | 0.0178 | 0.1996 |
| 시험 문제 전체 정확 일치 | 0.0000 | 0.0000 |
정정한다. 위 ②에서 “옮기기는 정확히 0”이라고 쓴 것은 “900칸이 전부 맞아야 한다”는 지표만 보고 쓴 것이었다. 칸 단위로 보면 문제별 재학습은 11배를 옮긴다(0.0178 → 0.1996). 전체 정확 일치가 0인 것은 900칸을 전부 맞혀야 하기 때문이지 아무것도 못 배워서가 아니다.
그리고 이것이 오늘 하루의 우선순위가 틀렸음을 말한다. 문제별 재학습(test-time training)은 이 프로젝트가 원래 겨냥한 방향이고, 살아 있다. 자를 마흔여섯 번 잰 것보다 이 한 번의 측정이 더 많은 것을 말했다.
같은 모델·같은 문제·같은 설정으로 두 번 쟀는데 0.1996과 0.2978이 나왔다. 원인을 찾았다 — 중간에 성능을 재는 행위가 난수 흐름을 리셋해서, 재학습이 겪는 잡음의 궤적 자체를 바꿔 버렸다.
즉 같은 절차라도 결과가 크게 흔들린다. 그래서 이 축의 어떤 결론도 여러 번 반복해서만 말할 수 있고, “11배”라는 숫자도 범위로 읽어야 한다. (단 위에 적은 “난수 흐름 리셋이 원인”이라는 설명은 그 뒤 반증됐다 — 맨 아래 절 참조.)
오늘 네 번째 자기반증이다. ① 어디를 고칠지 안다던 결과 ② 잡음을 끄면 여섯 배 ③ 옮기기 0 ④ 그 11배의 재현성. 넷 다 수치를 보기 전에 합격선을 못 박아 둔 덕분에 잡혔다. 예측 적중률이 절반(26승 25패)인 것이 불편하지만, 그것이야말로 이 규율이 필요한 이유다.
오늘 측정 48건 · 예측 26승 25패 · 정정 27건 · 학습 6런 중 5런째 진행 중.
바로 앞 절에서 나는 두 측정이 다른 이유를 “중간에 성능을 재는 행위가 난수 흐름을 리셋해서”라고 적었다. 코드에서 그 기제를 찾았기 때문이다. 그런데 그 기제가 실제로 얼마나 큰지는 재지 않았다. 한 스크립트 안에서 조건 하나만 바꿔 다시 쟀다.
| 조건 | 결과 |
|---|---|
| 중간 측정 없음 | 0.2157 |
| 중간 측정 있음 | 0.2209 |
| 차이 | 0.0052 |
| 설명해야 했던 불일치 | 0.0982 |
내 설명은 관측된 차이의 5%밖에 설명하지 못한다. 틀렸다. 난수 씨앗만 바꿨을 때의 변동이 약 0.016이니, 나머지 약 0.077은 원인을 모른다. 두 스크립트의 다른 차이를 코드에서 찾으려 했지만 찾지 못했다.
그래서 설명을 지어내지 않는다. 대신 더 보수적으로 간다 — 서로 다른 두 측정의 절대값은 인용하지 않고, 한 실험 안에서 통제된 수치만 쓴다. 그 기준으로 문제별 재학습의 효과는 0.0178 → 0.2157(약 12배)이다.
★오늘 배운 규율. 나는 코드에서 원인을 찾자마자
그 크기를 재지 않고 원인이라고 발표했다.
기제가 존재한다는 것과 그 기제가 관측을 설명한다는 것은 다른 문제다.
앞으로 인과를 발표하기 전에 크기를 잰다.
이것이 오늘 다섯 번째 자기반증이고, 이번엔 이미 공개한 뒤에 잡혔다.
그래서 사이트를 고치는 데 그치지 않고 규율로 남긴다.
오늘 측정 49건 · 예측 26승 26패 · 정정 29건. 합격선은 전부 수치를 보기 전에 못 박혔고, 이번 정정도 그 밴드가 잡아냈다.
이 계획의 핵심 주장은 “자가 아는 것을 생성기에 가르치면 생성기가 좋아진다”였다. 그런데 어제까지 이 주장은 한 번도 시험된 적이 없었다 — “자가 새로운 원리로 만들어졌을 때에만 학습을 걸겠다”는 조건이 스스로를 막고 있었기 때문이다. 순서를 바꿔 처음 시험했다.
A (대조군) — 정답만 보고 배운다.
B (처치군) — 정답 + “이 칸의 답은 이 몇 개 중 하나”라는 부드러운 힌트. 힌트는 그 문제의 나머지 예시에서만 만들고, 시험 볼 때는 쓰지 않는다.
여섯 번(두 갈래 × 세 번) 학습했고, 여섯 번의 학습 경로가 글자 하나까지 같다는 것을 해시로 증명한 뒤 판정했다. 그리고 판정은 내가 서술하지 않았다 — 합격선을 읽어 적용하는 스크립트가 내렸다. 이 날 내 서술이 다섯 번 틀렸기 때문이다.
| 보는 각도 | 판정 |
|---|---|
| 주 지표(맞힌 비율) | 바닥 — 잴 수가 없다 (대조군 문제별 중앙값이 세 번 다 0) |
| 정답에 준 확률 (바닥일 때의 판정 근거) | 개선 · 16.4% · 세 번 모두 같은 방향 |
| 다른 디코딩 조건 | 세 번의 방향이 갈림 — 판정 불가 |
두 각도가 갈린다. 이 경우를 위해 미리 정해 둔 규칙이 있었다 — “조건에 따라 갈린다”가 결과이고, 한쪽을 골라 쓰지 않는다.
✅ 한 조건에서 힌트를 받은 모델은 바뀌는 칸의 정답에 훨씬 높은 확률을 준다(세 번 모두).
⛔ 그러나 맞힌 비율은 여전히 바닥이다. 덜 틀릴 뿐 맞히지는 못한다.
⛔ 다른 디코딩 조건에서는 재현되지 않는다.
⛔ 새로움도, “정답 너머의 정보”도, 격자 전체 정확 일치도, 오답→정답 회복도 주장할 수 없다.
⚠ 그리고 이 판정은 문제별 재학습을 하지 않은 조건에 한정된다.
재학습을 걸면 정확도가 0.018 → 0.19~0.29로 바뀐다.
해석(판정과 분리해 적는다). 문제의 디코딩 조건은 출력이 배경과 복사로 쏠리는 모드다. 힌트는 정확히 복사를 벌하는 신호라 그 병리를 정면으로 고친다. 반면 다른 조건은 그 병리가 이미 없는 모드다. 즉 이 처치는 더 나은 디코딩이 이미 피하고 있는 문제를 고치는 것으로 보인다.
내 예측은 틀렸다. 나는 “아무 차이 없음”을 예상했고 합격선에 그렇게 못 박아 뒀다. 실제로는 한 축에서 뚜렷이 이겼다. 이날 전적은 26승 28패다 — 절반도 못 맞혔다. 그래서 수치를 보기 전에 합격선을 적어 두는 일을 계속한다.
2026-07-27~28 · 측정 51건 · 예측 26승 28패 · 정정 31건 · 학습 2팔×3시드 완주. 합격선·예측·범위 한정은 전부 결과를 보기 전에 문서에 못 박혔다.
마지막 실험은 이렇게 물었다. “힌트로 배운 모델이, 시험장에서 문제별로 다시 학습할 때 더 잘 적응하는가?” 이때 힌트는 쓰지 않는다 — 양쪽 다 정답만 보고 재학습한다. 차이가 있다면 그건 사전 학습이 남긴 것이다.
결과는 좋아 보였다.
| 시드 | 0 | 1 | 2 | 평균 |
|---|---|---|---|---|
| 차이 | +0.046 | +0.025 | +0.025 | +0.032 |
세 번 모두 같은 방향입니다. 합격선을 넘었고, 판정은 “도움이 된다”였다.
같은 모델을 두 번 돌린 것이다. 처치가 없으니 차이는 0이어야 한다.
| 시드 | 0 | 1 | 2 | 잡음 바닥 |
|---|---|---|---|---|
| 차이(참값 0) | +0.048 | −0.020 | +0.052 | 0.040 |
아무것도 안 했는데 관측된 효과보다 큰 흔들림이 나왔다. 그래서 미리 정해 둔 규칙 — “효과가 잡음 바닥의 두 배를 못 넘으면 판정하지 않는다” — 에 따라 판정 불가로 강등했다.
최종 판정: 알 수 없다.
힌트로 배운 모델이 더 잘 적응하는지, 이 측정으로는 가릴 수 없다.
효과 추정치(+0.032)가 잡음(0.040)보다 작기 때문이다.
그리고 격자를 통째로 맞힌 문제는 여전히 0개다 — 시연을 쓰지 않은 no-TTT·평균 task 벡터 조건에서 270개 중 0개다. (이 0개는 격자 완전 일치이고, 위의 0.0211은 바뀌는 칸 정확도다 — 서로 다른 지표다.)
★이 실험의 진짜 성과. 통제군이 없었다면
“세 시드 모두 같은 방향, 효과 +0.032”를 결과로 발표했을 것이다.
매우 설득력 있어 보였을 것이다.
그 통제군은 발사 한 시간 전에 추가됐고, 계기는 그 전날 밤
“똑같은 실행 두 개가 크게 달랐다”를 발견한 것이었다.
하루 전의 자기반증 하나가 오늘의 가짜 양성 하나를 막았다.
나는 하루 종일 이렇게 말했다. “추론 설정 하나만 바꾸면 문제별 중앙값이 0 → 0.021이 되고, 한 문제도 못 맞히던 것이 61 → 140개로 는다.” 그 값은 모델 하나에서 나왔다. 여섯 개가 있는데 하나만 썼다. 방금 여섯 개 전부로 다시 쟀다.
| 모델 | 중앙값 변화 | 전체 정확도 변화 |
|---|---|---|
| 1번 | 0 → 0.021 | 5.0배 |
| 2번 | 0 → 0 | 3.3배 |
| 3번 | 0 → 0 | 1.8배 |
| 4번 | 0 → 0 | 2.3배 |
| 5번 | 0 → 0 | 3.1배 |
| 6번 | 0 → 0 | 0.7배 (나빠짐) |
중앙값이 오른 것은 여섯 중 하나뿐이고, 여섯 번째는 오히려 나빠졌다. 미리 못 박아 둔 규칙에 따라 이 주장을 철회한다.
정확한 진술: 이 설정은 대체로(여섯 중 다섯) 전체 정확도를 2~5배 올리지만, 하나에서는 나빠지고, 문제별 중앙값은 여섯 중 다섯에서 0 그대로다. 즉 덜 틀리는 문제가 늘어날 뿐, 문제의 절반을 0에서 띄우지는 못한다.
① “잡음을 끄면 여섯 배” ② “옮기기는 정확히 0” ③ “중앙값이 0 → 0.021”. 셋 다 이 페이지에 올라갔던 것이다.
공통 원인이 하나다 — 표본 하나를 보고 일반 진술을 만들었다.
①은 기제 하나, ②는 지표 하나, ③은 모델 하나였다.
그래서 규칙을 하나 더 세웠다: 일반적인 문장을 쓰기 전에
“이 문장의 표본이 몇 개인가”를 문장 안에 적는다.
하나면 “모델 하나에서”라고 쓰고, 그렇게 쓸 수 없으면 아예 쓰지 않는다.
2026-07-27~28 · 측정 52건 · 예측 26승 30패 · 정정 34건 · 격자를 통째로 맞힌 문제 0개(시연 없는 no-TTT 조건, 270개 중). 합격선·예측·철회 조건은 전부 결과를 보기 전에 문서에 못 박혔다.
바로 앞 절에서 나는 “중앙값 0 → 0.021”은 철회하되 “전체 정확도가 2~5배 오른다”는 살렸다. 그것도 반쪽이었다.
다음 실험의 로그에 0.20 vs 0.59라는 숫자가 찍혀 있었다.
바뀌는 칸이 아니라 ‘모든 칸’의 정확도였다. 여섯 모델 전부 확인했다.
| 모델 | 모든 칸 정확도 | 배율 | 바뀌는 칸 배율 |
|---|---|---|---|
| 1번 | 0.700 → 0.162 | 0.23배 | 4.96배 |
| 2번 | 0.667 → 0.040 | 0.06배 | 3.29배 |
| 3번 | 0.689 → 0.401 | 0.58배 | 1.81배 |
| 4번 | 0.646 → 0.112 | 0.17배 | 2.30배 |
| 5번 | 0.611 → 0.103 | 0.17배 | 3.12배 |
| 6번 | 0.631 → 0.147 | 0.23배 | 0.69배 |
여섯 모델 전부에서 전체 정확도가 무너진다. 바뀌는 칸에서만 좋아진다.
바뀌는 칸은 전체의 18%다. 이 설정은 모델이 입력 베끼기를 멈추게 하므로, 그 18%에서 얻고 나머지 82%(배경 그대로 두기)에서 크게 잃는다. 안 바뀌는 칸의 정확도를 역산하면 0.853 → 0.174다.
격자를 통째로 맞히려면 모든 칸이 맞아야 한다. 그러므로 이 설정은 “푸는” 방향으로는 명백히 나쁘다. “공짜 처방”이라는 말을 완전히 폐기한다. 남는 것은 반복 횟수를 6에서 2로 줄이는 것뿐이다(비용 3분의 1, 성능 97%).
나는 바뀌는 칸 하나만 보고 이것을 처방이라 불렀다. 전체 정확도는 한 번도 보고하지 않았다.
그런데 오늘 같은 실수를 두 번 했다.
① 바뀌는 칸만 보고 이 설정을 “개선”이라 함 (전체는 무너짐)
② 칸 수준 지표만 보고 힌트 효과를 “개선”이라 함 (푼 문제는 0)
둘 다 부분집합에서 얻고 전체에서 잃는 거래를 개선이라 부른 것이다.
그래서 규칙을 하나 더 세웠다: 부분집합 지표가 좋아졌다고 쓸 때는
전체 지표를 반드시 나란히 적는다. 부분이 좋아지고 전체가 나빠지면
그건 개선이 아니라 거래다.
2026-07-28 · 이 페이지에서 철회한 주장 네 건 — “잡음 끄면 6배” · “옮기기 0” · “중앙값 0→0.021” · “전체 2~5배”. 넷 다 합격선을 미리 못 박아 둔 덕분에 잡혔다.
푼 문제는 여전히 0개다. 그 문장이 이 절의 첫 줄이어야 한다. 아래는 전부 “왜 안 되는지”이고, 마지막 하나만 “어디에 여지가 있는지”다.
모호성 가설이 죽었다. “같은 입력이 과제마다 다른 답으로 가서 원리적으로 못 맞히는 것 아닌가”를 셌다. 학습쌍 1,302개에서 입력이 같은데 출력이 다른 쌍은 4쌍뿐 이고, 암기 상한은 0.9969다. 배치를 통째로 버리고 색 개수만 남겨도 0.942, 크기만 남겨도 0.178 — 어느 수준에서도 실측 0.003을 설명하지 못한다. 모델은 원리적으로 99.7%를 외울 수 있었는데 0.3%를 외웠다.
“거의 맞는데 완전일치만 못한다”도 죽었다. 쌍마다 틀린 칸 수를 세니 중앙값 17칸, 두 칸 이내는 2.6%뿐이다. 아깝게 놓치는 게 아니라 멀다.
평가에서 유효 셀의 81.6%는 원래 안 바뀌는 칸이다. 그래서 입력을 그대로 베끼기만 해도 0.8157을 받는다. 모델은 0.578이다. 같은 체크포인트로 학습·평가를 짝지어 직접 재면 원인이 한 곳으로 모인다.
| 전체 칸정확도 | 안 바뀌는 칸을 지킴 | 바뀌는 칸을 맞힘 | 베끼기 기준선 | |
|---|---|---|---|---|
| 학습 과제 | 0.8614 | 0.9758 | 0.5082 | 0.7554 (이김) |
| 새 과제 | 0.5779 | 0.7031 | 0.0242 | 0.8157 (짐) |
학습 과제에서는 건드리면 안 되는 칸을 97.6% 지키는데, 새 과제에서는 70.3%만 지킨다 — 격차 0.273. 바뀌는 칸은 0.508 → 0.024로 21배 나빠진다. 즉 실패는 “무엇으로 바꿀지”만이 아니라 “어디를 건드릴지”에서도 일어난다. 네 수 모두 같은 체크포인트·같은 프로토콜의 직접 측정이다. 초판에서 나는 이 값을 분해식으로 역산해 0.997/0.835로 적었는데, 역산에 다른 측정의 숫자를 잘못 넣은 것이었다. 직접 측정으로 교체했고 격차는 오히려 커졌다.
여기서부터는 위 표와 다른 실험이다 — 자(ruler)의 유무만 바꿔 따로 학습한 두 팔(각 3시드)이고, 위 표의 체크포인트와는 다른 런이다. 그래서 절대값을 위 표와 비교하면 안 된다(같은 “새 과제 전체 정확도”가 위 표는 0.578, 아래는 0.685다 — 다른 모델이기 때문이다). 두 팔 사이의 차이만 읽는다.
그렇게 보면 거래가 드러난다 — 평가에서 바뀌는 칸은 0.023 → 0.036으로 오르는데 전체는 0.685 → 0.629로 내린다. 3시드 모두 같은 방향이다.
다만 “얼마나 손해인가”는 지금 계산할 수 없다. 두 수의 집계 방식이 다르기 때문이다 — 전체(0.685/0.629)는 과제 단위 중앙값이고 바뀌는 칸(0.023/0.036)은 풀링이라, 전체 = u·지킴 + (1−u)·바뀜 분해에 함께 넣을 수 없다. 초판에서 나는 이 둘로 “손해가 이득의 25배”라고 적었다. 그 산술은 철회한다 — 같은 종류의 실수(다른 집계의 수를 섞음)를 이 페이지에서 이미 한 번 했다. 같은 집계로 직접 세는 측정을 사전등록해 두었고, 결과가 나오면 이 자리를 채운다.
대신 같은 자료에서 집계를 바꾸면 드러나는 것이 있다 — 바뀌는 칸 정확도를 과제 단위 중앙값으로 보면 두 팔 모두 정확히 0이다. 즉 풀링값 2~3%는 소수의 과제가 떠받치고 있고, 중앙 과제에서는 바뀌는 칸을 하나도 못 맞힌다.
손으로 만든 사전확률(위치·색·배경대비)로 “이 칸이 바뀔까”를 맞혀 봤다. 과제를 갈라 처음 보는 80과제에서 AUC 0.5137 — 우연 바로 위다. 학습된 생성기의 암묵 신호도 0.5521이었다. 둘 다 우연 언저리다. 생성기가 쉬운 걸 안 배운 게 아니라, 입력 격자 하나에 그 정보가 거의 없다. 덤으로 내 직관 하나가 깨졌다 — 배경 칸과 비배경 칸의 변경률이 0.1784 vs 0.1896으로 거의 같다.
정답을 다른 예시 것으로 뒤섞어 학습시켰다. 외워야 할 정보량이 7배로 뛰는데 학습 시간은 1.30배만 늘었고, 600에폭이면 무작위 정답도 89%를 외운다. “정답은 대개 입력의 작은 편집”이라는 구조가 사실상 값을 못 한다는 뜻이다. 범위: 64쌍·시드 1개·단일 부분집합. 이 비율에 신뢰구간은 아직 없다. 다만 비교 대상 두 팔이 같은 데이터·같은 학습률 일정이라 학습 잡음은 최소다.
같은 실험이 예산·용량도 배제했다 — 작은 부분집합은 전부 외우고, 파라미터 여유도 있다. 그러나 여기서 “그러니 벽은 과제 정보의 부재다”로 건너뛰면 안 된다 — 과제 정보를 줘도(TTT) 푼 문제는 0이기 때문이다(아래 참조). 정확히 말하면 과제 정보의 부재는 “왜 베끼기보다 못한가”를 설명하고, “왜 못 푸는가”는 설명하지 못한다. 벽은 최소 둘이다.
과제의 시연으로 추론 시에 모델을 적응시키면(TTT) 바뀌는 칸 정확도가 0.0178 → 0.1996, 11.2배가 된다. 이 라인에서 나온 가장 큰 양성이다. 그런데 그 비율을 그대로 읽으면 안 된다 — 같은 모집단의 우연 수준이 0.1911이다.
| 바뀌는 칸 정확도 | 우연 대비 | 푼 문제 | |
|---|---|---|---|
| TTT 전 | 0.0178 | 0.09배 (우연의 1/11) | 0 |
| TTT 후 | 0.1996 | 1.04배 | 0 |
정확한 진술은 이것이다 — TTT 는 모델을 “우연보다 한참 아래”에서 “겨우 우연”까지 끌어올린다. 11.2배는 두 작은 수 사이의 비율이다. 그리고 과제 정보를 줘도 푼 문제는 0 이다(pass1 0.0000 → 0.0000).
그래서 이날의 종합을 좁힌다. 과제 정보의 부재는 “왜 베끼기보다 못한가”를 설명한다. 그러나 “왜 못 푸는가”는 설명하지 못한다 — 정보를 줘도 안 풀리기 때문이다. 벽은 최소 둘이고, 오늘 확인한 것은 그중 첫째다.
다만 “자로 학습한 모델이 더 잘 적응하는가”는 아직 판정 불가다 — 효과 추정치(+0.032)가 잡음 바닥(0.040)보다 작았다. 그 잡음 바닥은 GPU 비결정성이었고, 오늘 결정성을 강제할 수 있음을 실측했다(같은 20스텝 두 번 → 손실 비트 동일).
2026-07-29 · 이날 동결한 예측 채점 — 범주는 맞고 크기는 틀린다. 빗나간 여섯 중 다섯이 “얼마나 큰가” 예측이었다. 그래서 규칙을 하나 더 세웠다: 크기 예측은 근거를 수치로 계산할 수 있을 때만 쓴다.