실험6 설계: FeDPM Codebook MVP — 연합학습 가능성 + 피크 성능 확인¶
날짜: 2026-04-15 담당: lab-leader Status: Planned 참고: todos/track-d_codebook_mvp.md, FeDPM 논문(arXiv 2604.04475v1)
목표¶
두 가지 핵심 질문에 최단 경로로 답한다.
- 연합학습이 동일 도메인(에너지 가구)에서 동작하는가? — FeDPM codebook 교환이 개별 학습(B0) 및 기본 FL(B1) 대비 MSE 이점을 보이는가
- apt별 Peak 예측 성능(PAPE)이 향상되는가? — Peak-Weighted Loss(P1)와 Residual Path(R1)의 순차적 효과
가설¶
| ID | 가설 | 검증 기준 |
|---|---|---|
| H6-1 | Vanilla FeDPM(V1)은 FedAvg+DLinear(B1)과 동등하거나 낮은 MSE를 달성한다 | V1 mean MSE ≤ B1 mean MSE |
| H6-2 | Peak-Weighted Loss(P1)는 V1 대비 mean PAPE를 낮춘다 | P1 mean PAPE < V1 mean PAPE |
| H6-3 | 로컬 Residual Path(R1) 추가 시 Phase 2 최선 대비 PAPE가 추가로 낮아진다 | R1 mean PAPE < P2_best mean PAPE |
데이터 설정¶
| 항목 | 값 | 근거 |
|---|---|---|
| 데이터 | EC50 중 5가구 (Apt6, Apt15, Apt30, Apt51, Apt88) | Phase 2 A1 baseline과 동일 → 직접 비교 가능 |
| 각 가구 = 1 client | 5 clients | MVP 규모로 충분 |
| seq_len | 96 | FeDPM 기본값, 기존 실험 통일 |
| pred_len | 24 | 기존 실험 통일 |
| Frequency | 1 hour | EC50 |
| Channel | 1 (단변량) | FeDPM channel-independent 전략 그대로 적용 |
| Train/val/test split | Phase 2 A1과 동일 기준 | 직접 비교를 위한 선결 조건 |
FeDPM 하이퍼파라미터¶
| 항목 | 논문 값 | MVP 값 | 근거 |
|---|---|---|---|
| Memory size M | 256 | 64 | MVP 축소. 5가구로 codebook이 작아도 됨 |
| Prototype dim D | 64 | 64 | 유지 |
| Patch length S_n | 4 | 4 | seq_len=96 → 24 patches |
| Patch stride | 4 | 4 | 논문 기본 |
| Shared ratio γ | 0.95 | 0.8 | 동일 도메인이므로 shared 비율 약간 낮춰 개인화 여지 확보 |
| Similarity threshold δ | 0.7 | 0.7 | 유지 (실험 전 확인 요망) |
| Commitment β | 0.25 | 0.25 | 유지 |
| Optimizer | Adam | Adam | — |
| Learning rate | 1e-5 | 1e-4 | 경량 모델 상향 (이상 시 1e-5로 하향) |
| Local epochs E | 5 | 5 | 유지 |
| FL rounds T | 100 | 30 | MVP 축소. early stopping patience=5 |
| Batch size | 24 | 32 | 기존 실험 통일 |
Encoder 선택 근거¶
FeDPM Table 5 encoder ablation (Electricity 데이터셋):
| Encoder | MSE | 선택 |
|---|---|---|
| Transformer | 0.209 | — |
| CNN | 0.220 | MVP 선택 |
| RNN | 0.221 | — |
| FC | 0.842 | 부적합 |
CNN encoder: Transformer 대비 소폭 성능 하락이나 경량. FC는 에너지 도메인에서 +303%로 부적합.
추정 파라미터: - Patch projection: ~320 - CNN Encoder 2-layer Conv1d: ~25K - VQ Codebook (64×64): 4,096 - CNN Decoder 2-layer Conv1d: ~25K - Linear head: ~1.5K - Total: ~56K (코드 확인 후 실제 값으로 업데이트)
실험 조건 매트릭스¶
Phase 1: FL 동작 확인 (B0, B1, V1)¶
| Run ID | 설정 | 목적 | B0 MSE | B0 PAPE |
|---|---|---|---|---|
| B0 | Individual DLinear per apt | Phase 2 A1 baseline (이미 확보) | 0.5223 (mean) | 42.55% (mean) |
| B1 | FedAvg + DLinear (5 clients) | 기본 FL 비교 대상 | — | — |
| V1 | Vanilla FeDPM (CNN+VQ+alignment) | 핵심: FL codebook 동작 여부 | — | — |
Loss (V1): L = SmoothL1(ŷ, y) + β·||Z - sg(Ẑ)||² + ||sg(Z) - Ẑ||²
Phase 2: Peak-Weighted Loss 효과 (P1)¶
| Run ID | Loss | 비고 |
|---|---|---|
| V1 | SmoothL1 원본 | Phase 1 결과 재사용 |
| P1 | Peak-Weighted SmoothL1 | w_t = 1 + α·(x_t / max(x)), α=2.0 |
Phase 3: Residual Path 추가 (R1)¶
| Run ID | 구성 | Residual 공유 |
|---|---|---|
| R1 | Phase 2 최선 + Residual MLP | 로컬 (공유 안 함) |
Residual MLP: MLP(96→48→24), ~5K params. 로컬 유지 → 개인화 + privacy 보호.
전체 흐름 및 분기¶
Phase 1: B0 (기확보) / B1 + V1 실행
│
├─ FAIL: V1 mean MSE > B1 mean MSE
│ → FeDPM 동일 도메인 부적합 판정
│ → track-d 종료. 패러다임 A+E 전환 (lab-leader 결정)
│
├─ SUB-FAIL: Codebook utilization < 30%
│ → M=64 → M=32 축소 재실험 (V1 재실행)
│
└─ PASS: V1 mean MSE ≤ B1 mean MSE
↓
Phase 2: V1 vs P1 (Peak-Weighted Loss)
│
├─ FAIL: P1 mean PAPE ≥ V1 mean PAPE
│ → Peak weighting 무효. V1이 최종
│ → Phase 3 생략하고 보고서 단계로
│
└─ PASS: P1 mean PAPE < V1 mean PAPE
↓
Phase 3: P1 + Residual Path → R1
│
├─ FAIL: R1 mean PAPE ≥ P1 mean PAPE
│ → Residual 무효. P1이 최종
│
└─ PASS: R1이 최종
↓
exp-critic 리뷰
태스크 분해 및 담당¶
T6-0. 실험 착수 전 확인 (exp-expert) — 선결 조건¶
- FeDPM 코드 접근 확인:
anonymous.4open.science/r/FedUnit-64D1 - 코드에서 CNN encoder 정확한 구조 및 파라미터 수 확인 (추정값 업데이트)
- EC50 데이터 5가구 train/val/test split 방식 확인 (Phase 2 A1과 동일 기준인지)
- δ=0.7 threshold 동일 도메인 적절성 확인 (대부분 연결될 경우 γ=0.8 조정 여부)
T6-1. FeDPM 코드 포팅 및 데이터 연동 (engineer)¶
- 파일명:
experiments/distillation/v6_0415_fedpm_mvp.py - 내용:
- FeDPM 원본 코드(CNN encoder + VQ codebook + Memory Alignment) 포팅
- EC50 5가구 데이터 로더 연동 (기존 DataLoader 재사용 우선)
- FedAvg+DLinear baseline (B1) 구현
- MLflow 로깅: run_id, apt, MSE, MAE, PAPE, codebook_utilization 기록
- config.py에 하이퍼파라미터 상수 정의
- 출력:
outputs/fedpm_mvp/ - 선결 조건: T6-0 완료
T6-2. Peak-Weighted Loss + Residual Path 구현 (engineer)¶
- 파일명:
experiments/distillation/v6_0415_fedpm_peak.py(또는 T6-1 스크립트 내 추가 옵션) - 내용:
peak_weighted_smooth_l1(pred, target, alpha=2.0)구현- Residual MLP(96→48→24) 모듈 구현 (로컬, FL 비공유)
- Phase 2(P1), Phase 3(R1) CLI 옵션으로 제어 가능하게
- 선결 조건: T6-1 완료 (VQ 파이프라인 동작 확인 후)
T6-3. pytest 테스트 작성 (engineer)¶
- 파일명:
tests/test_fedpm_mvp.py - 커버리지:
- CNN encoder forward pass 형상 검증 (B, 24, D) 출력
- VQ codebook lookup 정상 작동 (commitment loss ≥ 0)
peak_weighted_smooth_l1: 피크 시점 가중치 > 비피크 시점 가중치 검증- Residual Path:
|Y_r|비어있지 않음,Y_q + Y_r형상 일치 - 선결 조건: T6-1 + T6-2 완료
T6-4. Phase 1 실험 실행 — B1 + V1 (exp-expert)¶
- 실행:
uv run python experiments/distillation/v6_0415_fedpm_mvp.py --phase 1 - 기록 항목: apt별 MSE, MAE, PAPE, codebook_utilization (V1만)
- 이상 시: PAPE > 80% 또는 NaN → 해당 apt 단독 재실행 후 원인 분석
- 선결 조건: T6-1 + T6-3 완료 (pytest 통과)
T6-5. Phase 1 자기 평가 및 Gate 판정 (exp-expert)¶
- H6-1 판정: V1 mean MSE vs B1 mean MSE
- Codebook utilization 확인 (< 30%이면 M=32 재실험)
- 선결 조건: T6-4 완료
T6-6. Phase 2 실험 실행 — P1 (exp-expert)¶
- 실행:
uv run python experiments/distillation/v6_0415_fedpm_peak.py --phase 2 - 선결 조건: T6-5 PASS + T6-2 완료
T6-7. Phase 3 실험 실행 — R1 (exp-expert)¶
- 실행:
uv run python experiments/distillation/v6_0415_fedpm_peak.py --phase 3 - 분석:
|Y_r|피크 시점 vs 비피크 시점 크기 비교 - 선결 조건: T6-6 완료
T6-8. 전체 결과 자기 평가 (exp-expert)¶
- H6-1/H6-2/H6-3 최종 판정
- 보고 테이블 완성:
| Apt | B0 MSE | B0 PAPE | B1 MSE | B1 PAPE | V1 MSE | V1 PAPE | P1 PAPE | R1 PAPE |
|-------|--------|---------|--------|---------|--------|---------|---------|---------|
| Apt6 | 0.776 | 40.96 | | | | | | |
| Apt15 | 0.154 | 38.25 | | | | | | |
| Apt30 | 0.089 | 41.86 | | | | | | |
| Apt51 | 0.683 | 46.89 | | | | | | |
| Apt88 | 0.911 | 44.80 | | | | | | |
| Mean | 0.522 | 42.55 | | | | | | |
- 체크리스트:
- PAPE 해석 방향 확인 (낮을수록 좋음)
- V1 codebook utilization 수치 기록
- Phase 분기 결과 및 최종 채택 모델 명시
- Residual 분석:
|Y_r|피크 보정 여부 - 선결 조건: T6-7 (또는 최종 통과 Phase) 완료
T6-9. exp-critic 리뷰¶
- 검토 항목:
- B0와 B1 비교 공정성 (동일 split 여부)
- V1 codebook utilization 해석 타당성
- Peak-Weighted Loss α=2.0 선택 근거 (임의값 여부)
- Residual Path 로컬 유지 결정의 privacy 주장 타당성
- n=5 가구로 결론 일반화 한계 명시 여부
- 선결 조건: T6-8 완료
T6-10. 실험 보고서 작성 (reporter)¶
- 파일명:
report/exp-expert/v6_0415_exp6_fedpm_mvp_report.md - 선결 조건: T6-9 통과
의존성 그래프¶
T6-0 (exp-expert: 착수 전 확인)
│
├─→ T6-1 (engineer: FeDPM 포팅) ──────────────────────┐
│ │
└─→ (T6-2는 T6-1 완료 후) T6-2 (engineer: Peak+Residual) ─┐
│
T6-1 + T6-2 완료 → T6-3 (engineer: pytest) │
│ │
↓ │
T6-4 (exp-expert: Phase 1 실행) ◄┘
│
T6-5 (exp-expert: Gate 판정)
│ PASS
T6-6 (exp-expert: Phase 2)
│ PASS
T6-7 (exp-expert: Phase 3)
│
T6-8 (exp-expert: 자기 평가)
│
T6-9 (exp-critic: 리뷰)
│ 통과
T6-10 (reporter: 보고서)
병렬 가능: T6-1과 T6-0 확인 작업 동시 진행 가능.
타임라인¶
| 일자 | 태스크 | 예상 소요 |
|---|---|---|
| 2026-04-15 AM | T6-0: 코드/데이터 확인 | 1~2시간 |
| 2026-04-15 PM | T6-1 + T6-2 병렬 구현 | 3~4시간 |
| 2026-04-15 PM | T6-3: pytest | 1시간 |
| 2026-04-15 ~ 16 | T6-4~T6-7: 실험 실행 | 8~16시간 (GPU 30 rounds × 5 clients × 5 epochs) |
| 2026-04-16 | T6-8~T6-10: 평가 + 리뷰 + 보고서 | 2~3시간 |
| 총 예상 | 1~2일 |
리스크 관리¶
| 리스크 | 영향 태스크 | 대응 |
|---|---|---|
| FeDPM 코드 접근 불가 (익명 링크 만료) | T6-0, T6-1 | 논문 Algorithm 섹션 기반 직접 구현. CNN encoder는 이미 추정 구조 있음 |
| Codebook utilization < 30% (동일 도메인 과도한 공유) | T6-5 | M=64 → M=32 축소 재실험. δ=0.7 → 0.5 낮춰 diversity 확보 |
| V1 MSE > B1 MSE (FeDPM 동일 도메인 부적합) | T6-5 | track-d 종료 판정. 패러다임 A(Chronos KD) + E(개인화 FL) 전환 |
| α=2.0 Peak-Weighted Loss 과도한 피크 집중으로 MSE 악화 | T6-6 | α=1.0 보조 실험 추가 후 선택 |
| Residual Path가 VQ path를 무시하고 전체 예측 담당 | T6-7 | |Y_q| vs |Y_r| 크기 비교 로그 추가 의무화 |
| n=5 가구로 통계적 일반화 불가 | T6-9 | exp-critic에서 한계 명시 강제. 논문 contribution은 FL 메커니즘 검증에 한정 |
Phase 4 (별도, MVP 범위 외)¶
Phase 1~3 결과가 긍정적이면 다음 세션에서 설계:
- Chronos-Bolt frozen inference로 soft target 사전 생성 (인프라 기확보)
- FeDPM loss에 + λ_kd · MSE(ŷ, y_chronos) 추가
- FeDPM 메커니즘과 독립 평가
다음 세션 착수 순서¶
- T6-0 (exp-expert): FeDPM 코드 접근 및 CNN encoder 구조 확인
- T6-1 + T6-0 병렬: engineer FeDPM 포팅 착수 (T6-0 확인 결과 반영)
- T6-1 완료 → T6-2 engineer Peak+Residual 구현
- T6-1 + T6-2 완료 → T6-3 pytest 실행 (모두 통과해야 T6-4 진행)
- T6-4 exp-expert Phase 1 실행 → T6-5 Gate 판정