Index
2026-09-21 — Experiment

writer × reader 교차 — 병목이 쓰기임을 직접 증명 (4가족 × 3모델, GPU $0)

scene_bench 읽기 트랙 | flash 가 쓴 메모리를 오픈 모델(32B·Gemma4·Qwen3.8)이 읽는다 — tagmem−vis-pure 부호가 12칸 전부 같은 방향으로 이동

TL;DR

−.024→+.132
32B find tag−vis
+.095
Gemma4 find (p<.01)
12칸
방향 일치 (3모델×4가족)
9/12
p<.01 (find·restore·routine)
$0
API

1 배경 / 목적

지금까지 모든 측정은 한 모델이 쓰고 같은 모델이 읽었다. 그래서 "오픈 모델에서 tagmem 이 지는 원인은 쓰기"는 결합률 상관에서 추론한 것이지 실험으로 가른 게 아니었다(같은 날 분해: 정상 결합 flash 65% vs 오픈 25~31% — 승패는 정상 결합 비율이 전부). 프롬프트 개선은 다섯 번(쓰기 v8·v11·v12, 읽기 v9·v10) 모두 기준 미달이라, 남은 질문은 "메모리 품질만 좋으면 약한 모델도 이득을 보는가"였다. 사용자(260919): "쓰기 플래시 읽기 [오픈] 모델 한 번 해보자."

기존 한계: writer 와 reader 가 같은 모델이라 어느 쪽이 원인인지 분리 불가 — 상관 기반 추론뿐.

2 작업 내용

writer: flash-3.7 이 이미 쓴 find 메모리 100편을 그대로 재사용 (--memory-from + --tagmem-graph = tmp/find_final_flash37_merged.json) — 쓰기 재실행 없음 reader: tagmem-r3 · rollforward-vis-pure 두 전략 모두 같은 writer 메모리 → 리더만 바뀐다 (32B · Gemma4 · Qwen3.8-27B) 조건: 본표와 동일 — cap 8 · 읽기 v8(find·restore)/v9(routine·resume) · temp 0 · hidden 제외 place · scene card GT 집계: tmp/alltab/cross.py · cross_all.py (결과 전 커밋), 질의 단위 짝 McNemar 잡: find 137219(32B)·137220(Gemma4), own 1장 25~32분 · 32B 잔여 5편 137337(샤드 1 서버 끊김 복구) restore 137401·137403 · routine 137402·137404(--multi-items) · resume 138773·138774(각 23분) · Qwen3.8 140675~140678(extra, 23~43분) 러너: resume 교차를 위해 run_eval_resume 에 --memory-from 추가(614b67f)

resume 은 처음에 교차 불가였다: run_eval_resume 에 --memory-from 이 없고, flash resume 아카이브의 vis-pure 는 컷 시점 복원용 kept_history 만 있고 kept 가 없었다(컷이 편마다 달라 스냅샷 보관). 러너 배선 후 4가족을 완성했다.

3 결과

4가족 교차 (tag−vis = tagmem − vis-pure, 짝 McNemar)

가족writer→readervis-puretagmemtag−vis불일치p
find32B→32B.214.190−.024+57/−700.29
flash→32B.261.393+.132+127/−56<.01
Gemma4→Gemma4.330.261−.069+54/−91<.01
flash→Gemma4.354.449+.095+100/−49<.01
restore32B→32B.018.040+.023+21/−80.02
flash→32B.025.128+.104+64/−5<.01
Gemma4→Gemma4.044.032−.012+14/−210.31
flash→Gemma4.062.169+.107+75/−14<.01
routine32B→32B.016.197+.181+59/−3<.01
flash→32B.010.426+.416+129/−0<.01
Gemma4→Gemma4.058.348+.290+93/−3<.01
flash→Gemma4.035.513+.477+150/−2<.01
resume32B→32B.112.068−.043+9/−160.23
flash→32B.124.143+.019+16/−130.71
Gemma4→Gemma4.099.043−.056+6/−150.08
flash→Gemma4.099.143+.043+17/−100.25

참고 flash→flash: find +.013 · restore +.033 · routine +.319 · resume +.012.

Qwen3.8-27B 추가 (260920) — 3모델 × 4가족 = 12칸 완성

가족자기 쓰기 (tag−vis)flash 쓰기 (tag−vis)부호
find+.006 (p=.86)+.156 (p<.01)뒤집힘
restore−.005 (p=.74)+.111 (p<.01)뒤집힘
routine+.226 (p<.01)+.381 (p<.01)확대
resume−.050 (p=.18)+.068 (p=.12)유의하지 않음

절대 수준: find tagmem .253 → .441, restore .032 → .158, routine .323 → .442. 절대 이득이 가장 큰 곳은 routine(+.42~.48) — 규칙 학습 과제라 기록된 텍스트가 프레임보다 압도적으로 유리하다.

12칸 전부 방향이 같다. find·restore·routine 9칸에서 flash 쓰기는 예외 없이 tagmem 을 vis-pure 위로 올린다(전부 p<.01). 32B 리더가 자기 메모리를 읽으면 tagmem 이 vis-pure 에 −2.4pp 지지만 flash 메모리를 읽으면 +13.2pp 이긴다.
한계: 대칭 셀(오픈 모델이 쓰고 flash 가 읽기)은 미측정(API ≈$7.6/모델/가족). 2×2 의 네 번째 칸이 비어 있어 "리더 능력은 무관하다"까지는 주장할 수 없다 — 주장 가능한 것은 "같은 리더에서 writer 만 바꾸면 부호가 뒤집힌다". flash 메모리는 flash 가 자기 읽기용으로 만든 것이라 리더 특화 편향이 있을 수 있다(있다면 오픈 리더에 불리한 방향).

4 Takeaway

의미

1) 논문 주장이 "flash 에서만 이긴다"에서 "메모리 품질이 확보되면 약한 모델일수록 이득이 크다"로 바뀐다. 본표의 오픈 모델 열세와 모순되지 않는다 — 그 열세는 writer 열세다.

2) 구조화된 텍스트 메모리가 약한 시각 능력을 보상한다: 리더가 프레임을 다시 해석할 필요 없이 이미 접지된 사실을 읽는다. 반면 vis-pure 는 리더 능력에 묶인다.

3) 실용 함의: 쓰기만 좋은 모델로 하고 읽기는 싼 모델로 돌리는 배치가 가능하다(온디바이스 시나리오와 맞음). 프롬프트 개선 5회 실패도 이 그림에서 자연스럽다 — 고쳐야 할 것은 프롬프트가 아니라 writer 의 시각 접지 능력이었다.

5 Next Steps

미해결 한계

2×2 의 빈 칸(오픈 writer → flash reader)이 측정되지 않았다. resume 은 표본(161행)과 이진 지표 때문에 3모델 모두 유의성이 안 나온다. flash 메모리의 리더 특화 편향 가능성이 남아 있다.

다음 작업

① find v1.2(722질의) 교차 — 잡 141360~141362(extra, $0) 제출됨. fd856246/contexts 는 e987b40f/contexts 의 심볼릭 링크라 편·영상이 같고 메모리는 질의와 무관해 flash 의 v1.0 메모리가 그대로 유효. 끝나면 final_results 에 교차 ablation 으로 보관(사용자 지시). ② 대칭 셀은 승인 후 API ≈$7.6/모델/가족. 가설: 오픈 writer 메모리를 flash 가 읽어도 tagmem 은 vis-pure 를 못 넘는다(결합률이 메모리 품질에 묶이므로).