필터 분해(Filter Decomposition)는 모델의 기존 레이어를 분해한 후, 중요한 정보만 부분적으로 복원하면서 원래의 값을 근사하게 나타내고자 하는 것으로 가지치기(Pruning)와 양자화(Quantization)처럼 모델을 경량화하면서 성능을 유지하려는 목적을 가지고 있습니다.
학계에서는 주로 필터 분해(Filter Decomposition)에 대해서 Tensor Decomposition, Low-Rank Approximation, Matrix Factorization 등 다양한 용어로 표현하고 있는데요. 노타에서는 Filter Decomposition이라는 용어로 다루려고 합니다.
다양한 필터 분해 방법들 중에서 Tucker-2 Decomposition에 대해 소개하고자 하는데요. 그전에 Tucker-2 Decomposition을 쉽게 이해하기 위해 **특이값 분해(Singular Value Decomposition, SVD)**에 대해 짧게 설명하고 넘어가도록 하겠습니다. 우리가 흔히 다루는 2차원 행렬(Matrix)과 3차원 이상의 텐서(Tensor)는 다양한 분해가 가능한데요. 특이값 분해로 임의의 $m×n$ 행렬 $A$를 아래 그림과 같이 분해할 수 있습니다.

임의의 행렬 A를 특이값 분해한 결과
특이값 분해는 분해되는 과정보다는 분해된 행렬을 다시 복원하는 과정에서 큰 힘을 발휘하는데요.
기존의 $U$, $Σ$, $V^T$로 분해되어 있던 행렬 $A$를 $p$개의 특이값(Singular Value)을 이용해 $A'$이라는 행렬로 근사(approximation) 시킬 수 있습니다. 값이 큰(더 많은 정보를 가진) 몇 개의 특이값으로 $A$의 정보량을 표현할 수 있기 때문에 몇 개의 특이값들을 가지고도 충분히 유용한 정보를 유지할 수 있게 되는 것입니다.

특이값 분해를 통해 얻어진 U, Sigma, V 행렬에서 일부만을 이용해 적당한 A'를 부분복원 하는 과정
이로 인해 모델의 크기는 줄어들면서 기존 모델과 비슷한 성능을 낼 수 있습니다.
이러한 이해를 바탕으로 Tucker-2 Decomposition에 대한 설명으로 넘어가겠습니다.
**일반적인 Convolution Neural Network(CNN)**는 $K$라는 Kernel을 통해서 입력 텐서를 출력 텐서로 선형 변환 시켜줍니다. 이때 $K$는 $D$ x $D$ x $S$ x $T$의 크기를 가진 4차원 tensor입니다.

일반적인 Convolution Neural Network(CNN)
Tucker-2 Decomposition는 하나의 고차원 텐서를 3개의 텐서(1개의 Core Tensor, 2개의 Factor Matrices)로 분해하는 기법을 말합니다. 1개의 Core Tensor와 4개의 Factor Matrices로 분해되는 Tucker Decomposition과 다르게 Tucker-2 Decomposition는 Spatial Dimension과 관련된 $D$ x $R_1$, $D$ x $R_2$를 분해하지 않고, $S$ x $R_3$와 $T$ x $R_4$만 분해합니다.

Tucker Decomposition

Tucker-2 Decomposition
아래와 같이 분해하는 과정에서 위에서 설명해 드린 특이값 분해가 활용됩니다. $R_3$, $R_4$의 값이 특이값 분해 과정의 특이값 $p$에 해당되기 때문에, $R_3$, $R_4$이 $S$와 $T$에 가까워질수록 기존 텐서와 근사하게 표현이 가능합니다.