Skip to content

[FEATURE] neuron Phase 16a — RigL/SET-style edge regrow (constant sparsity DST) #76

Description

@juhy0987

배경

Phase 16 메인 이슈 #75 의 sub-issue (1/2). Phase 15 의 static prune 을 확장하여 iterative prune + regrow 로 학습 중 topology 가 진화하는 DST (Dynamic Sparse Training) 구현.

목표

  1. regrow 메커니즘 — pruned edge 중 일부를 다시 살리기 (mask=0 → mask=1). 두 변형:
    • RigL (Evci 2020): 가장 높은 |gradient| 위치 우선 regrow
    • SET (Mocanu 2018): random regrow (baseline)
  2. constant sparsity 유지 — prune step + regrow step 동량 → 총 sparsity 고정
  3. gradient signal 활용 — pruned edge 의 gradient 가 dense weight 처럼 계산되어야 함 (mask=0 인 위치도 backward 통과 시 grad 측정 가능)
  4. sweep: Phase 15 dense baseline + 50% prune (static) + 50% prune+regrow (DST RigL) + 50% prune+regrow (DST SET) 비교

설계 결정

  • edge_mask 는 그대로 — buffer 로 유지, prune/regrow 가 mask 갱신
  • regrow scoring: RigL 의 경우 dense gradient 측정 필요 → forward 시 mask 적용하되 backward 는 dense gradient 가 흐르도록 (mask 의 gradient blocking 우회)
  • gradient measurement 한정: regrow score 측정 시점에만 dense gradient 측정 (학습 중에는 정상 mask gradient)

작업 항목

  • HybridGraphLinear 확장:
    • regrow_by_gradient(n, grad_metric_tensor): 상위 n 개 pruned 위치 un-mask
    • regrow_random(n): random n 개 pruned 위치 un-mask
    • regrow 시 신규 활성화 edge 의 weight 초기화 정책 (0 또는 작은 random)
  • gradient measurement helper — pruned 위치도 grad 흐르도록 single-step dense gradient 측정
  • tests:
    • regrow 정확성 (정확히 n 개 살아남, 기존 alive 변경 없음)
    • regrow 후 forward / backward 가 새 edge 에서 정상 작동
    • constant sparsity 유지 (prune + regrow 동량)
  • demo 확장:
    • TrainConfig.regrow_at_steps / regrow_fraction / regrow_method (RigL / SET)
    • train loop: prune step 직후 같은 수만큼 regrow
  • 노트북 15-phase16a-rigl-set-regrow.ipynb:
    • 4 mode × 2 seed: dense / static-prune-50% / RigL-DST-50% / SET-DST-50%
    • 자동 verdict: constant sparsity / RigL ≥ static / RigL ≥ SET / all-finite

완료 조건

  • 202 → ~220+ tests, all green
  • coverage ≥ 70%
  • 노트북 sweep 정상 실행, RigL vs SET vs static 비교 가능

관련

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions