개요:

요즘 스마트 엣지 혹은 엣지 단에서의 고속 스트림 프로세싱과 같은 표현들이 많이 보입니다. 데이터 처리 파이프라인에서, 보통 엣지 디바이스들은 센서 네트워크 등의 데이터 수집 전달, 그리고 서버 혹은 클라우드는 머신 러닝 러닝 등의 알고리즘으로 데이터를 분석하는 것으로 역할이 나뉘었습니다. 따라서, 앞에서 언급한 새로이 보이는 표현들이 점점 자주 보이는지 궁금해 하시는 분들이 많을 같습니다.

 

이번 포스팅에서는 이러한 새로운 시스템 디자인 트렌드가 생겼는지 살펴보고, 국내외 스마트 엣지 플랫폼에는 현재 어떠한 것들이 있는지 살펴 보겠습니다.

 

스마트 엣지와 스마트 시티, , 팩토리 플랫폼:

인공지능을 이용해서 가정, 공장, 그리고 주거 인프라를 최적화하여 가용성을 높일 뿐만 아니라, 다양한 서비스를 제공하기 위한 플랫폼을 개발하기 위해서 스마트 , 팩토리, 시티 등의 새로운 분야들이 생겨났습니다. 이러한 새로운 개념의 플랫폼들은 다양한 센서들로부터 실시간으로 데이터를 수집하고, 처리해야 합니다. 여기서 기존의 데이터 파이프라인 디자인과 크게 달라지는 부분은 다양한 종류의 센서들이 규모로 네트워크를 형성한다는 점입니다.

다수의 영상 고속의 센서 데이터 스트림을 집중화된 서버나 클라우드 시스템에서 처리하는 것은 서버나 클라우드 시스템을 그만큼 크게 증설해야만 뿐만 아니라, 증가하는 트래픽을 감당할 네트워크 증설까지 이루어져야 합니다. 예를 들면, 출입자 체온 측정의 경우, 만약에 엣지에서 출입자를 특정해서  출입자의 이미지와 측정된 체온을 스트리밍 한다면 네트워크 트래픽 서버의 부하가 크게 줄어들 것입니다. 이러한 센서 플랫폼을 도시 혹은 공장 규모로 확장해 보면, 엣지에서의 프로세싱이 주는 이점을 체감할 있을 것입니다.

 

스마트 엣지 플랫폼 스트리밍 플랫폼:

Gartner에서 2022년까지 80%이상의 기업 IoT 프로젝트는 IoT 디바이스에 AI 내장하게 것이라고 예측하고 있습니다. 트렌드에 맞춰서 이미 많은 기업들이 스마트 엣지를 기존의 플랫폼에 더하기 위해 다양한 시도를 하고 있습니다. Google Cloud IT Core 엣지에서 실시간 분석 ML 알고리즘들을 실행하기 위한 라이브러리를 더했습니다 [그림 1]. 라이브러리는 구글이 개발한 Edge TPU 디바이스에 최적화되어 있습니다. 트래픽 분산 실시간 처리 강화 뿐만 아니라, RAW 데이터를 로컬에 둠으로서 보안 향상 네트워크 장애 경우에 대한 시스템의 신뢰도를 향상시킬 목적입니다.  마이크로소프트도 Azure IoT Edge플랫폼[그림 2]이라는 구글과 유사한 컨셉의 플랫폼이 있고, 스마트 팩토리, 씨티 각각을 타겟으로 하는 솔루션들을 국내 대기업들도 개발 판매를 진행 중입니다.

 

위에 언급한 라이브러리 플랫폼들은 유료입니다. 오픈 소스 (무료 플랫폼) 경우에는 위의 경우들처럼 전체 파이프라인 다양한 엣지 디바이스 (센서 게이트웨이 혹은 헤비 라이트) 대해서 개발 가능하도록 편리하게 패키징 것은 찾기 힘든 같습니다. 그동안 엣지 디바이스에서의 스트림 프로세싱은 데이터 수집 전달 기능에 무게 중심이 있어 보입니다. 하지만, Apache Edgent 처럼 엣지 디바이스에서 다양한 프로세싱을 염두에 플랫폼들이 있지만, 실제로 사용해보면 연동성 면에서는 조금 미흡한 부분이 있습니다. 따라서, 일반 스트림 프로세싱 플렛폼 – Apache Flink, Spark structured streaming, Storm등도 연동성 측면에서 고려대상이 있습니다.

 

 

<그림1: Google Cloud Platform overview from https://cloud.google.com/iot-core/>

 

 

<그림 2: Microsoft Azure IoT platform heavy vs light edge concept from azure.microsoft.com>

 

아파치 스트리밍 플랫폼들

끝으로, 위에서 언급한 아파치 플랫폼 들에 대해 간략히 정리하겠습니다. 먼저, Hadoop Spark에서의 Map-reduce 모델은 다량의 데이터를 노드에 나누어 적용할 오퍼레이션을 맵핑한 다음, 처리된 데이터를 다시 key, value 쌍으로 스토리지에 저장하는 모델입니다. 네트워크 I/O 오버헤드를 고려하면, 데이터가 일정 이상 크기여야 오버헤드를 상쇄하고 이득을 있습니다. 따라서, 데이터의 batch 가지고 처리합니다.

하지만, 실시간 처리에서는 단일 이벤트 처리 관점에서의 지연 시간을 봤을 적합하지 않을 있습니다. 데이터 Batch 가지고 최적화된 모델은 throughput, , 처리량에 최적화된 모델이고, 실시간 처리에서는 이벤트당 처리 시간 latency 최적화가 이루어 져야 합니다.

 

실시간 처리에 최적화되어 가장 먼저 주목을 받은 것은 Apache Storm입니다. 하지만, 기존의 배치 프로세싱과 너무 다른 프로그래밍 인터페이스, 그리고 빅데이터의 가장 중요한 분야인 배치 프로세싱이 처음에 지원되지 않았습니다. 따라서, 다양한 경쟁 제품 들이 나오게 됩니다. Apache Flink는 기존의 Map-Reduce프레임 워크 들과 유사한 프로그래밍 인터페이스, 그리고 batch job을 통해 어느 정도 배치 프로세싱도 지원합니다. 

실시간 스트리밍 처리의 인기에 힘입어, 가장 인기있는 빅데이터 플랫폼 중에 하나인 Apache Spark에도 스트리밍 프로세싱 기능이 추가되게 됩니다. 개념적으로 batch를 쪼갠 mini batch를 만들어서 이벤트당 지연시간을 최적화하는 개념으로 구현되었습니다. 그리고, Apache Edgent처럼 엣지 디바이스에 최적화된 스트리밍 플랫폼도 등장합니다. 가볍게 만들기위해, 단일 노드안에서 실행하는 경우에 필요치 않은 여러가지 부가 매커니즘들을 없애서 가볍게 만들고, 원격으로 재설정 및 기기 생존을 체크하는 heart beat 등의 기능과 함께 구현되어 있습니다.

 

본 포스팅은 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

이번에 "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