배경
Phase 16 메인 이슈 #75 의 sub-issue (2/2). Phase 15 의 static prune 의 반대 방향 — 학습 중 신규 capacity 추가 + function preservation. Phase 16a (#76) 와 보완적: 16a 는 within-shape DST, 16b 는 cross-shape expansion.
목표
- Net2Net-style FFN grow — 학습 중
ffn_dim 확장 (예: 256 → 384). 신규 group 추가.
- function preservation — 확장 직후 forward output 이 확장 전과 정확히 동일 (atol=1e-5)
- 신규 edge 의 초기화 전략:
- Net2WiderNet: 기존 unit 의 random duplication + weight 분할
- 또는 신규 edge weight=0 으로 시작 (gradient 가 깨움)
- sweep: small-baseline (작게 시작 + 학습 끝까지 작은 상태) vs grown (작게 시작 + 중간에 확장) vs large-baseline (처음부터 크게)
설계 결정
- 확장 대상: FFN 의
ffn_dim 만 (가장 단순). hidden_dim 확장은 더 복잡 (downstream layer 모두 영향).
- 확장 시점: max_steps/2 (Phase 15 의 prune 시점과 동일)
- 확장 방법:
HybridGraphLinear.grow_out(n_new_groups): 신규 G_out group 추가, weight 0 init
HybridGraphLinear.grow_in(n_new_groups): 신규 G_in group 추가, weight 0 init
- downstream layer 도 짝맞춰 grow_in 필요 (fc1 grow_out + fc2 grow_in 동시)
- function preservation 보장: 신규 edge 의 outgoing weight (다음 layer 로 가는) 가 0 이면 forward 영향 0 → 함수 동치
작업 항목
완료 조건
- 220 → ~240+ tests, all green
- coverage ≥ 70%
- 노트북 sweep 정상 실행, growing vs static 비교
관련
배경
Phase 16 메인 이슈 #75 의 sub-issue (2/2). Phase 15 의 static prune 의 반대 방향 — 학습 중 신규 capacity 추가 + function preservation. Phase 16a (#76) 와 보완적: 16a 는 within-shape DST, 16b 는 cross-shape expansion.
목표
ffn_dim확장 (예: 256 → 384). 신규 group 추가.설계 결정
ffn_dim만 (가장 단순). hidden_dim 확장은 더 복잡 (downstream layer 모두 영향).HybridGraphLinear.grow_out(n_new_groups): 신규 G_out group 추가, weight 0 initHybridGraphLinear.grow_in(n_new_groups): 신규 G_in group 추가, weight 0 init작업 항목
HybridGraphLinear확장:grow_out(n_new): G_out 차원 확장 (신규 row 의 weight=0, adj=1, mask=1)grow_in(n_new): G_in 차원 확장 (신규 column)in_features/out_features/n_groups_*갱신TrainConfig.grow_at_step/grow_ffn_dim_to(target ffn_dim)16-phase16b-net2net-grow.ipynb:완료 조건
관련
docs/papers/computation-graph/2016-net2net-chen.md(Net2Net 원논문)docs/papers/computation-graph/2023-ligo-wang.md(LiGO, modern 형태)docs/papers/energy-based/2006-dbn-hinton.md(DBN layer-wise growth historical)