Pruning 이란 무엇인가??
Pruning은 신경망 모델에서 노드(뉴런)와 연결(시냅스)을 제거하여 모델의 크기를 줄이고 계산 비용을 절감하기 위한 기법이다. 이를 통해 모델의 효율성을 높이고 실행 환경에 맞는 경량화를 실현할 수 있다.
위의 그림에서 보면,
뉴런, 시냅스의 큰 단위를 제거해서 Pruning 을 할 수도 있고,
시냅스을 제거해서 모델을 줄여 사용 할 수 있다.
Pruning 진행과정
- 초기 모델에서 파라미터 저장
초기 모델에서 각 파라미터의 값을 저장한다.
모든 파라미터는 모델 성능에 기여도를 가지며, 어떤 것이 중요한지 판단할 준비를 한다. - 제거 가능한 파라미터 판별
중요도가 낮거나 성능에 큰 영향을 주지 않는 파라미터를 판별한다.
판별된 파라미터는 제거(Prune) 대상이 된다. (빨간색 박스 부분) - 파라미터 제거(Prune)
중요도가 낮은 파라미터를 제거한다.
제거된 파라미터는 값이 0으로 대체되며, 새로운 모델이 생성된다.
이 단계에서 성능이 감소할 수 있다. - Fine-Tuning(미세 조정)
파라미터 제거로 인한 성능 저하를 회복하기 위해 모델을 다시 학습한다.
이를 통해 모델 성능을 초기 상태와 유사하게 만든다. - 최종 모델 평가 및 비교
Fine-tuning된 모델과 초기 모델을 비교하여 성능 차이를 분석한다.
이후 최적화된 모델을 배포(Deploy)한다.
Pruning 은 딥러닝 모델을 더 작고 효율적인 구조로 변환하기 위한 기술이다.
Pruning 을 통해 얻을 수 있는 주요 이점은 2가지가 있다.
- 메모리 사용 절감
파라미터 수를 줄임으로써 메모리 사용량을 줄인다.
메모리는 에너지를 많이 소모하므로, 메모리 절약은 곧 에너지 절약으로 이어진다. - 연산 속도 가속
모델의 복잡도를 줄여 계산량을 감소시킴으로써 속도를 높인다.
이는 특히 실시간 추론이 필요한 환경에서 중요하다.
특히 메모리! 즉, 파라미터 수를 줄이는게 좋다
왜냐면 아래의 그림처럼 DRAM는 에너지가 많이 소모되기 때문이다.
그림에서 볼 수 있듯이, DRAM Memory는 다른 연산에 비해 에너지 소모가 매우 크다.
왜냐하면 DRAM 은 다른 연산에 비해 에너지 소모가 매우 크다. DRAM이 CPU/GPU와 물리적으로 멀리 떨어져 있기 때문에 데이터를 이동시키는 과정에서 많은 에너지가 소모되기 때문이다.
반면, MULT 연산은 CPU나 GPU 내부의 레지스터(Register) 또는 캐시(SRAM)에 있는 데이터를 바로 사용하여 연산하므로, 에너지 소비가 훨씬 적다.
Pruning 을 통해 중요하지 않은 가중치(값이 작거나 성능에 크게 영향을 미치지 않는 값)를 제거하면, 모델의 크기를 줄이고 연산량을 감소시킬 수 있다. 제거된 가중치는 "0"으로 대체되므로 DRAM에서 데이터를 읽을 필요가 줄어들기 때문이다.
간단한 예시 통한 이해
\( a_3 \) = 0.01 인 가중치를 살펴보자.
가중치 \( a_3 \) 는 값이 매우 작아, 이를 제거하더라도 전체 결과 y 에 큰 영향을 미치지 않는다.
즉, 중요도가 낮은 가중치를 제거해도 모델의 성능은 크게 바뀌지 않는다.
만약 input3 처럼 출력값이 크게 나와도, 모델 전체에서 보면 영향이 미미한 부분이라면 크게 변화가 없을 것이다.
Pruning은 이처럼 중요하지 않은 가중치나 뉴런을 제거하여 모델의 크기와 계산량을 줄이는 기법이다.
Pruning과 L1/L2 정규화의 관계
위 그래프는 프루닝을 통해 파라미터의 90%를 제거했음에도, 모델의 정확도가 크게 손실되지 않는 사례를 보여준다. 이 과정에서 L1/L2 정규화와 재학습(Retrain)이 중요한 역할을 한다. 아래에서 이를 하나씩 설명하겠다.
1) L1/L2 정규화란 무엇인가?
- L1 정규화 (L1 Regularization)
- L1 정규화는 손실 함수에 가중치 값의 절대값의 합을 추가하여 큰 가중치를 억제한다.
- L1 정규화는 가중치 값을 0에 가깝게 만들고, 희소성을 증가시키는 특징이 있다.
→ 이는 프루닝 시 불필요한 가중치를 쉽게 제거할 수 있도록 도움을 준다.
- L2 정규화 (L2 Regularization)
- L2 정규화는 손실 함수에 가중치 값의 제곱합을 추가하여 가중치가 지나치게 커지는 것을 방지한다.
- L2 정규화는 작은 값의 가중치를 선호하므로, 가중치 간의 균형을 유지한다.
2) L1/L2 정규화 없이 재학습(W/O Retrain)
- L1 정규화 없이 재학습(L1 regularization w/o retrain):
정확도가 빠르게 떨어진다.
→ 이는 제거된 파라미터에 의존성이 높은 경우, 재학습 없이 모델이 성능을 유지하기 어려움을 나타낸다. - L2 정규화 없이 재학습(L2 regularization w/o retrain):
정확도 손실이 더 심각하다.
→ L2 정규화는 가중치의 균형을 유지하지만, 재학습이 없을 경우 프루닝 후 손실이 커질 수 있다.
3) L1/L2 정규화와 재학습(W/ Retrain)
- L1 정규화와 재학습(L1 regularization w/ retrain):
재학습이 포함되면서 제거된 가중치의 공백을 효과적으로 메운다.
→ 따라서 정확도가 유지되며, 희소성을 활용해 성능 손실을 최소화한다. - L2 정규화와 재학습(L2 regularization w/ retrain):
L2 정규화와 반복적인 Pruning/재학습을 통해, 파라미터의 90%를 제거해도 정확도 손실이 거의 없다.
→ 이는 L2 정규화가 가중치를 균일하게 줄이고, 드롭아웃(Dropout)처럼 과적합을 방지하는 역할을 하기 때문이다.
L2 정규화는 Drop-out(연결 끊는것)처럼 과적합을 방지하고, 모델의 일반화 성능을 높이는 데 효과적이다.
Pruning 대표적인 논문
복권 가설(Lottery Ticket Hypothesis, LTH)은 Pruning과 관련된 대표적인 논문이다. 복권 가설은 딥러닝 모델의 Pruning 에서 중요한 이론적 기반을 제공하며, 프루닝을 효과적으로 활용하는 데 있어 큰 영향을 끼친 논문으로 평가받는다.
복권 가설은
신경망 모델에서 일부 파라미터(가중치)를 잘 선택하면, 원래 모델과 동일한 성능을 유지하면서도 모델 크기를 대폭 줄일 수 있다. 이는 성공적인 프루닝이 가능하다는 것을 이론적으로 뒷받침하는 가설이다.
복권 가설의 핵심 아이디어
- 초기화된 네트워크(Full Network)를 학습
초기 모델()을 학습하여 최적의 가중치 ()을 찾는다. - Pruning 을 통해 일부 파라미터 제거
학습된 네트워크에서 성능에 크게 영향을 미치지 않는 파라미터를 제거한다.
이때 불필요한 시냅스와 뉴런이 제거되며, 네트워크는 더 작은 구조로 변환된다. - 프루닝된 네트워크로 재초기화
초기 가중치()로 네트워크를 다시 초기화한다. - 재학습
프루닝된 네트워크로 다시 학습하면, 원래의 큰 네트워크와 거의 동일한 성능을 달성할 수 있다.
이 과정을 반복하여, 모델의 크기를 줄이고 성능을 유지하는 최적의 서브네트워크를 찾아낼 수 있다. 이 최적의 서브 네트워크를 당첨 복권(Winning Ticket)"이라고 부른다.
간단하게 말하면, (숫자는 그림번호)
초기에 학습 진행한 A(2) 모델을
Pruning 을 해서 B 모델(3)로 만들고
B 모델을 다시 학습해서 C(4) 모델을 만들어서
그것을 다시 재학습해서 D(5) 모델을 만드는 것이다.
초기 A 모델과 D모델에 차이가 없다는게 이 논문의 요점이다.
여기까지 Pruning 에 대한 개념에 대해서 살펴보았다.
다음에는 Pruning 방법 4가지에 대해서 작성하겠다.
Structure, Scroing, Sceduling, Initialzation 이다.
감사합니다.
끝.
'딥러닝 (Deep Learning) > [04] - 학습 및 최적화' 카테고리의 다른 글
[경량화/최적화] - 레이버별 민감도 기반 Pruning [3] (2) | 2024.12.24 |
---|---|
[경량화/최적화] - Pruning 방법의 분류 [2] (2) | 2024.12.24 |
Pseudo 라벨링(Pseudo Labeling)이란 무엇인가? (0) | 2024.11.24 |
딥러닝 학습률(Learning Rate) 종류와 설정 방법 (1) | 2024.11.17 |
Pytorch에서 Learning Rate(LR) 스케줄링 다양한 기법 (1) | 2024.09.30 |