241224 TIL #571 AI Tech #104 Pruning - 1

김춘복·3일 전
0

TIL : Today I Learned

목록 보기
573/575

Today I Learned

오늘은 모델 경량화 방법 중 하나인 pruning에 대해 공부했다.


Pruning (가지치기)

딥러닝 모델의 경량화를 위해 중요도가 낮은 파라미터를 제거하는 기법

이미지 출처 : Learning both Weights and Connections for Efficient Neural Networks (2015)

  • 뉴런(노드)이나 시냅스(연결, 간선)을 제거해서 모델의 size와 cost를 줄인다.

  • 일반적으로는 경량화 정도와 성능은 반비례하지만,
    dropout 같은 효과를 보이면서 가끔 일반화 성능이 올라가는 경우도 있음.

  • 과정
    초기 모델에서 제거 가능한 파라미터를 판별해 제거한 뒤, fine-tuning을 거쳐 최종 평가를 진행

  • 목적
    노드, 연결 제거 -> 모델 크기 감소 -> 메모리 사용량 최적화
    노드, 연결 제거 -> 연산량 감소 -> 추론 속도 향상

복권 가설

랜덤하게 초기화된 밀집 신경망 내에는 원래 네트워크와 비슷한 성능을 달성할 수 있는 작은 서브네트워크(winning ticket)가 존재한다는 것이 핵심 가설

  • 네트워크를 학습시킨 후 가중치의 크기가 작은 연결을 제거한 뒤 초기 가중치로 되돌린 후 다시 학습

  • 네트워크 압축과 효율적인 학습이 가능함


분류

1. Structure (구조적 관점)

  • Structured
    필터, 채널, 뉴런과 같은 전체 구조적 단위를 제거해 실제적인 속도 향상과 압축을 달성.
    다만 구현 자체가 안될 수도 있음.

  • Unstructured
    개별 파라미터 단위로 0으로 바꾸는 방식으로 제거해 모델 구조 변경이 없어 구현도 쉽고 유연성은 좋지만 실제 성능 향상은 미미

2. Scoring (점수 기반 방식)

  • 덜 중요한 파라미터/레이어를 제거 하는데 그 기준이 점수 기반.
    파라미터의 절대값이나 레이어별 L2L^2-norm 이 작은 레이어를 제거하는 방법을 쓴다.

  • global : 그냥 모델 전체에서 점수가 낮은 파라미터를 제거
    local : 단위별(레이어별)로 그 안에서만 비교해 점수가 낮은 파라미터를 제거

3. Scheduling

  • one-shot : pruning을 딱 한번 진행하고, 그 후에 파인튜닝도 한번만 진행
    빠르게 할 수 있지만 성능이 불안정하다.

  • recursive : pruning과 파인튜닝을 조금씩 여러번 반복해서 진행
    안정적인 성능이 따라오지만 시간이 오래걸린다.

4. Initialization

  • weight-preserving : pruning 직후 파인튜닝을 그대로 진행
    성능이 불안하지만 학습 속도가 빠르다.

  • weight-reinitializing(rewind) : pruning 후 남은 파라미터를 랜덤으로 초기화 후 파인튜닝 진행
    성능이 안정적이지만 오래걸린다.

IMP (Iterative Magnitude Pruing)

  • 가장 기본적인 Pruning 방법으로 Unstructured, Global(절대값), Recursive, Rewind 방식

  • 초기 모델을 학습하고, 하위 몇%의 파라미터를 절대값 기준으로 global하게 제거한 뒤,
    rewind로 중요도가 낮은 파라미터부터 반복적으로 조금씩 제거하고 fine-tuning 하는 기법

profile
Backend Dev / Data Engineer

0개의 댓글