본 포스팅은 NIPS2018에 발표된 Knowledge distllation 연구 결과를 리뷰하도록 하겠습니다. 포스팅에 앞서, 주제와 관련된 모든 연구 내용은 Knowledge Distillation by On-the-Fly Native Ensemble 참조했음을 먼저 밝힙니다.

 

Preliminary


Knowledge distillation은 기계 학습 모델의 인상적인 성능 향상을 달성한 방법 중 하나입니다. 2014년 Hinton 교수 (NIPS 2014 Workshop)가 재해석한 distillation에 의하면 representation capacity가 큰 teacher model을 smaller capacity를 가진 student model이 aligning 할 수 있도록 하면, student model이 vanila process보다 qualifed performance를 달성할 수 있다고 하였습니다. 이를 바탕으로, 매우 다양한 형태의 distillation 방법들이 소개되었는데요. 본 연구는 지금까지 소개된 distillation의 방법론이 3가지 측면에서 문제가 있다고 지적합니다. 첫 째, longer training process, 둘 째, 상당한 extra computational cost and memory usage, 셋 째, complex multi-phase training procedure. 따라서, 저자는 distillation procedure의 simplification이 필요하다고 말하며, 2018년 Hinton 교수 (ICLR 2018)가 언급한 online distillation을 motivation 삼아 one-phase distillation training을 제안하였습니다.

 

Summary


본 연구에서 언급하는 simplification의 주된 영감은 multi-branch neural network라고 말합니다. Multi-branch neural network는 아키텍쳐 관점에서 대표적으로 ResNet이 있으며 이 모델은 feedforward propagation에서 identity를 고려하는 대표적인 two-branch network인 반면, Convolution 연산 관점에서는 group convolution을 예로 생각할 수 있습니다. group convolution의 경우 depthwise convolution과 같이 convolution을 특정 chnannel만큼 분할하여 수행하는 연산으로 ShuffleNet이나 Xception 등에 활용되었습니다. 이러한 Branch 구조는 최근 deep neural network가 더욱 깊어짐에 따라, 비례적으로 증가하지 못한 capacity 확장성 문제를 극복하기 위해 사용되었고 매우 성공적인 연구 결과를 도출하였습니다.

  이에 따라 본 논문은 성공적으로 모델 성능 효과를 달성했던 knowledge distillation을 multi-branch 컨셉에 접목하여 resource efficient distillation 알고리즘을 제안하였습니다. 아래의 그림은 제안하는 알고리즘의 overview인데요. Teacher model을 사용하던 과거의 컨셉과는 달리, network의 last level block에서 동일한 block을 병렬적으로 추가하여 ensemble 구조를 구현하였습니다. 이를 논문에서는 peer 혹은 auxiliary branch라고 표현하였으며, 이들의 logits 결과를 적절히 combination을 하면, teacher의 representation을 approximation 할 수 있다고 말합니다. 더욱 자세한 직관을 위해 그림을 설명드리면, 각 branch block은 동일한 아키텍쳐의 low-level layer를 공유하고 branch block마다 별도의 cross-entropy를 수행하도록 하였으며, 이 때 활용된 각각의 logits을 하나의 gate layer로부터 가중치를 얻어 summation을 하면 ensemble logits을 확보할 수 있는데, 이를 teacher logits으로 estimation 하고 ensemble cross-entropy를 처리하였습니다.

Overview of online distillation by the proposed On-the-fly native Ensemble (ONE)

 

본 논문에서 제안하는 Total loss는 아래처럼 총 3가지 텀으로 정의할 수 있습니다. (1) 각각의 branch에서 발생하는 cross-entropy의 합 (2) teacher의 것으로 estimation된 cross-entropy (3) teacher의 logits과 각 branch의 logits과의 KLLoss (Hinton KD). 본 논문에서 Hinton KD를 사용하기 위해 활용된 T는 3으로 하였으며 branch 개수는 [1, 2, 3, 4, 5]에 대해 각각 결과를 보여주었습니다.

Overall loss function by ONE

 

아래의 그림은 전체 알고리즘 동작에 관한 설명이며, Eq (1), Eq (3), Eq (4), Eq (6), Eq (7)에 관한 loss term은 논문에서 직접 확인 가능합니다. 본 논문의 data scale은 CIFAR10, CIFAR100, SVHN, ImageNet에서 하였으며, 모델은 ResNet에서 하였습니다. 

ONE Algorithm


서술한 내용 외에 본 논문에 대한 궁금한 점은 댓글로 남겨주세요.

 

감사합니다.

Mincheol Park

댓글을 달아 주세요

  1. 다시보아 2020.09.22 12:09  댓글주소  수정/삭제  댓글쓰기

    포스팅 잘 보고 갑니다...

이번에 "Journal of Statistical Physics"에 accept된 논문 제목입니다. 

실제 네트워크의 공통 특성들을 반영하는 그래프 생성 모델이 몇가지 있는데 이론적인 특성에 치우친 경우가 많습니다.

본 논문에서는 현실을 반영한 "기존 노드간의 연결 추가"라는 새로운 모델 속에서 두 가지 종류의 연결을 섞어서 더 실제와 유사한 그래프를 생성하는 방법을 제안했습니다. 

내용은 아래 링크 누르시면 바로 확인이 가능합니다. 

(SharedIt이라고 읽기는 되지만 저장은 안 되는 서비스입니다)

https://rdcu.be/b2D3T

학부를 물리학과 나온 제게는 처음으로 물리학 관련 저널에 논문이 실려서 더 의미있게 다가옵니다. 

 

 

 

댓글을 달아 주세요

오늘은 2019 ICLR에 발표된 Network Pruning 관련 논문 중 하나인 "Rethinking the Value of Network Pruning"을 리뷰하도록 하겠습니다.

 

흔히 Neural Network Pruning은 1. Training, 2. Pruning, 3. Fine-tuning 세 과정을 거쳐 이루어집니다. One-shot pruning의 경우에는 1->2->3의 과정을 한 번만 거치게 되고, Iterative pruning의 경우에는 1 이후에 2와 3의 과정을 원하는 모델 사이즈에 도달할 때까지 반복하게 되죠. 

 

이 논문에서는 이렇게 우리가 흔히 알고 있는 pruning 방식, 즉 먼저 큰 모델(Full model, overparameterized)을 학습시킨 다음에 필요 없는 연결을 제거하고 다시 재학습시키는 방식이 애초에 작은 모델을 scratch부터 학습시키는 것과 비슷한 성능을 내거나, 오히려 저하시킬 수 있다고 주장합니다.  

 

이 논문에서 실험을 통해 밝혀낸 3개의 insight를 정리하자면 다음과 같습니다.

1. 애초에 크고 파라미터가 많은 모델을 학습시키는 것이 필요하지 않다.
2. 큰 모델에서 특정 기준을 통해 골라진 weight는 작은 모델에게 필요하지 않다.
3. pruning을 통해 얻은 모델 구조 그 자체가 weight 값보다 더 중요하다.

 

한마디로 말하면, pruning의 의미는 중요한 weight를 얻는 것이 아니라 architecture를 찾는 것에 있기 때문에, 애초에 큰 모델을 학습시키고 그 weight를 보존할 필요가 없고 작은 모델을 random initialization부터 학습시키는 것이 더 낫다는 이야기입니다. 저자들은 여러 실험을 통해 이 가설이 성립함을 보여주었습니다.

 

Methodology

1. Predefined vs. Automatic

저자들은 여러 pruning 방식을 두 가지 범주로 분류했습니다. 첫번째는 'predefined' 방식인데요 각 layer에서 얼마 만큼의 channel을 잘라낼 것인지를 미리 정의하는 방식입니다. 따라서 각 layer의 channel 개수가 모두 동일하고, pruning을 모델의 구조를 찾기 위한 도구로 보면 별 의미가 없는 방식입니다.

한편 두번째 방식인 'automatic'은 architecture search의 의미를 가질 수 있습니다. 알고리즘이 각 layer에서 얼만큼의 channel을 제거할지를 자동으로 결정하기 때문입니다. 대표적으로 모든 layer의 batch normalization parameter $\gamma$를 정렬하는 network slimming이 있습니다. filter 혹은 channel을 완전히 제거하는 structured pruning 방식 외에, weight를 sparse하게 만드는 unstructured pruning 방식도 이 범주에 포함됩니다. 대표적으로는 Han et al. 이 2015년에 발표한 weight pruning이 있습니다.

 

2. Training Budget

본격적으로 실험 결과를 보여드리기 전에, 이 논문에서 제시한 두 가지 모델을 먼저 정의하고 넘어가겠습니다. pruning 이후의 모델 구조가 주어지면, scratch부터 이를 얼마나 학습시켜야 할까요? 저자들은 이에 대해 두 가지 방식을 제안했습니다.

1.  Scratch-E

 - pruned model을 처음 큰 모델을 학습시킬 때와 같은 epoch만큼 학습시킵니다.

2. Scratch-B

 - 처음 큰 모델을 학습시킬 때와 같은 training budget(연산량)를 사용합니다. pruned model은 처음 모델보다 파라미터 개수와 flops가 적을 테니 더 많은 epoch을 사용할 수 있게 되겠죠.

 

Experiments

Predefined Structured Pruning

  • L1-norm based Filter Pruning (Li et al., 2017)
    • a certain percentage of filters with smaller L1-norm will be pruned

  • ThiNet (Luo et al., 2017)
    • greedily prunes the channel that has the smallest effect on the next layer’s activation values

 

Automatic Structured Pruning

  • Network Slimming (Liu et al., 2017)
    • L1-sparsity on channel-wise scaling factors from Batch Normalization layers

 

  • Sparse Structure Selection (Huang & Wang, 2018) 
    • also uses sparsified scaling factors to prune structures, and can be seen as a generalization of Network Slimming

Unstructured Pruning

  • Weight Pruning (Han et al., 2015)
    • L1-sparsity on channel-wise scaling factors from Batch Normalization layers

위의 실험 결과를 보시면 CIFAR 데이터셋에서 pruning 비율이 클 때(95%)에는 fine-tuning 결과가 scratch 결과보다 더 나을 때가 많다는 것을 알 수 있습니다. 또한 ImageNet과 같은 큰 데이터셋에서는, 대부분의 경우 Scratch-B가 fine-tuned보다 꽤 저조한 성능을 보입니다. 저자들은 이에 대한 이유로 두 가지 가설을 제시했습니다. 1. network가 굉장히 sparse하거나 (CIFAR), 데이터셋이 크고 복잡할 경우 (ImageNet)에는 모델을 처음부터 학습시키는 것이 어렵고, 2. unstructured pruning이 위의 structured pruning과 비교하여 weight의 분포를 더욱 많이 변화시키기 때문입니다. 

 

Network Pruning as Architecture Search

앞서 말씀드린 대로 저자들의 주장은 pruning의 진정한 의미는 효울적인 네트워크의 구조를 찾는 것에 있다는 것입니다. 이를 증명하기 위해 각 layer의 channel을 같은 비율로 잘라낸 모델(uniform pruning)과 성능을 비교했습니다. 특히 channel pruning의 경우 모든 경우에서 network slimming 모델이 uniform pruning 모델보다 좋은 성능을 보였습니다.

 

 

댓글을 달아 주세요

본 포스팅은 NIPS2019에 발표된 Pruning 및 Architectural Search 연구 결과를 리뷰하도록 하겠습니다. 포스팅에 앞서, 주제와 관련된 모든 연구 내용은 Network Pruning via Transformable Archietcture Search 참조했음을 먼저 밝힙니다.

 

Preliminary


딥러닝 모델을 경량화하기 위한 노력은 현재까지 다양한 논쟁 중에 있습니다. 대표적인 방법으로 크게 4가지가 소개되고 있으며 다음과 같습니다. -Pruning, Matrix decomposition, Knowledge distillation, Architectural search-. 본 논문은 Pruning과 Architectural Search를 접목한 방식의 경량화 기술로써 Searching 알고리즘을 통해 얻은 가벼운 모델의 성능 향상을 위해 Knowledge distillation을 함께 적용한 연구 결과입니다. 한편, 위의 4가지 범주는 여러 져널이나 학회지를 통해 쉽게 이해하고 접할 수 있으니, 소개를 생략하도록 하겠습니다.

 

Summary


논문에서 제안하는 큰 Control flow는 아래의 그림과 같습니다. 과거 전통적으로 수행했던 Pruning 방식과는 다르게, 첫 째, Network search를 활용하여, 주어진 Architecture 내에서 필요하다고 고려되는 Node와 Depth 사이즈만 도출함으로써 경량화된 topology를 확보하고, 둘 째, 이를 통해 얻어진 Network를 Student 모델, Original Network를 Teacher 모델로 채택하여 Knowledge disitillation으로 학습합니다. 이 과정은 Original Network에서 학습된 파라미터는 필요한 Node와 Depth 사이즈를 발견하는 것에만 활용될 뿐, 과거의 방식처럼 Fine-tuning의 Initialization을 위한 도구로는 전혀 활용되지 않는 것을 주목할 필요가 있습니다.

 

따라서, 본 논문은 크게 3가지 스텝에 걸쳐 우리가 원하는 경량화 모델을 얻을 수 있다고 말하는데요.

1. Large network를 standard 방식으로 학습한다.

2. 이들이 제안하는 TAS (Transformable Architectural Search)를 활용해 depth와 width를 searching한다.

3. Searching한 Topology를 갖는 Small network를 Knowledge distillation을 이용해 학습한다. (Hinton 방식 사용)

 

본 포스팅에서는 1. 과 3. 은 쉽게 기타 블로그나 논문을 통해 이해할 수 있으므로 2. 에 관하여 짧게 서술하겠습니다.

 

2. 에서는 크게 3가지 searching을 수행합니다. (1) Searching for width (2) Searching for depth (3) Searching for objectives

(1) Searching for width

위의 그림 예시처럼 총 3개의 depth를 갖고 각 layer마다 총 4개의 node를 갖는 network가 있다고 가정할 때, layer마다 적합한 width를 찾기 위해 softmax probability를 활용합니다. 예를 들면, 1번 layer에 node개수는 총 4개 이고, 이에 따라 구성 가능한 # of nodes는 C=1, 2, 3, 4, 총 4가지가 되기 때문에 이들에 대해 모두 softmax probability를 구하고, 해당 layer에서 설정하고자 하는 node 수 (즉, C)를 선택할 경우의 수를 하이퍼파라미터 I로 설정합니다. 서술이 쉽지 않은데요. 만약 I=2라면, 총 (1, 2, 3, 4) 중 (1, 2), (1, 3), ... , (3, 4)하여 6가지의 channel 조합을 만드는 파라미터로 이해하시면 됩니다. 정의한 I에 따라서 위의 그림처럼 각 채널을 활용하여 feedforward하는 경우에 softmax probability를 이용하여 가중합을 하여 다음 layer로 전파합니다. C의 집합을 구성할 때 trainable variable을 사용하는데, 위의 예시와 같은 경우는 variable이 4개가 되고, feedforward 시 발생하는 Cross-entropy loss를 backpropagation하여 각 variable을 업데이트 함으로써 softmax probability의 분포가 달라지게 합니다. 한편, I에 따라서 사용되는 채널의 확률값이 sampling되기 때문에 미분 불가능한 이슈를 보완하기 위하여 기존의 softmax를 gumbel-softmax 분포로 모델링을 하고, 기존의 채널 4개에서 채널 3개 혹은 2개로 줄인 경우결과값의 벡터가 mis-matching되는 현상을 보상하기 위해 CWI (Channel-wise interpolation)을 사용하는 디테일이 있습니다.

 

(2) Searching for depth

Searching for width과 같은 방식으로 depth 전체에 대한 softmax probability를 구한 후 Cross-entropy loss로 해당 variable을 update하며 최적화된 depth를 찾아가는 방식을 활용합니다.

 

(3) Searching for objectives

Accuracy 및 경량화 효과를 모두 확보한 모델을 Searching하기 위해 Cross-entropy loss에 Architectural cost term을 loss로 추가하였는데요. 본 논문에서는 다양한 Configuration에서 발생 가능한 FLOPs의 Exepectation을 cost로 활용했다고 말하고 있습니다.

 

본 논문의 TAS은 아래의 알고리즘 테이블로 요약될 수 있습니다.


서술한 내용 외에 본 논문에 대한 궁금한 점은 댓글로 남겨주세요.

 

감사합니다.

Mincheol Park

댓글을 달아 주세요

  1. xeskinn 2020.01.30 01:08 신고  댓글주소  수정/삭제  댓글쓰기

    좋은 포스팅 감사합니다.

오늘은 2019 NIPS에서 발표된 논문 Self-Routing Capsule Networks를 리뷰하도록 하겠습니다. 서울대에서 발표한 논문인데요, 간단한 아이디어로 Capsule Network의 구조적인 문제점을 해결하고자 했습니다.

 

Capsule Network

Self-Routing Capsule Network에 앞서 먼저 Capsule Network에 대해 간략히 설명하겠습니다. Capsule Network는 "Dynamic Routing Between Capsules"라는 논문에서 처음으로 제안한 모델입니다. Geoffrey E. Hinton이 오랜만에 발표한 논문이라 더욱 주목을 받았습니다. 

 

딥러닝 모델이 실제 사람처럼 "일반화"되기 위해서는 아직도 갈 길이 멉니다. 이미지의 단지 몇 픽셀을 조정함으로써 잘 훈련된 딥러닝 모델을 속일 수 있습니다. 의도적으로 속이는 경우가 아니더라도, 구분하고 싶은 물체의 방향, 크기 등이 달라지면 딥러닝 모델은 이를 잘 구분하지 못합니다.

 

이러한 관점에서 Capsule Network는 invariance가 아니라 equivariance를 추구합니다. 기존 CNN 모델의 max pooling 방식으로는 feature가 존재하는지 안 하는지의 정보만 얻을 수 있습니다 (invariance). 하지만 이를 넘어서서 entity의 variation을 보존할 수 있어야 한다는 겁니다(equivariance). 이로써 feature들 간의 공간적인 관계를 더 잘 찾아낼 수 있고 더 나은 일반화가 가능해집니다. 예를 들어, 얼굴 이미지를 보고 눈, 코, 입이 각각 있는지뿐만 아니라 각각이 어디에 위치하는지도 고려해야 한다는 것입니다.

 

Capsule Network의 골자는 Capsule과 Routing-by-agreement입니다. Capsule은 관심있는 entity의 여러 정보를 벡터에 저장합니다. 그 후 각각의 capsule은 transformation 행렬을 거쳐서 다음 layer의 capsule의 pose를 예측합니다. 이렇게 예측한 결과가 적절한지 평가하고, 파라미터를 업데이트하는 과정이 Routing-by-agreement입니다. Routing-by-agreement 방식은 캡슐들을 반복적으로 클러스터링함으로써, 가장 가깝게 모여있는 쪽으로 (agreement) 다음 레이어의 파라미터를 업데이트합니다.

 

Capsule Network에 대한 자세한 설명은 이 블로그유튜브 강의 1, 유튜브 강의 2를 참고해 주세요. 

 

Self-Routing Capsule Network

Motivation

본 논문으로 다시 돌아와 보겠습니다. 본 논문에서는 routing-by-agreement을 아예 제거해 버리고, 다음 레이어의capsule로 가는 Routing Network를 정의했습니다. 이 아이디어는 Unsupervised Clustering 방식이 고차원 공간에서는 너무 불확실하고 비싸다는 motivation에서 출발합니다. 일단 routing-by-agreement 방식이 반복적으로 mean을 계산하고 prediction vector를 업데이트하기 때문에 연산이 비싸고, prediction vector의 분포를 인위적으로 가정해야 하기 때문에 noise에 잘 대응하지 못한다는 것입니다.

 

따라서 본 논문에서는 Routing-by-Agreement 방식 대신, Capsule별로 다른 파라미터를 가지는 Routing Network를 사용합니다. 아래 그림을 보시죠.

 

이렇게 되면 Capsule Network를 Mixture of Experts(MOE)의 관점에서 해석할 수 있습니다. 각 Capsule이 entity를 검출하는 expert의 역할을 담당합니다. 아래 그림을 보면, Capsule network와 MOE가 submodule들을 앙상블 한다는 점에서 상당히 비슷함을 알 수 있습니다. 다만 Capsule들은 MOE의 Experts와 달리 feature space를 공유하지 않습니다. 

본 논문은 Capsule Network의 두 가지 특성 중, entity의 공간적인 관계를 파악하는 것 보다는, 개별 entity에 특화된 Capsule의 특성에 더 집중했습니다. 하지만 output의 분산을 완화시키기 위한 routing-by-agreement 방식을 사용하지 않고도 안정적인 결과를 낼 수 있음을 실험적으로 보여줬습니다. 

 

Method

이 논문에서는 매우 간단한 single-layer perceptron을 제안합니다. Self-Routing은 두 개의 학습 파라미터 $\textbf{W}^{route}$$\textbf{W}^{pose}$ 를 가지고 있습니다. 각각은 routing coefficients $c_{ij}$와 prediction vector $\hat{\mathbf{u}}^{j|i}$를 구하는 데에 사용됩니다. 

 

더 자세히 들어가 보겠습니다. 먼저 현재 레이어의 capsule vector $\hat{\mathbf{u}}$ 에 가중치 $\mathbf{W}^{route}$를 곱하고 softmax를 취해서 routing coefficient $c_{ij}$를 계산합니다. 그 다음 $c_{ij}$를 capsule의 activation scalar $a_i$와 곱하여 가중합을 한 것을 그 다음 레이어의 j번째 capsule의 activation scalar $a_j$로 사용합니다. 

 

이후 레이어의 capsule을 구하기 위해 $a_j$를 가중치로 사용합니다.

 

 

Experiments

실험 결과에 따르면 SR-CapsNet 모델은 기존의 Routing-by-agreement 방식 두 가지 (Dynamic Routing과 EM Routing) 보다 더 좋은 이미지 분류 성능을 보였다고 합니다. 뿐만 아니라 Adversarial Example과 Affine Transformation에도 잘 대응했는데요, Routing-by-agreement를 사용하지 않고도 일반화가 가능하다는 것을 실험으로 보여줬습니다. 아래에 실험 결과가 제시되어 있습니다.

1. Image Classification

 

2. Robustness to Adversarial Examples

 

3. Robustness to Affine Transformation

 

여기까지 Self Routing Capsule Network 논문을 정리해 보았습니다. 자세한 내용은 논문을 참고해 주세요. 감사합니다.

 

댓글을 달아 주세요