콘텐츠로 이동

Source: report/version8/reporter/v8_0420_closure.md

v8 VQ Methodology Rescue — Closure Report

§0 요약 (Executive Summary)

v8 phase 는 실패로 공식 종결한다. MemoryAlignmentServer + RESET 2 기법을 v7 에 편입한 V4/V5 1-seed smoke 에서 PAPE 가 각각 56.51, 53.32 로 primary gate (<50) 를 통과하지 못했다. 후속 경로는 track-f (decoder capacity swap, ADR-009) 로 확정되었으며, cycle 1 에서 제안되었던 Option d (shared linear adapter, v9 adapter) 는 dominant 원인을 해결하지 못한다는 판단에 따라 docs/archive/decisions/ADR-009_v8_to_v9_vq_redesign_archived_2026-04-21.md 로 archive 되었다 (rollback 발동 시 참조 자료로만 보존). 쉬운 말로, "VQ 를 서버에서 정렬하면 v6 성능(PAPE 38)이 돌아오리라" 던 v8 가설은 기각되었고, 원인은 VQ 알고리즘이 아니라 v7 의 decoder 용량 자체가 너무 작았다는 쪽으로 무게중심이 이동했다.


§1 Pre-registered 성공 기준 vs 실제 결과

ADR-008 §1 은 "V4 또는 V5 가 PAPE < 50 달성 (A1 47.1 이하 초과)" 을 primary gate 로 선언했다. 결과는 2/2 미달.

구분 Cell Pre-registered gate 실측 PAPE 판정 MLflow run
Primary V4 (alignment, no RESET) PAPE < 50 56.51 FAIL mlruns/488793251950638315/2fab575cef1e470ba8016fd210e9b48f
Primary V5 (alignment + RESET) PAPE < 50 53.32 FAIL mlruns/488793251950638315/584cc9a61eba4afe808b677efd4a6c17
대조 v6 R1b (원본) reference 38.40 mlruns/628304840000878755/5e0409718fd347d085190264e43d4284
대조 A1 (no VQ, DLinear only) reference 47.1 v7 Stage 0.5 smoke
대조 B0 Local baseline reference 52.3 v7 Stage 0.5 smoke

쉬운 요약: V4 는 서버 정렬이 매 라운드 덮어써지며 학습이 거꾸로 갔고 (train_loss 1.09→1.91, +75%), V5 는 RESET 으로 util 을 86% 까지 복원했지만 PAPE 는 여전히 A1 보다 나쁘다. "VQ 가 잘 쓰이는 것" 과 "예측이 좋아지는 것" 은 별개였다. 이후부터는 V4/V5 run 을 각각 V4 run 2fab575c, V5 run 584cc9a6, v6 대조를 v6 R1b 5e040971 로 축약 인용한다.


§2 실패 원인 (cycle 2 critic 통과 버전)

원인은 3층으로 분해된다. cycle 1 에서 dominant 로 지목했던 "decoder capacity" 는 방향은 맞았으나 수치와 구조명이 틀렸고, cycle 2 에서 실측 근거로 정정되었다.

2.1 Dominant — Decoder capacity 붕괴 (38.6× 격차)

  • v6 R1b 의 decoder 는 Transformer 가 아니라 FC-MLP 였다. cycle 1 보고서의 "Transformer" 기술은 생성자 default 인자를 분기 로직 없이 읽은 오인이며, cycle 2 에서 MLflow params/decoder_type=fc + experiments/federated/v6_0415_fedpm_original.py:126args.decoder_type = "fc" + src/FedUnit-64D1/lib/models/decoder.py:447FCDecoderBackbone 실체로 정정되었다.
  • 실측 파라미터 수: v6 decoder 956,696 (~957K) vs v7 Conv1d×2 decoder 24,769 (~25K)38.6× 격차. Total 기준으로도 v6 ~1.13M vs v7 ~50K (20~25×).
  • 수용야 측면에서도 v6 는 (seq_in_len × d_model) = 24 × 64 = 1536 을 flatten 후 4-layer MLP 로 처리하는 전역 수용야인 반면, v7 는 kernel=3 Conv1d 만으로 5-step 수준의 로컬 수용야만 가진다.
  • 간접 증거: A1 (VQ 제거, DLinear only) 이 PAPE 47.1 에 머문다는 사실은, VQ 가 전혀 없어도 v7 infra 는 47.1 아래로 못 내려간다 는 empirical floor 이다. 즉 v6→v7 의 16pp 격차는 VQ 쪽이 아니라 decoder 쪽에서 발생한 것으로 해석하는 게 자연스럽다.

쉬운 요약: v6 는 "24시간 전체를 한 번에 보는 큰 MLP" 로 예측을 만들었는데, v7 은 "3시간짜리 작은 창만 보는 CNN" 으로 바꿔버렸다. 정보의 양이 38.6 배 차이났고, 서버가 VQ 를 아무리 정돈해도 읽어낼 decoder 가 작으면 소용이 없다.

2.2 Secondary — MemoryAlignmentServer moving-target

  • V4 의 BFS 기반 alignment 는 라운드마다 codebook 을 overwrite 한다. 그 결과:
  • codebook_alignment_sim_mean: 0.1198 → 0.0095 (92% 감소)
  • codebook_n_components: 8 → 178 (22배 증가)
  • train_loss: 1.0866 → 1.9055 (+75%, 단조 증가)
  • V5 는 RESET (dead-code replacement, threshold=2) 로 이 불안정성을 완화하여 train_loss 를 안정화 (1.08→1.15, +6%) 하고 util 을 86% 까지 올렸으나, PAPE 는 53.32 로 여전히 A1 이하. codebook utilization 과 PAPE 가 decoupled 라는 empirical 결론.
  • 쉬운 요약: V4 는 "서버가 매번 책상을 다시 정리" 해서 학생(encoder)이 어디에 뭐가 있는지 못 외웠고, V5 는 "안 쓰는 물건을 버려서" 책상은 정돈했지만 정작 시험 성적은 안 올랐다.

2.3 Tertiary (보류) — rounds=10 수렴성

  • v6 R1b 는 100 rounds 에서 best_round=23 이었다. V4/V5 smoke 는 rounds=10 이라 수렴 불충분 가능성 잔존.
  • cycle 1 은 단독 기각을 시도했으나 근거 부족 → cycle 2 에서 "보류" 로 완화. rounds=30 V4/V5 1-seed 재실행은 user 결정권에 남김 (§6 Q5 참조).

§3 중요 발견 (cycle 1/2 과정에서 새로 드러남)

3.1 v6 R1b 의 VQ 는 실질적으로 "부차적 보조 경로"

  • v6 R1b MLflow test_avg_codebook_util = 0.04063 (4.06%). 즉 256 개 코드북 중 ~10개 정도만 활성.
  • 단, VectorQuantizer (src/fed_learning/fedpm.py:112) 의 util 정의는 unique_codes / M (frequency-weighted 아님) 이므로, "10개 코드가 배치의 100% 를 cover" 와 관측상 구별 불가. cycle 1 의 "VQ 무시" 단정은 cycle 2 에서 "부차적 보조 경로" 로 완화.
  • per-household 수치로 보면 VQ 경로는 완전히 죽지 않았다: Apt6 vq_magnitude=0.467, Apt88 vq_magnitude=0.395 등. 다만 res_ratio 가 0.425~0.838 로 DLinear residual 이 예측의 다수를 차지함은 분명.
  • 논문 영향: 초록 claim "(ii) shared VQ codebook for federated pattern exchange" 의 empirical 근거는 기존 수치만으로는 약하다. track-f 결과에 따라 claim 의 재정의가 필요할 수 있음 (§8 참조).

3.2 v6 decoder 구조 정정 — Transformer → FC-MLP

  • 이번 closure 이전까지 팀 내부 정본이었던 "v6 decoder = Transformer (d_model=64, nhead=4, d_hid=256, nlayers=4)" 는 cycle 1 expert 의 단일 실수가 아니라, 생성자 호출만 보고 분기 로직을 누락한 데서 온 구조적 오인이었다. 이후 문서 (paper_draft, 발표자료 초안 등) 에 전파되었을 가능성이 있으므로 track-f 착수 전 1회 점검 권고.
  • 실측 근거: experiments/federated/v6_0415_fedpm_original.py:126 + src/FedUnit-64D1/lib/models/decoder.py:447 FCDecoderBackbone + MLflow params/decoder_type="fc".

3.3 v6 FL aggregation 교란 발견

  • v6 R1b 는 plain FedAvg 가 아니라 개인화된 aggregation 을 사용했다.
  • aggregation_strategy = cos_similarity
  • memory_fill_strategy = client_personalized
  • similarity_threshold = 0.7
  • gamma = 0.95 (EMA decay)
  • v7/v8 은 plain FedAvg weighted mean. 따라서 track-f W1/W2 가 decoder 만 복원해도 PAPE 38.40 재현은 보장되지 않는다. 이 교란은 track-f ADR-009 F9 disclosure 로 기록됨.
  • 쉬운 요약: v6 의 서버는 "비슷한 가구끼리만 지식을 섞어주는" 개인화 평균을 썼는데, v7 은 그냥 단순 평균이다. track-f 가 decoder 만 바꿔도 v6 성능이 완전히 돌아오지 않을 수 있다.

§4 채택 경로 — A안 확정 (2026-04-21)

4.1 결정

  • Primary: track-f W1 (FC-MLP decoder 복원) + W2 (축소 Transformer decoder) 를 병렬 1-seed smoke 로 진입. PAPE 낮은 variant 를 5-seed primary 로 선정.
  • Second rollback: Option d (shared linear adapter) — track-f W1/W2 모두 PAPE > 50 시 3h 내 smoke 발동.
  • Archive: v9 adapter ADR 은 별도 번호 재할당 없이 docs/archive/decisions/ADR-009_v8_to_v9_vq_redesign_archived_2026-04-21.md 로 이동. ADR-009 번호는 track-f 가 단독 계승.

4.2 근거

  1. Dominant 원인 직접 해결: track-f 는 §2.1 decoder capacity 38.6× 격차를 직접 복원하지만, Option d 는 decoder/encoder 를 그대로 두고 VQ 만 제거한다. v7 decoder bottleneck 이 real 이라면 Option d 는 PAPE 47 대에 머무를 가능성이 높다 (v9 design spec §7 line 49 자체도 "≤45 는 정직하게 어려움" 인정).
  2. 초록 claim 보존: track-f 는 VQ 경로를 유지하므로 abstract 수정 불필요. Option d 는 "shared VQ codebook" → "shared low-rank adapter" 로 downgrade 필요 → 2026-05 workshop 일정 bind 시 abstract 재작성 risk.
  3. 안전장치 보장: track-f 실패해도 3h 내 Option d 로 rollback 가능 (§6 Q6 참조).

4.3 명명 규칙 해석 (ADR 번호 경로 A)

  • expert v2 §5.1 은 경로 A (번호 유지 + archive) / 경로 B (Option d 를 ADR-010 재할당) 두 안을 제시했고, user 는 2026-04-21 에 경로 A 를 선택.
  • 결과: ADR-009 = track-f (단일 active), v9 adapter 는 docs/archive/decisions/ 로 이동. rollback 발동 시 신규 ADR 작성 필요.

§5 v8 에서 계승된 자산

track-f 및 이후 phase 에서 재사용 가능한 v8 유산.

자산 위치 상태
v7_runner.py CLI + CELL_REGISTRY (B0~V5 14 cells) experiments/federated/v7_runner.py 행동 불변 보존
V4/V5 MLflow runs (FAIL 증거) mlruns/488793251950638315/{2fab575c..., 584cc9a6...} 재실행 없음, 증거 보존
MemoryAlignmentServer + VQWithReset 코드 experiments/federated/v7_runner.py + src/fed_learning/fedpm.py track-f.3 VQ 재탐색 시 reuse 가능
Golden tensor G1~G5 pre-registration definition_hash 8be2bd2f691deed0 track-f 에 동일 적용
155+ test suite tests/ track-f 에서 +5 테스트 추가 예정
5-seed set {42, 123, 456, 789, 2024} 유지
Fail-fast threshold val ratio > 1.5, train > 3.0 유지
peak-aware loss (α=2.0, β=0.1) src/peak_analysis/v7/metrics.py 변경 없음

§6 Open Decisions (track-f 착수 전 user 결정 필요)

expert v2 §의사결정 요구 6건 중 Q2 (ADR 번호 A안) 는 2026-04-21 결정됨. 잔여 5건:

번호 질문 default 비고
Q1 track-f W1+W2 병렬 primary + Option d second rollback 분기 수용? Yes expert/critic 모두 권고
Q3 track-f aggregation 복원 범위 (decoder-only vs v6 cos_similarity+personalized 포함)? decoder-only 확장 시 workload +2~4h
Q4 2026-05 workshop 제출 bind 여부? (user 결정) bind 확정 시 Q6 "동시 병렬" 권고
Q5 V4/V5 rounds=30 1-seed 재실행 (§2.3 rounds 가설 실측)? 보류 실행 시 +30분
Q6 Option d 를 track-f 와 동시 병렬 smoke (+3h) vs 순차 rollback? 순차 Q4 bind 확정 시 동시 권고

§7 Future Direction (사용자 아이디어, track-f 보조)

2026-04-21 user 가 제안한 "VQ = HR (peak hit rate) 향상 vs PAPE (mean accuracy) 사이의 tunable trade-off 축" 재정의 가능성이 있다. 현재 v7/v8 data 에서는 trade-off 가 성립하지 않는다 (VQ cells V1~V5 모두 PAPE 와 HR 이 동시 악화). 다만 track-f 에서 decoder 를 원복한 뒤에는 codebook size sweep 등으로 Pareto frontier 가 드러날 가능성이 있다.

track-f.3 sub-phase 후보 (pending literature):

  • track-f.3a — codebook size sweep (M=64/128/256/512): user 아이디어 직접 검증
  • track-f.3b — FSQ / LFQ (codebook-free quantization)
  • track-f.3c — Gumbel-softmax VQ (soft relaxation)
  • track-f.3d — RQ-VAE / PQ (multi-stage residual, codebook 분해)

track-f.3 는 track-f.2 5-seed 통계 통과 에 sub-phase 로 편입한다. 상세 설계는 VQ 리터러처 조사 (docs/reference/vq/vq_literature_survey.md) 완료 후 결정하며, 본 closure 시점에는 "pending literature 참조" 상태이다.


§8 초록 Claim 수정 전망

현재 초록: "(i) peak-aware loss, (ii) shared VQ codebook for federated pattern exchange, (iii) lightweight on-device deployment".

시나리오 (ii) claim 처리 근거
track-f 성공 (PAPE ≤ 파일럿 min + 2pp) 유지 가능 (VQ 가 decoder 원복 상태에서 기능할 여지). 단 util 4% 해석 fact-check 필수 track-f W1/W2 VQ 경로 보존
track-f 실패 + Option d rollback "shared low-rank adapter" 로 downgrade VQ 제거, abstract 재작성 별도 workload
track-f.3 성공 (codebook sweep Pareto 발견) "VQ codebook as tunable accuracy-sensitivity operating point" 로 재정의 user 아이디어 반영
third rollback (track-f + Option d 모두 실패) (β) FL claim 전량 철회 + KD 단독 또는 (γ) empirical study 프레이밍 expert v2 §5.6.2 참조

쉬운 요약: track-f 가 성공하면 지금 초록을 그대로 쓸 수 있고, 실패하면 "VQ 공유" 를 "저차원 어댑터 공유" 로 바꿔야 한다. user 가 제안한 "HR–PAPE trade-off" 아이디어가 검증되면 오히려 claim (ii) 가 더 강력한 서술로 진화할 여지도 있다.


§9 정리 — 다음 액션

# 액션 시점 담당
T1 v8 TODO (todos/track-v8_vq_rescue.md) 를 todos/archive/ 로 이동 본 보고서 직후 orchestrator
T2 docs/reference/project_state/track_v8_vq_rescue.md status archived 로 전환 본 보고서 직후 orchestrator
T3 VQ 리터러처 survey 완료 대기 (docs/reference/vq/vq_literature_survey.md) 문헌 조사 진행 중
T4 track-f 착수 plan (§6 Q1/Q3/Q4/Q5/Q6 user 결정 후) 별도 orchestrator plan orchestrator

본 closure 보고서가 v8 관련 최종 산출물이며, 이후 v8 관련 보고서 신규 작성 없음. track-f 의 상세 설계, track-f.3 sub-phase 확정, 초록 재작성 등은 본 보고서 범위 밖이며 별도 track 에서 다룬다.


참고 — MLflow run ID / 소스 전체 인용

  • v6 R1b 원본: mlruns/628304840000878755/5e0409718fd347d085190264e43d4284
  • params/decoder_type = "fc", params/aggregation_strategy = "cos_similarity", params/memory_fill_strategy = "client_personalized", params/similarity_threshold = "0.7", params/gamma = "0.95"
  • metrics/test_avg_codebook_util = 0.04063, metrics/test_avg_pape = 38.3965, metrics/test_avg_hr = 0.2228
  • v7 V4 seed=42: mlruns/488793251950638315/2fab575cef1e470ba8016fd210e9b48f (PAPE 56.51)
  • v7 V5 seed=42: mlruns/488793251950638315/584cc9a61eba4afe808b677efd4a6c17 (PAPE 53.32)
  • 소스: experiments/federated/v6_0415_fedpm_original.py:126, 310-313, src/FedUnit-64D1/lib/models/decoder.py:447-491, src/fed_learning/fedpm.py:112, 350, experiments/federated/v7_runner.py:663, 1490

참고 — 입력 문서

  • report/version8/exp-expert/v8_failure_root_cause_and_redesign_v2.md (cycle 2 final, polish 완료)
  • report/version8/exp-critic/v8_0420_failure_analysis_review.md (cycle 1)
  • cycle 2 critic 은 독립 파일로 저장되지 않았으며 CONDITIONAL PASS + N1~N5 polish 지시는 expert v2 Changelog (line 461) 와 §6 self-check (line 380~) 에 수용 기록으로 보존됨
  • docs/decisions/ADR-008_v7_to_v8.md (v7→v8 결정 근거)
  • docs/decisions/ADR-009_v8_to_track_f_decoder_swap.md (track-f 후속 ADR)
  • docs/archive/decisions/ADR-009_v8_to_v9_vq_redesign_archived_2026-04-21.md (v9 adapter archive)
  • docs/reference/project_state/track_v8_vq_rescue.md (v8 design spec, 본 closure 로 archived)
  • docs/reference/project_state/track_f_decoder_swap.md (후속 design spec)
  • todos/track-v8_vq_rescue.md (v8 TODO, 본 closure 로 archive 이동 예정)