Structured Pruning
Unstructured Pruning은 모델의 구조를 바꾸는 것이 아니라 특정 weight의 value만 0으로 만드는 것이기 때문에 실질적으로 경량화를 하기 힘듭니다. 여전히 모델의 파라미터수는 똑같습니다.
이를 극복한 것이 Structured Pruning입니다
모델의 채널수(필터수)를 줄이면 줄어든 채널수만큼 모델이 경량화됩니다
Method1 : Lasso
https://arxiv.org/pdf/1707.06168
목적은 가장 중요도가 높은 채널 top $c'$을 찾는 것입니다. 그리고 없어진 채널만큼 weight가 보상해주어야 합니다 (fine tuning같은 개념)
\begin{equation}
\begin{aligned}
\arg \min_{\boldsymbol{\beta}, \mathbf{W}} \quad & \frac{1}{2N} \left\| \mathbf{Y} - \sum_{i=1}^{c} \beta_i \mathbf{X}_i \mathbf{W}_i^\top \right\|_F^2 \\
\text{subject to} \quad & \| \boldsymbol{\beta} \|_0 \leq c'
\end{aligned}
\end{equation}
하지만 이 문제는 푸는 것이 불가능하므로 ($\beta$를 {0,1}만 가지는 변수로 정의한 것 같음)
아래식으로 변형합니다
\begin{equation}
\begin{aligned}
\arg \min_{\boldsymbol{\beta}, \mathbf{W}} \quad & \frac{1}{2N} \left\| \mathbf{Y} - \sum_{i=1}^{c} \beta_i \mathbf{X}_i \mathbf{W}_i^\top \right\|_F^2 + \lambda \| \boldsymbol{\beta} \|_1 \\
\text{subject to} \quad & \| \boldsymbol{\beta} \|_0 \leq c', \quad \forall i \; \| \mathbf{W}_i \|_F = 1
\end{aligned}
\end{equation}
추가된 것은 다음과 같습니다
1. $\beta$를 continuous한 값으로 만들고 l1 regularization을 추가해줍니다. l1으로 인해 beta가 0에 도달합니다
2. $ \| \mathbf{W}_i \|_F = 1 $ : W를 1로 정규화합니다. 이는 beta가 0에 가까워질때 weight를 무한대로 만들어 보상하는 것을 막기 위함입니다.
두 개의 sub-problem으로 만들어 위 식을 구합니다.
1. Weight를 고정하고 Beta를 구합니다 (LASSO Regression)
2. Beta를 고정하고 Weight를 구합니다 (fine-tuning 과정)
Method2 : Rank
https://arxiv.org/pdf/2002.10179
feature map의 rank로 filter의 중요도를 결정합니다
왜냐하면 높은 rank는 그만큼 정보가 다양하다는 뜻입니다
1배치만큼(논문에선 500개) 이미지를 돌려서 구한 feature map의 rank를 구한후 낮은 중요도를 가진 filter를 프루닝합니다
Method3 : Polarization Regularizer
https://papers.nips.cc/paper/2020/file/703957b6dd9e3a7980e040bee50ded65-Paper.pdf
다음과 같은 함수를 정의하고 최소화
\begin{equation}
\min_{\boldsymbol{\theta}} \frac{1}{N} \sum_{i=1}^{N} L \left( f(\mathbf{x}_i; \boldsymbol{\theta}), \mathbf{y}_i \right) + R(\boldsymbol{\theta}) + \lambda R_s(\boldsymbol{\gamma})
\end{equation}
L : loss function
$\gamma$ : scaling factor
scaling factor로 각 필터의 중요도를 파악합니다
Scaling factor는 각 filter마다 존재하며 각 필터를 통과하고 scaling하는 역할입니다
\begin{equation}
\begin{aligned}
R_s(\boldsymbol{\gamma}) &= t \| \boldsymbol{\gamma} \|_1 - \| \boldsymbol{\gamma} - \bar{\gamma} \mathbf{1}_n \|_1 \\
&= \sum_{i=1}^{n} t |\gamma_i| - |\gamma_i - \bar{\gamma}|, \quad (t \in \mathbb{R}, \; \gamma_i \in [0, a])
\end{aligned}
\end{equation}
$ \bar{\gamma}$는 $\gamma$의 평균입니다 (t는 하이퍼파라미터인것같음)
$ R_s(\boldsymbol{\gamma}) $을 최소화하려고 하기때문에
첫번째 term($ |\gamma_i| $)로 인해 각 $|\gamma_i| $가 작아집니다
두번째 term( - $|\gamma_i - \bar{\gamma}|$)은 각 $\gamma_i$가 평균( $\bar{\gamma}$)과 같을때 가장 큽니다
따라서, 모든 값이 평균과 멀어지도록 학습됩니다
즉, 모든 값이 0에 가깝게 또는 매우 큰 값을 가지게 됩니다 (==Polarization)
Structured Pruning의 의의
https://arxiv.org/pdf/1810.05270
- 큰 모델을 작은 모델로 프루닝하면서 파인튜닝하는 것보다 애초에 작은 모델을 학습시키는게 더 효율적임 (GPU 사용량이 더 적으므로)
- Structured Pruning은 weight를 찾는것보다는 효율적인 아키텍처를 찾는 과정임
'인공지능' 카테고리의 다른 글
모델 경량화 프루닝 (Pruning) - Unstructured (0) | 2025.03.23 |
---|---|
A Discriminative Feature Learning Approach for Deep Face Recognition (0) | 2024.12.15 |
Entropy, Cross Entropy, KL divergence (0) | 2024.07.07 |
Word2Vec (1) | 2024.05.01 |
Vessl GPU 서버 사용 (1) | 2024.04.26 |