신경망 가지치기

편집 역사 토론
소프트웨어 수치해석 통계 마지막 수정: 2026-08-19 04:23:48

1. 개요[편집]

신경망 가지치기
Neural Network Pruning
하는 일중요도가 낮은 가중치·채널·헤드를 0으로 만들거나 아예 들어낸다
두 갈래비구조적(개별 가중치) · 구조적(채널·필터·헤드·층)
고전 기준크기 |w| · OBD(대각 헤세) · OBS(헤세 역행렬)
표준 절차학습 → 가지치기 → 재학습을 반복
유명한 가설복권 티켓 가설 (Frankle–Carbin 2019)
불편한 진실비구조적 희소성은 대개 속도로 이어지지 않는다
현실적 타협2:4 반구조 희소성 (Ampere 이후 스파스 텐서코어)

신경망 가지치기학습된 신경망에서 기여가 작은 파라미터나 구조 단위를 제거해, 정확도를 크게 잃지 않고 모형 크기와 연산량을 줄이는 압축 기법이다. 과잉 파라미터화된 망은 학습에는 유리하지만 배포에는 낭비이므로, 다 쓰고 나서 필요 없는 부분을 걷어내자는 발상이다. 아이디어 자체는 1980년대 말부터 있었고, 2015년 이후 모형이 커지면서 신경망 양자화·지식 증류와 함께 배포 파이프라인의 상비 도구가 됐다.

이 셋은 서로 직교한다. 증류는 함수를 작은 망으로 옮기고, 양자화는 수치 정밀도를 낮추고, 가지치기는 연결 자체를 없앤다. 증류가 “새 사람을 가르친다”면 가지치기는 “같은 사람의 안 쓰는 시냅스를 잘라낸다”에 가깝고, 실제로 이름과 초기 동기 모두 생물학적 시냅스 가지치기에서 왔다. 세 기법을 순서대로 겹쳐 쓰는 것이 표준 코스이며, 순서는 대체로 증류 → 가지치기 → 양자화다.

2. 무엇을 자를 것인가 — 두 축[편집]

가지치기 방법을 정리하는 가장 유용한 축은 알갱이의 크기다.

비구조적 가지치기구조적 가지치기
단위개별 가중치채널·필터·어텐션 헤드·층
결과희소 행렬(0이 흩어진 밀집 텐서)더 작은 밀집 텐서
같은 정확도에서 제거율높음 (90% 이상도 흔함)낮음 (보통 30~60%)
실제 속도 이득거의 없음 (아래 절 참고)확실. 그냥 작은 망이 됨
필요한 런타임희소 커널 또는 전용 하드웨어없음. 표준 BLAS 그대로

정확도 대 압축률 곡선만 보면 비구조적이 압도적으로 이긴다. 그런데 그 곡선은 아무도 돈을 지불하지 않는 지표를 그린 것이다. 이 어긋남이 이 분야 전체를 규정한다.

3. 중요도를 어떻게 매기는가[편집]

3.1. 크기 기반[편집]

w|w| 가 작으면 자른다. 야만적으로 단순한데 지금도 강력한 기준선이다. 층마다 별도 임계를 두는 방식(layerwise)과 전체 가중치를 한 줄로 세워 자르는 방식(global)이 있고, 후자가 층별 희소도를 자동으로 배분해 주지만 첫 층·마지막 층을 과도하게 깎는 사고가 잦아 보통 보호 목록을 둔다.

3.2. 헤세 기반 — OBD와 OBS[편집]

크기 기준의 문제는 명확하다. 작은 가중치라도 그 방향으로 손실이 가파르면 잘라선 안 된다. 손실 LL 을 수렴점 ww^\star 근처에서 2차까지 전개하면 (수렴했으므로 1차항은 0)

ΔL  12δwHδw,H=2L\Delta L \ \approx\ \tfrac{1}{2}\,\delta w^\top H\, \delta w, \qquad H = \nabla^2 L

최적 뇌 손상(Optimal Brain Damage, LeCun–Denker–Solla, 1990)은 헤세 행렬이 대각이라고 가정해 각 가중치를 0으로 보낼 때의 손실 증가를 중요도로 삼는다.

si=12hiiwi2s_i = \tfrac{1}{2} h_{ii}\, w_i^2

크기 기반은 여기서 H=IH = I 로 둔 특수 경우인 셈이다. 최적 뇌 수술(Optimal Brain Surgeon, Hassibi–Stork, 1993)은 대각 가정을 버리고, “가중치 qq 를 0으로 만들되 나머지 가중치를 최적으로 재조정한다”는 제약 최적화를 푼다. minδw12δwHδw\min_{\delta w} \frac12 \delta w^\top H \delta w subject to eqδw+wq=0e_q^\top \delta w + w_q = 0 을 라그랑주로 풀면

sq=wq22[H1]qq,δw=wq[H1]qqH1eqs_q = \frac{w_q^2}{2\,[H^{-1}]_{qq}}, \qquad \delta w = -\frac{w_q}{[H^{-1}]_{qq}}\,H^{-1} e_q

가 나온다. 즉 자른 가중치의 몫을 살아남은 가중치들이 나눠 받는다. 재학습 없이도 성능이 유지되는 이유가 이 보상 항에 있다.

당시엔 H1H^{-1} 이 파라미터 수의 제곱이라 장난감 망에서만 가능했고, 그래서 30년간 각주 취급을 받았다. 그런데 층별로 쪼개고 HH 를 입력 공분산 2XX2XX^\top 으로 근사하면 계산이 감당된다는 것이 밝혀지면서, 2022~2023년 대형 언어모형 압축의 핵심 엔진으로 부활했다 — 가지치기 쪽은 SparseGPT, 양자화 쪽은 신경망 양자화 문서의 GPTQ가 같은 OBS 갱신식을 쓴다. 30년 묵은 정리가 촐레스키 분해 한 번으로 되살아난 사례.1

3.3. 그 밖의 기준[편집]

  • 이동 기반 가지치기(movement pruning, 2020). 사전학습 모형을 미세조정할 때는 크기 기준이 오히려 나쁘다. 큰 가중치는 사전학습이 정한 값이지 지금 과제가 원하는 값이 아니기 때문이다. 그래서 값이 아니라 0에서 멀어지는 방향으로 움직인 누적량 twL/w-\sum_t w \cdot \partial L/\partial w 을 점수로 쓴다.
  • 활성값 결합 기준. Wanda(2023)는 wijxj2|w_{ij}| \cdot \lVert x_j \rVert_2 를 점수로 쓴다. 헤세 역행렬도, 가중치 갱신도 없이 SparseGPT에 근접하는데, 요점은 가중치만 보면 안 되고 그 가중치가 곱해지는 입력의 크기를 같이 봐야 한다는 것이다. 대형 언어모형의 이상치 채널 이야기와 정확히 같은 관찰이다.
  • 초기화 시점 가지치기. SNIP(2019) 등은 학습 전에 gw|g \odot w| 같은 민감도로 잘라 학습 비용까지 아끼려 한다. 다만 후속 연구에서 이 방법들이 층 안에서 어느 가중치를 자르는지에 거의 무감각하고, 사실상 층별 희소도 배분만 결정하고 있다는 비판을 받았다. 같은 층별 비율로 무작위 가지치기해도 성능이 비슷하면 그 점수 함수는 일을 안 한 것이다.

4. 반복적 가지치기와 재학습[편집]

한 번에 90%를 자르면 망가지지만, 조금 자르고 재학습하기를 반복하면 같은 최종 희소도에서 성능이 훨씬 낫다. 한(Han) 등(2015)이 이 절차를 표준화했다.

  1. 밀집 망을 정상적으로 학습한다.
  2. 임계 이하 가중치를 마스킹한다.
  3. 살아남은 가중치만 재학습한다(마스크는 고정).
  4. 2~3을 목표 희소도까지 반복한다.

AlexNet과 VGG-16에서 정확도 손실 없이 파라미터를 9배·13배 줄였고, 이어 나온 Deep Compression(2016)이 여기에 양자화와 허프만 부호화를 얹어 AlexNet을 35배 압축했다. 이 논문이 없었다면 이후 10년의 모형 압축 문헌은 꽤 달랐을 것이다.

재학습의 세부가 의외로 중요하다. 가지친 뒤 작은 학습률로 미세조정하는 것이 오랜 관행이었는데, 렌다 등(2020)은 원래 학습률 스케줄을 처음부터 다시 돌리는 학습률 되감기(learning rate rewinding)가 대체로 더 낫다고 보고했다. 가지치기 논문끼리 비교가 안 되는 이유의 상당 부분이 “재학습 예산과 스케줄이 제각각”이라는 데 있다는 지적도 같은 계열이다.2

5. 복권 티켓 가설[편집]

프랭클과 카빈(2019)의 관찰은 이렇다. 반복적 크기 기반 가지치기로 얻은 희소 마스크를 씌운 채 가중치를 원래 초기값 θ0\theta_0 로 되돌리고 다시 학습시키면, 밀집 망과 비슷한 정확도에 비슷한 반복 수로 도달한다. 반면 같은 마스크에 새 무작위 초기값을 주면 잘 안 된다. 그래서 “무작위 초기화된 밀집 망 안에는 단독으로 학습해도 원래 망에 필적하는 부분망(당첨 티켓)이 들어 있다”는 가설이 복권 티켓 가설이다. 마스크만이 아니라 마스크와 초기값의 조합이 당첨 복권이라는 것이 요점.

작은 망에서는 재현이 잘 되는데 ResNet-50급으로 키우면 초기값으로의 되돌리기가 실패한다. 처방이 되감기(rewinding)다 — θ0\theta_0 가 아니라 학습 초기 kk 스텝 지점의 가중치 θk\theta_k 로 돌린다(kk 는 전체 학습의 0.1~7% 수준). 이 수정으로 대형 망에서도 가설이 살아났고, 그 배경 설명이 선형 모드 연결성이다. 학습 초반의 잡음(데이터 순서·증강)에 대해 최종 해가 안정해지는 시점이 존재하고, 그 이후 지점으로 되감아야 티켓이 작동한다는 것.

찬물을 끼얹는 결과도 나란히 있다. 류(Liu) 등(2019)은 구조적 가지치기에서 가지친 구조를 무작위 초기화부터 충분히 학습시키면 물려받은 가중치를 미세조정한 것과 성능이 같거나 낫다고 보고했다. 즉 그 경우 가치 있는 것은 물려받은 가중치가 아니라 발견된 아키텍처이며, 가지치기는 사실상 신경망 구조 탐색이었다는 해석이다. 두 결과가 정면충돌하는 것처럼 보이지만 조건이 다르다 — 복권 티켓 쪽은 비구조적 가지치기와 제한된 학습 예산, 류 등은 구조적 가지치기와 넉넉한 재학습이다. “가지치기가 무엇을 주는가”에 대한 답이 알갱이 크기에 따라 달라진다는 것이 이 논쟁의 진짜 결론이고, 여전히 열려 있다.

6. 희소성이 속도가 되지 않는 문제[편집]

여기가 실무자가 가장 크게 데는 지점이다. 가중치의 90%를 0으로 만들었는데 추론 시간이 그대로다. 이유는 셋이다.

  • 밀집 커널은 0을 곱해도 똑같이 빠르다. 마스크만 씌운 텐서는 여전히 밀집 텐서이고, GEMM은 값을 보지 않는다. 진짜 이득을 보려면 희소행렬 포맷으로 바꿔 희소 커널을 태워야 한다.
  • 희소 포맷은 인덱스 값을 지불한다. CSR은 비영원소마다 열 인덱스를 저장하므로, INT8 가중치 하나에 32비트 인덱스가 붙으면 50% 희소는 오히려 손해다.
  • 불규칙 메모리 접근이 캐시와 SIMD를 죽인다. 밀집 GEMM은 산술 강도가 높고 벡터 유닛을 꽉 채우는데, 비정형 희소는 게더/스캐터가 지배한다. 그래서 실전에서 희소 GEMM이 밀집 GEMM을 이기려면 희소도가 대략 95~99% 이상이어야 한다는 것이 오랜 경험칙이다.

절충안이 반구조 희소성이다. NVIDIA Ampere 세대부터 들어간 2:4 희소성은 축약 축 방향으로 연속한 가중치 4개마다 최대 2개만 비영이라는 규칙을 강제한다. 패턴이 규칙적이라 인덱스가 원소당 2비트로 끝나고, 스파스 텐서코어가 이를 직접 소비해 이론상 행렬 연산 처리량이 2배가 된다. 표준 레시피는 “밀집 학습 → 2:4 마스크 적용 → 같은 하이퍼파라미터로 재학습”이다. 정확도 손실은 대체로 작지만, 50% 희소가 상한이라 비구조적 가지치기의 90%와는 애초에 다른 게임이다.

교훈을 한 줄로 요약하면 이렇다. 압축률은 논문이 정하고, 속도는 하드웨어가 정한다.3 가지치기 결과를 보고할 때 파라미터 감소율만 적고 실측 지연시간을 적지 않는 것은 검증 및 확인 관점에서 절반만 보고한 것이다.

7. 구조적 가지치기의 실제[편집]

  • 채널·필터 가지치기. 필터의 1\ell_1 노름으로 자르거나, 배치 정규화의 스케일 파라미터 γ\gamma1\ell_1 벌점을 걸어 0으로 수축한 채널을 통째로 들어내는 방식(network slimming)이 널리 쓰인다. 후자는 라쏘의 희소화 성질을 그대로 빌려 온 것이라, 학습이 끝나면 자를 채널이 이미 정해져 있다는 점이 편하다.
  • 어텐션 헤드 가지치기. 트랜스포머의 다중 헤드 중 상당수가 지워도 성능이 유지된다는 것이 2019년에 보고됐다. 층 대부분에서 헤드 하나만 남겨도 큰 손실이 없는 경우가 있는데, 헤드마다 마스크 변수를 두고 그 기울기 크기로 중요도를 재는 방식이 표준이 됐다.
  • 의존성 처리가 진짜 난관이다. 채널 하나를 지우면 다음 층의 입력 채널, 잔차 연결의 상대편, 그룹 합성곱의 그룹 크기가 전부 따라 움직인다. 잔차 블록에서는 더하기로 만나는 두 경로가 같은 채널 집합을 지워야 하므로 결합 제약이 생긴다. 실전 구현에서 정확도보다 이 그래프 의존성 추적에 시간을 더 쓰게 되는 것이 보통이다.
  • 저계수 분해와의 관계. 채널 가지치기가 행렬의 행/열을 통째로 지우는 것이라면, 저랭크 근사특이값 분해로 계수를 줄인다. 목적은 같고 제약이 다르다 — 전자는 원소를 보존하고 구조를 바꾸며, 후자는 구조를 보존하고 원소를 바꾼다.

8. 실무 체크리스트[편집]

  • 먼저 구조적으로, 그다음 비구조적을 검토한다. 배포 대상이 일반 GPU/CPU면 비구조적 가지치기의 기대 이득은 대체로 0이다. 2:4를 지원하는 하드웨어가 확실할 때만 반구조를 고려한다.
  • 희소도 목표를 층별로 균일하게 주지 않는다. 첫 합성곱, 분류기 마지막 층, 임베딩은 민감하다. 파라미터의 대부분이 완전연결층에 있고 연산의 대부분이 합성곱층에 있다는 비대칭도 기억할 것 — 파라미터를 줄이는 것과 FLOP을 줄이는 것은 다른 목표다.
  • 평가는 평균이 아니라 꼬리로 한다. 전체 정확도가 유지되면서 희귀 클래스·소수 집단 성능만 무너지는 현상이 반복 보고됐다. 압축은 다수 표본이 지지하지 않는 결정경계부터 지운다.
  • 가지치기는 정규화가 아니다. 드롭아웃은 학습 중 무작위로 껐다 켜서 과적합을 막는 기법이고, 가지치기는 배포용으로 영구히 지우는 기법이다. 부수적으로 정규화 효과가 나타날 수는 있지만 그걸 목적으로 쓰는 건 도구를 잘못 든 것이다.

9. 관련 문서[편집]

10. Footnotes[편집]

  1. OBD·OBS 원논문의 실험 규모는 가중치 수백~수천 개짜리 망이다. 저자들이 “언젠가 큰 망에도 쓸 수 있을 것”이라고 적어 둔 문장이 30년 뒤 1750억 파라미터에서 실현됐는데, 그사이에 바뀐 것은 이론이 아니라 층별로 문제를 쪼개는 요령과 GPU 메모리였다. 논문을 오래 묵히면 가끔 이런 일이 생긴다.

  2. 가지치기 문헌의 비교 불가능성은 악명이 높아서, “우리 방법이 최신 기법 A를 이겼다”의 상당수가 재학습 에폭을 더 준 결과라는 지적이 여러 번 나왔다. 압축률·정확도·재학습 예산·실측 지연시간 네 개를 같이 적지 않은 표는 일단 의심하고 보는 것이 정신 건강에 좋다.

  3. 그래서 가지치기 발표를 들을 때 가장 효율적인 질문은 “몇 퍼센트 줄이셨나요”가 아니라 “그래서 몇 밀리초 빨라졌나요”다. 후자에 답이 없으면 앞의 숫자는 파일 크기 이야기이고, 파일 크기가 병목인 배포 환경도 분명 있지만 대개는 아니다.