gusdlf93 / Paper_Survey

4 stars 1 forks source link

[IJCV] Knowledge Distillation: A Survey #13

Open gusdlf93 opened 2 years ago

gusdlf93 commented 2 years ago

딥러닝에서 모델을 효율적으로 돌리는 방법에는 여러가지가 있습니다.

  1. Parameter pruning and sharing : 성능에 큰 영향을 미치지 않으면서, 추론에 영향을 미치지 않는 파라미터들을 제거하는데 중점을 둡니다. 해당 범주는 quantization, binarization, structural matrics, parameter sharing등의 기법들로 나뉩니다.
  2. Low-rank factorization : 해당 방법은 중복된 매개변수들을 식별하고, matrix나 tensor 분해?를 사용합니다
  3. Transferred compact convolutional filters :불필요한 Convolutional 필터를 Transfer하거나 Compressing 할 때, 제거합니다.
  4. Knowledge Distillation(KD) : 큰 신경망에서 상대적으로 작은 네트워크로 지식을 증류합니다.

대규모 심층 신경망은 특히 데이터가 많은 환경에서 좋은 성능을 보여줍니다. 파라미터가 많을수록 일반화 성능도(새로운 데이터가 들어왔을 때) 같이 향상 되기 때문입니다.(An informationtheoretic view for deep learning, Why do Larger Models Generalize Better? A Theoretical Perspective via the XOR Problem, . Learning and generalization in overparameterized neural networks, going beyond two layers, On the optimization of deep networks: Implicit acceleration by overparameterization 등에서 잘 다루고 있습니다.)

그러나, 모바일이나 임베디드 시스템에서 큰 모델을 배포하는것은 쉽지 않습니다. 예전에는 이러한 문제를 해결하기 위해서 모델을 압축하기도 했습니다 하지만 2015년에 KD 논문이 나온 이후로는 이쪽으로 주류가 옮겨가고 있습니다.

KD의 Key-Idea는 3가지로 나뉩니다.

  1. Knowledge
  2. Distillation algorithm
  3. Teacher - Student Architecture

Teacher-Student Architecture는 다음과 같은 구조를 말합니다. image KD는 좋은 성능을 보여주지만, 이론적이나 경험론적으로 왜 잘되는지를 설명한 논문들이 많지 않습니다.

image 이 논문에에는 그림에서 볼 수 있는 것처럼 다양한 논문들을 살펴보고, 이들의 개념들을 하나하나 분석해보도록 합니다.

다음 그림은 Distillation관점에서 모델을 Relation, Feature, Response로 분해한것입니다.

2.1 Response Based Knowledge Responsed Based KD는 주로 다음 그림처럼 설계됩니다. image

Responsed Based Knowledge는 항상 Teacher 모델의 마지막 레이어의 뉴런의 출력값을 참조하도록 합니다. 해당 방법은 간단하지마, model compression 같은 방법(pruning 같은 방법을 말하는거 같은데 모르겠네요)들보다 훨씬 효과적입니다. 기본적인 Distillation에서 loss는 다음과 같이 정의됩니다.(z는 마지막 FC의 출력값) image

Loss는 Detection이나 Segmentation, Classificatino에 따라 유동적으로 변할 수 있습니다. Knowledge Distillation에서는 Temperature를 주로 사용하는데, Temperature는 Soft Label을 만들 때 사용하는 것으로, Temperature가 크다는 것은, 출력값들 사이에 분포가 sharp하지 않고 smooth하다는 것을 의미합니다.

Responsed Based Knowledge Model의 전체적인 구조는 다음과 같습니다. image 보시게되면, Teacher모델의 Soft Target을 Student 모델이 학습해야 하는 동시에, Student Model은 GT와의 차이 또한 줄이도록 학습이 진행되어야 합니다.

또한, 이렇게 학습된 모델은 Teacher가 SL이기 때문에, Student도 당연히 SL로 학습을 진행할 수 밖에 없습니다. 2.2 Feature Based Knowledge 딥러닝 네트워크의 layer들은 각자의 깊이에 따라 추상적인 수준이 달라집니다. 그렇기 때문에 layer의 각 계층 (예를 들어 중간 계층, 마지막 계층)들은 학생 모델을 훈련하기 위한 지식으로서 사용될 수 있습니다. 특히 feature based knowledge는 response-based knowledge보다 좋은 접근 방법이며, 얇고 깊은 네트워크를 학습할 때 좋습니다. (feature를 학습하는게, output을 학습하는것보다 좋다는 얘기입니다.) attentino map(?)이나 feature space에서의 probability distribution을 일치시키는 방법으로 학습이 진행되기도 했습니다. 그 외에는 학습을 더 쉽게 하기 위해서 힌트를 주거나 은닉층의 actication boundary(?)를 함께 사용하는 것을 제안하였습니다. 그 외에도 student와 teacher 계층을 adaptive하게 할당하는 방법도 제안되었습니다. Feature Based Knowledge Distillation은 다음 그림처럼 이루어집니다. image 수식은 다음과 같습니다. image Teacher에서 전이하고자 하는 layer와 Student에서 전이받고자 하는 layer의 Feature map이 유사해지도록 학습하는 것입니다. 이 방법은 Teacher의 어떤 layer에서 Student의 어떤 Layer로 hint를 제공해줘야하는지를 잘 찾아줘야 합니다. 또한, 이들 간의 크기(channel인지 resolution인지 안 적혀 있지만 정황상 channel 같습니다.) 가 다르므로 이것 또한 잘 고려해줘야 합니다.

2.3 Relation-Based Knowledge response, feature 기반의 방법들은 모두 특정 layer의 출력값을 지식으로서 전달합니다. Relation based knowledge는 여기서 추가로 다른 계층 혹은 데이터 샘플간의 관계를 추가로 탐색합니다. FSP(flow of solution process)는 두 레이어 사이의 Gram matrix를 관계로 설정하고, feature map 간의 관계를 나타냅니다. 이렇게 feature map들 간의 correlation을 distillation할 knowledge로 사용하거나, 여러 명의 teacher로부터 지식을 얻기도 합니다. student model은 teacher 모델들간의 mutual information flow를 모방합니다.

수식은 다음과 같습니다. image 대충 요약하자면 teacher model들 간의 유사성과 student model 간의 유사성 함수에서 이들간의 loss가 줄어들도록 학습이 진행되는 것입니다.

relation based knowledge distillation은 다음 그림과 같이 진행됩니다. image

이렇게 Knowledge를 Distillation하는 과정에는 특징 정보들 뿐만이 아니라 데이터 샘플들이 가진 상호관계도 같이 Distillation되게됩니다. 즉, 데이터 샘플 간의 관계를 데이터가 가진 특징정보들을 사용해서 확률 분포로 모델링됩니다. 이 과정에서 instance 수준의 정보와 instance 간의 상관관계를 학습하는 네트워크를 설계할 수도 있습니다.

3 Distillation Schemes Distillation은 Teacher와 Student가 학습할 때, 학습이 이루어지는 단계에 따라서 Offline, Online, self-distillation의 3가지 단계로 나뉘어질 수 있습니다. 이들의 차이점은 다음 그림에서 간략하게 살펴볼 수 있습니다. image

3.1 Offline Distillation 대부분의 distillation은 오프라인에서 작동됩니다. 1) 지식 증류는 보통 사전 학습된 teacher model에서 student 모델로 지식이 옮겨가는 것을 의미합니다. 2) 지식을 증류하는 과정에서는 teacher 모델의 logit 형태 또는 feature level의 knowledge를 전달하게 됩니다. Offline Knowledge Distillation에서는 1)의 조건은 만족되었다고 가정하며, 2) 단계만 고려하도록 합니다. 그렇기에 대부분 KD를 design하기 위한 것들, 주로 loss function이나 어떤 faeture혹은 distribution을 matching 시켜야하는지 에 중점을 두게 됩니다. Offline Method는 간단하고 구현하기 쉬운 장점이 있는데, hardware나 software에 상관없이, 훈련된 모델을 잘 저장하기만 하면 됩니다. student 모델은 teacher 모델의 성능에 크게 의존하며, distailltion 후에 student는 항상 예외없이 teacher보다 낮은 성능을 보여주게 됩니다.

3.2 Online Distillation Offline Distillation의 경우에는 잘 학습된 teacher 모델이 없는 경우, 좋은 성능을 낼 수 없다는 단점이 있고, 이를 극복하기 위해 좋은 teacher 모델 없이도 student 모델의 성능을 향상시킬 수 있는 Online Distillation이 제안되게 되었습니다. 특히 Deep Mutual Learning에서 Multiple Neural Network는 Collaborative way한 방식으로 작동됩니다. 여러개의 네트워크 중 하나는 student가 되고, 다른 모델은 teacher가 되어서 서로 교육을 돕습니다. 일반화 성능을 올리기 위해서 student모델들의 soft logit 값들을 앙상블해서 사용하기도 합니다.

연산량을 줄이기 위해서 backbone을 공유하는 Multi-branch Architecture를 사용할 수도 있습니다. 최근에는 클래스 확률과 특징 맵의 지식을 모두 사용해서 여러 네트워크를 동시에 학습시키기 위해 online adversarial knowledge distillation이 제안되기도 했습니다. online distillation은 효윺ㄹ적인 학습을 위한 1)단계에 해당합니다. 그러나 online distillation은 일반적으로는 high cost의 teacher model을 사용하지 못하므로 teacher와 student간의 관계를 연구하는 것에 중점을 두게 됩니다.

3.3 Self-Distillation Self Distillation에서는 Teacher와 Student가 동일한 네트워크를 사용해서 학습을 진행합니다. 즉, Online Distillation의 특별한 case로, 구체적으로는 네트워크의 더 깊은 section에서 학습한 지식을 얕은 section으로 증류하는 self distillation입니다. 네트워크는 자신의 layer의 attention map을 사용해서 lower layer에 증류를 진행합니다. snapshot distillation은 teacher의 early epoch의 지식을 student의 later epoch에 증류하여 같은 네트워크에서 supervised training을 지원합니다,(이게 왜 좋은??) 조기 종료를 위해 early exit을 제안한 논문도 있습니다. early exit layer는 학습 중에 later exit layer의 출력값을 모방하도록 학습됩니다. 성능은 좀 낮았지만 점차 개선되고 있습니다. self-distillation의 이론적 증명은 Mobahi가 잘 정리하였습니다. 또한, label smoothing regularization을 진행하면 teacher가 없이도 좋은 성능을 나타낼 수 있습니다. KD에서 예측 확률이란 특징 표현에 의해 정의되며, 예측 확률은 feature embedding space에서 데이터간 유사성을 반영합니다. 그러므로, 동일한 모델간 클래스 내 샘플과 augmentation된 샘플들 간 훈련된 모델의 output distribution을 일치시키는 학습도 사용할 수 있습니다. 정리하자면 offline distillation은 지식이 풍부한 teacher가 student를 가르치는 것을 의미한다면, online distillation은 teacher와 student가 같이 지식을 배우는 것을 의미합니다. self-distilation은 학생이 스스로 지식을 배우는 것을 의미합니다. 무엇이 좋고 나쁜 것이 아니라, 이들을 잘 엮어서 사용하는 것이 중요합니다.

4 Teacher–Student Architecture

Teacher-Student 모델은 네트워크를 어떻게 설계하느냐에 따라서, student가 습득할 지식의 질이 결정됩니다. 최근에는 Teacher와 Student의 모델 설정은 거의 fixed되어 있습니다. Neural Network에서 Complexity는 보통 Depth와 Width로부터 결정되게 됩니다. 그러므로 Teacher-Student 모델은 보통 Deep and wider Neural Network가 Shallower and thin Neural Network에게 지식을 전달하게 됩니다. Student 모델은 5가지 방법으로 만들 수 있습니다. 1) Teacher 모델의 layer의 갯수를 줄이거나, layer의 channel들을 줄여서 만듭니다 2) Teacher 모델과 동일한 구조에서 Quantization을 진행합니다. 3) 작은 네트워크를 효율적으로 구성합니다.(? 네트워크의 구조를 바꾼다는 의미로 들립니다.) 4) 작은 네트워크를 최적화된 Global Network Structure로 구성합니다.(??이건 아예 무슨 말인지 모르겠습니다. transformer??) 5) Teacher와 Student를 동일한 모델로서 사용합니다.

5)는 왜 그러는 것이냐면, model의 capacity가 차이가 난다는 것은 어쨌든 KD시 성능의 저하가 발생할 수 있다는 의미입니다. (그러면 굳이 KD를....?)

Knowledge를 효율적으로 전달하기 위해 여러가지 방법들이 제안 되었습니다. Teacher와 Student간의 격차를 줄이기 위해 assistant를 도입하기도 합니다. assistant는 보통은 residual error를 줄이기 위해 사용됩니다. 한편, 최근에는 teacher와 student 모델의 구조적 차이를 최소화 하기 위해 초점을 맞추는 연구들도 진행되고 있습니다. 이는 보통 Quantization을 사용해 동일 구조에서 모델의 크기만 줄이는 방법들입니다. 그 외에도 structure compression이라는 방법이 있는데, 이는 Multiple Layer의 지식을 Single Layer로 transfer하면서 모델의 구조를 단순화하는 방법입니다. block단위로 지식을 전달함으로써 receptive field를 유지하는 방법도 있습니다. online distillation에서 teacher는 보통 student의 Ensemble 버전인데, student들은 유사한 구조 혹은 동일한 구조를 공유합니다. 최근에는 Depthwise-convolution을 사용해서 모델의 크기를 줄이거나, NAS를 사용하기도 합니다. 여기서 아이디어를 얻어서 KD 방법을 dynamic하게 search하는 방법도 제안이 되었습니다. 예를 들어, 강화학습을 사용해서, 중복된 layer들을 제거하는 방법을 학습하고, 주어진 teacher에 적합한 최적의 student를 찾기도 합니다.

5 Distillation Algorithms

knowledge transfer를 간단하면서도 효과적으로 진행할 수 있는 아이디어들에 대해서 소개드리겠습니다. 가장 먼저 response-based knowledge, feature-based knowledge 혹은, teacher와 student간 feature space의 representation distribution을 일치시키는 것입니다. 이번에는 KD 분야에서 distillation을 할 때 사용하는 여러가지 기법들을 논의해보겠습니다.

5.1 Adversarial Distillation Knowledge Distillation에서 teacher모델이 실제 데이터의 분포를 완벽하게 학습하는 것은 매우 힘든 일입니다. 또한, student 모델은 낮은 capacity로 인해서 teacher 모델과 정확히 동일하게 모방할 수는 없습니다. 그러므로 이를 해결하기 위해, Adversarial Learning을 사용합니다(주로 GAN). GAN의 Discriminator는 Sample이 training data의 distribution에서 나올 확률을 추정하는 반면, Generator는 생성된 데이터 샘플을 사용해서 Discriminator를 속여야 합니다. Distillation에서 이러한 GAN을 사용할 떄에는 3가지 방법들을 주로 사용합니다. 1) Generator는 training data를 늘리는 일종의 augmentation으로서, KD의 성능을 높이게 됩니다, 2) GAN의 Discriminator는 Student가 Teacher를 모방할 수 있도록 학습합니다. 3) online distillation에서 Teacher와 Student를 Generator로 사용하고, discriminator를 강화하도록 학습이 진행됩니다. image

다음 수식은 Teacher와 Student가 Discriminator로서 작동하며, Generator로부터 동일한 출력값을 출력하도록 학습을 진행합니다. image

5.2 Multi-teacher Distillation multiple teacher networks는 개별적으로 혹은 통합해서 student network 학습에 관여합니다. 전형적으로 teacher는 큰 모델이거나, student의 ensemble 모델입니다. multiple teacher의 지식을 가장 간단하게 student에게 distillation하는 방법은 출력값들의 평균값을 전달하는 방법입니다.

이를 그림으로 표현하자면 다음과 같습니다. image 모든 teacher의 averaged logit value외에도 훈련 샘플들간의 비유사성을 장려하기 위해 중간 계증의 특징정보들을 통합했습니다(?이게 무슨;;;소리;;) 또는 각각의 Teacher들이 서로 다른 정보들을 Student에게 전달하기도 합니다. 한 Teacher는 responsed based knowledge를, 다른 Teacher는 Feature based knowledge를 전달합니다.

5.3 ~ 5.9 섹션은 너무 내용이 산으로 가거나 survey에서 정리한 게 이상합니다. 논문을 읽어보고 감을 잡아야 할 듯 합니다.

5.3 Cross-Modal Distillation 특정 modal의 data나 label은 학습 혹은 테스트중에 사용하지 못하는 경우가 있습니다. 이러한 경우, 서로 다른 modality간에 knowledge를 transfer하는 것은 매우 중요합니다. -> 이 부분은 내용을 읽어도 이해가 안 가고, 그림을 봐도 이해가 안 가므로 생략하도록 하겠습니다. 실험 해서 성질들을 분석해봐야 할 듯 합니다.

image

5.4 Graph-Based Distillation 이것도 이해가 안되서 나중에 논문을 읽어보고 정리해야 할 거 같습니다.

대부분의 Knowledge Distillation algorithm은 Teacher에서 Student로 지식을 전달하는데 중점을 두지만, 최근에는 데이터들 간의 상관관계를 탐색하기 위해 graph를 사용합니다. graph-based distillation은 다음과 같이 진행됩니다.

graph based distillation의 주요아이디어는 2가지입니다. 1) graph를 지식 전달의 매개체로 사용합니다. 2) 메시지 전달을 제어하기 위해서 사용합니다. ??

우선 두 개의 graph가 각각 logit과 intermediate feature를 여러개의 teacher로부터 student에게 전달하는 방법이 있습니다. graph는 고차원 공간에서 sample 간의 관계를 유지하는 데 사용됩니다.(?)

6 Performance Comparison Distillation의 Deep Learning Model의 용량을 효율적으로 압축하는 일종의 Compressor로서, 다음과 같은 장점들을 가집니다.

KD 성능표입니다. 서로 다른 모델들에 대해서 실험이 진행되었기 때문에, 어떤 방법이 좋은 방법이라고 단정 지을 수 있는 테이블은 아닙니다. 최근 challenge들을 보면 resnet34 -> resnet18같은 모델의 구조를 정해놓고 방법론들을 비교하기 때문입니다. 성능이 오른다와, Feature, Response가 주류를 이룬다 정도로만 보면 될 듯 합니다. image

7. Conclusion 결국 KD란, Teacher의 풍부한 지식을 Student로 전달하는 것입니다. 여기서 지식의 질, 증류의 유형, T-S Architecture, KD가 왜 잘 되는지에 대한 이론적인 측면에서 논의들을 진행했습니다. hint/guide layer는 정규화는 과도한 정규화를 조심해야 합니다. 또한 2020년까지의 대부분의 논문들은 knowledge의 유형이나 loss function에 중점을 두고있지만, teacher-student architecture에 대한 설계에 대한 조사들은 제대로 진행되지 않았습니다. 최근 연구들에서는 teacher와 student간의 용량 차이가 큰 경우 학생 모델이 큰 모델로부터 아무것도 배우지 못하는 현상이 있다는 것을 발견했습니다. 하지만 반면에 특정 네트워크에서는 shallow model이 deep model을 잘 따라한다는 것을 알 수 있습니다. 언제 이러한 문제들이 일어나는지에 대해서 알아내는 것은 중요합니다.

근데 보다보니까... KD가 transfer learning보다 좋냐라고 물어보면 그건 또.. 모르겠습니다 base라인에서 학습한거랑만 비교들이 들어가는데, 해당 부분에 대해서 survey가 필요할듯 하네요