1. 서론
https://medium.com/may-i-lab/paper-review-rethinking-the-value-of-network-pruning-1-1967214db76c
너무나도 잘 정리가 되어있고, 이해가 쉽게 설명하여 정리해보며 내용을 재 배열하며 다시 복기하고자 한다. 논문에 대한 블로그 포스팅 방식을 어떻게 해야 좋은지 알려준 좋은 케이스인것 같다. 이번 포스팅은 개인 공부를 위한 재배열, 하이라이팅만 한 것이므로, 위 글을 참고하는 편이 더 좋을것이다.
2. Network Pruning의 개념
딥러닝 모델의 특성인 over-paramterization으로 인한 모델 추론 시의 높은 계산 코스트와 높은 memory footprint를 해결하기 위해 제시된 기술이다. 실제 보통 딥러닝 모델의 저장 용량을 줄이거나 모델의 추론 속도를 더 빠르게 하기 위해 사용된다
2.1. Network Pruning의 장점
처음부터 모델 구조를 찾는 것과 비교하여 몇 가지 장점이 있습니다. 첫 번째로는, 모델 재활용이 가능합니다. 또한 기존 방법이 좀 더 잘 될 것이라는 가설(채널 수를 임의로 조정한다던지, 특정 conv 모듈로 대체한다던지 등)을 기반으로 이루어진다면, pruning은 좀 더 근거를 가지고 경량화를 진행할 수 있습니다. 결국은 모델 구조를 찾고 학습을 다시 진행하는 구조는 동일한 것이 아니냐고 말할 수도 있지만, pruning은 기존과 달리 이전에 한 번 학습되었던 가중치를 초깃값으로 두고 fine-tuning을 진행하는 것이고 시작점이 다릅니다. 이 점 덕분에, 보통은 pruning의 fine-tuning 방법이 훨씬 빨리 수렴하는 모습을 보이며, 이는 해당 연구에 소모되는 자원이 훨씬 적다는 것을 의미합니다.
2.2. Network Pruning의 방식과 전제
학습 완료된 뉴럴 네트워크 모델 가중치들의 Hessian을 이용한 ‘saliency’라는 지표를 이론 상으로 도출하고 해당 지표를 기준으로 일정 비율의 parameter들을 네트워크 그래프에서 제거해 버린 다음 남은 가중치들만 fine-tuning하는 방법을 제시하고 있다
하지만 결과적으로 해당 가중치의 값이 실제 이용되는 건 ‘기존과 다른 구조’의 모델입니다. 보통 가중치 초기화를 진행하는 기법은 해당 모델의 구조(연결된 뉴런의 수 등)와 관련이 있습니다. 그렇다면, 원래 잘 동작하던 가중치의 값을 그대로 초깃값에 쓰는게 정말로 맞는 걸까요? 해당 가중치가 원래 가중치가 하던 역할과 의미적으로 얼마나 비슷할까요? 다음은 pruning의 과정입니다.
해당 과정은 굉장히 당연한 것처럼 보이지만, 사실 두 가지의 전제가 숨겨져 있습니다.
첫 번째는 큰 Target network를 선정한 후 그것을 pruning 한다는 것입니다. 왜 큰 Target Network를 선정하냐고 묻는다면, 당연히 기존의 target network가 클 수록 더 정확도가 높기 때문일 것이고, pruning 과정에서 없어지는 잉여의(redundant) 가중치들이 원래 모델에 끼치는 영향이 덜했을 것이라 더 작은 모델에서 자르는 것보다 죄책감 없이 (모델에 영향을 덜 주면서) 자를 수 있을 것이라고 여길 수 있기 때문입니다. 또한 이 점은 기존의 여러 연구들에서, 큰 모델을 자른 것과 작은 모델을 처음부터 학습한 것을 비교했을 때 전자가 더 좋다는 점을 보여주었기 때문에 더 당연하게 받아들여졌습니다.
두 번째 전제는 prune되어 남은 구조와 그 구조가 유지하고 있는 가중치의 값이 둘 다 중요한 의미를 가진다는 점입니다. 다른 의미로, magnitude 기반 prune을 진행한다고 할 때, 어떤 가중치가 2.0의 값을 가지고 있어서 잘리지 않았다고 한다면 그 가중치는 당연히 2.0의 값을 가지고 있었기 때문에 중요하고, 따라서 2.0이란 값은 fine-tuning 과정에도 어떻게든 반영되어야 한다는 점을 당연하게 생각할 수 있습니다.
2.3. 기존 Network pruning의 방식에 대한 반론
하지만 이 논문에서는 위의 두 전제에 대해 반론을 제기합니다. 정확히는, 해당 전제들은 structured pruning 방법론들에 대해서는 참이 아닐 수도 있다는 주장을 합니다. 논문에서는 주로 structured pruning의 두 가지 현상에 대해 이야기 하고 있습니다.
첫 번째 현상은, predefined network architecture로 structured pruning을 진행한다고 할 때, 해당 target model을 그냥 랜덤 초기화를 진행하여 학습하는 것이 더 좋다는 것입니다. 예를 들어, 기존 resnet18 모델의 모든 채널 수를 2배(resnet18X2)로 늘려서 학습시킨 후, 모든 레이어에서 절반의 filter를 prune하는 방식으로 네트워크를 얻는 것보다 그냥 원래 채널 수를 가진 모델을 학습하는 것이 결과적으로는 정확도가 더 좋다는 것입니다. 아무리 resnet18X2 모델의 pruning 전의 정확도가 더 높다고 하더라도요.
두 번째 현상은, auto-discovered network architecture을 structured pruning을 통해 얻고자 할 때, 얻어진 architecture를 마찬가지로 처음부터 학습하는 것이 fine-tuning과 비슷하거나 더 좋은 정확도를 보인다는 것입니다
위의 두 현상을 정리하면, 결국 structured pruning 방법들에 대해서 최대한 용량 대비 정확도를 확보하려면 남겨진 가중치 값들을 그대로 가져와서 fine-tuning 하는 것이 아니라, 남겨진 가중치 값들을 무시하고 random initialization (ex. Xavier, He, etc.)을 진행하여 학습해야 한다고 할 수 있습니다. 즉, 우리가 pruning을 통해 얻는 것은 남겨진 ‘구조’이지, ‘구조의 내용물’은 중요하지 않다는 점을 논문에서는 강조하고 있습니다.
위의 두 현상을 통해, 논문에서 주장하는 pruning algorithm에 대한 의견은 다음과 같습니다.
- pruning 대상이 되는 첫 모델은 꼭 over-parameterized 될 필요가 없다
- pruning 후 남은 가중치들의 ‘값’ 자체는 그리 optimal 한 것이 아니며, 이는 오히려 bad local minimum으로 유도할 수 있다
따라서, 저자들은 다른 시각으로 보면 automatic structured pruning 알고리즘들은 중요한 ‘weight’을 찾는 과정이라기 보다는, 효과적인 network structure을 찾는 과정에 더 가깝다고 해석할 수 있다고 주장하고 있습니다. 즉 filter/channel pruning의 경우는 filter/channel 중 어떤 filter/channel을 자른다는 의미보다는, 단순히 해당 convolution filter의 수를 조절하는 느낌이 더 강하다는 뜻입니다. (해당 사실을 바탕으로, 본 논문의 Section 5에서의 몇 가지 실험을 통해 효과적인 architecture에 대한 몇 가지 가이드 라인을 제시하고 있습니다.)
// 잠깐, 그렇다면 unstructured pruning의 경우엔??
- MNIST와 같은 작은 benchmark에서는 structured와 마찬가지로 비슷한 정확도
- ImageNet과 같은 large-scale benchmark에서는 원래 알려져 있던 대로 fine-tuning하는 방법이 더 좋은 결과
// fine-tuning이 무조건 나쁜건가? 장점은?
fine-tuning을 하게될 때의 가장 큰 장점은 학습 속도로, fine-tuning은 from scratch에 비하면 거의 1/10 정도의 iteration만 수행할 정도로 빠르고, 그렇다고 해서 정확도가 엄청나게 많이 떨어지는 것도 아닙니다.
Pruning 방법은 미리 레이어마다 자를 비율을 정해 놓는 predefined과 자동으로 학습과정에서 찾게하는 automatic으로 나누고, automatic에서도 filter/channel 단위로 잘라내는 structured pruning과 weight element 단위로 잘라내는 unstructured pruning으로 구분할 수 있습니다.
2.4. pruning 방식 - Weight Pruning
Weight Pruning의 가장 큰 장점은 그 압축 비율에 있습니다. 각각 가중치들이 제거될지 아닐지를 개별적으로 판단하기 때문에, 특정 구조 단위로 가중치들이 판별되는 structured pruning에 비해 일반적으로는 더 많은 가중치들이 제거될 수 있습니다. 다만 weight pruning의 가장 큰 단점은 pruning 결과가 sparse matrix로 나타난다는 점인데, 실제로 우리가 사용하는 PyTorch나 TensorFlow 라이브러리 상에서는 해당 sparse matrix로 추론하는 것이 실제로 이득으로 이어지지 않는다는 점이 뼈아픕니다.
따라서 보통 weight pruning은 실제 이용보다는 이론상의 neural network 구조에 대해 연구하는 목적이나, 혹은 실제로 이용한다면 FPGA 등 하드웨어적인 사항들이 추가적으로 언급되는 경우도 꽤나 많습니다.
2.5. pruning 방식 - Structured Pruning
Weight Pruning의 반대는 Structured Pruning입니다. 앞서 잠시 언급되었듯, structured pruning은 convolution layer 가중치의 채널, 필터, 혹은 특정 구조의 그룹 단위로 제거 되는지의 여부를 판단하는 방법입니다. Structured pruning의 장단점은 weight pruning과 정확히 반대라고 보시면 됩니다. 비교적 그 압축 비율이 낮지만, 결과적으로 만들어진 모델의 architecture가 일반적인 라이브러리나 프레임워크와 완벽하게 호환가능하기 때문에, 실제 사용 용도로 pruning 연구들을 찾아보게 되면 structured pruning 쪽으로 접하게 되실 겁니다
3. 실험
Training Budget란 Pruning 후의 모델을 처음부터 새로 학습시킬 때 어느 정도의 epoch 동안 학습시켜야 하는지를 뜻합니다.원래의 큰 모델을 학습시킬 때와 같은 epoch 동안 학습하면, 작은 모델의 경우 한 epoch에 더 적은 계산이 이루어지므로 공정하지 않다고 주장하고 있습니다. 따라서, 저자들은 pruned 모델과 원래의 모델의 FLOPs를 계산하고 비교하여, 결과적으로 두 모델의 학습 동안 이뤄지는 계산량이 동일하도록 pruned 모델의 epoch을 늘리도록 하며, 이를 Scratch-B라고 부르고 있습니다.
반대로 단순히 같은 epoch 동안 학습을 진행하는 것을 Scratch-E라고 부릅니다.
Rethinking 논문의 결과로는 Scratch-E는 fine-tune과 거의 비슷한 정확도를 보여주며, Scratch-B는 확실하게 Scratch-E와 fine-tune보다 높은 정확도를 보여줍니다. 위의 표에서 볼 수 있는 결과는 크게 두 가지입니다. 첫 번째로, 일단 rethinking 논문에서 주장하는, predefined structured pruning의 경우 scratch 부터 학습하는 것이 fine-tuning보다 좋다는 것을 이 결과는 뒷받침하고 있습니다
3.1. predefined structured pruning
3.1.1. L1-nrom based Filter Pruning
L1-norm based Filter Pruning (Li et al., 2017)은 filter/channel pruning의 가장 초기 논문 중 하나입니다. 해당 논문에서 말하고 있는 filter pruning은 매우 간단한 방법으로, 학습시킨 후 각 필터마다 L1 norm, 즉 필터에 속한 가중치 값들의 절댓값의 합을 구해 결과값이 작은 순서대로 pruning하는 방법입니다. 즉 절댓값이 큰 필터일수록 중요하다고 가정하는 것입니다.
표를 보시면 아시겠지만, VGG-16의 경우 64%정도의 가중치를 제거할 수 있었지만, ResNet의 경우 13.7%, 32.4%, 10.8% 등으로 제거한 가중치의 양이 그리 많다고 볼 수는 없다는 점입니다. 여기서 저희는 Filter의 L1-norm이 해당 Filter의 중요도를 나타내기에는 부족하다는 사실을 유추할 수 있습니다.
Rethinking 논문의 결과로는 Scratch-E는 fine-tune과 거의 비슷한 정확도를 보여주며, Scratch-B는 확실하게 Scratch-E와 fine-tune보다 높은 정확도를 보여줍니다. 위의 표에서 볼 수 있는 결과는 크게 두 가지입니다. 첫 번째로, 일단 rethinking 논문에서 주장하는, predefined structured pruning의 경우 scratch 부터 학습하는 것이 fine-tuning보다 좋다는 것을 이 결과는 뒷받침하고 있습니다.
3.1.2. ThiNet
ThiNet (Luo et al., 2017)은 weight 값 자체의 무언가가 아니라, 다음 layer의 activation 값에 가장 작은 영향을 주는 channel들을 greedy하게 자르는 방법입니다. 여기서 짚고 넘어가야 할 점은, weight filter의 channel을 자르는 것은 결국 input tensor의 특정 channel을 자르는 것이므로, 그 이전 layer의 filter를 자르는 것과 동치라는 것입니다.
ThiNet에서 풀고자 하는 최적화 문제는 아래와 같습니다. 특정 layer를 두고, 해당 layer의 필터 채널 일부가 잘려진 후 나오는 output이 x_hat이라고 할 때, 원래의 output y와의 차이가 최소화되는 채널을 없애도록 하는 것입니다.
위의 최적화 문제를 잘 살펴보면, 결국 prune 후의 필터 채널들의 output이 원래와 차이가 적으려면 잘려진 채널들에 의해 생성되는 input element 들의 전체 합이 가장 작은 것을 찾는 것과 같습니다. 즉 아래의 최적화 문제와 같습니다.
여기서 x와 y는 training imageset과 그 label이 아닌, 아래와 같이 특정 layer 사이에서의 input tensor와 output tensor element 간의 관계입니다. 여기서 i가 아니라 i+1이 되어 있는 이유는, 해당 과정은 i+1번째 필터의 채널들을 pruning하는 것이고, 결론적으로 i번째 필터를 자르는 것과 동치가 되기 때문입니다.
아래는 ThiNet을 이용하여 Rethinking 실험 프로세스를 진행한 결과입니다. ThiNet의 결과도 L1-norm과 마찬가지로, 대부분의 경우에서 Scratch-B가 제일 우세하며, ResNet의 경우 Scratch-E도 fine-tuning 보다는 더 좋은 결과를 보여주고 있습니다. 다만 VGG의 경우, 특히 VGG-Tiny의 경우는 Scratch-E가 fine-tune보다 좋지 않은 모습을 보여줍니다. 논문에서는 해당 결과에 대해, VGG-Tiny의 경우 굉장히 많은 파라미터가 잘려나가기 때문에 Scratch-E만 진행할 경우 training budget 면에서 굉장히 많은 손해를 본다고 설명합니다.
3.1.3. Regression based Feature Reconstruction
Regression based Feature Reconstruction (He et al., 2017b)은 특정 레이어를 기준으로 그 다음 레이어의 feature map reconstruction error을 최소화하는 방향으로 레이어의 channel을 제거하는 방안을 제시하고 있습니다. 바로 위에서 설명드렸던 ThiNet과 굉장히 비슷한 원리로 생각할 수 있는데, 다른 점이라면 이 논문에서는 ThiNet과 달리 LASSO regression, 즉 가중치의 L1-norm을 고려하는 방식으로 해결책을 제시한다는 점입니다.
위는 해당 논문에서 풀고자 하는 optimization problem입니다. 보시면 아시겠지만, 단순히 cross entropy loss term에 L1-norm을 추가하는 방식 등을 사용하는 것이 아닌, 위와 같은 최적화 문제를 (1) 일단 가중치 W를 고정시키고 channel selection 시 사용되는 scalar mask β를 구한 후, (2) 다시 β를 고정시킨 후 reconstruction error을 최소화하는 W를 구하는 단계를 반복적으로 진행하여 pruning을 진행한다고 합니다.
LASSO regression을 사용한 channel pruning 논문 또한 scratch-B가 제일 우수한 모습을 보여주었습니다.
3.2. automatic structured pruning
3.2.1. Network Slimming
Network Slimming (Liu et al., 2017)은 각각의 channel에 주어지는 batch norm scaling factor에 대해 L1 norm loss term을 classification loss에 추가한 후, 이 scaling factor를 기준으로 작은 channel일수록 낮은 중요도로 보는 꽤나 직관적인 방법입니다.
여기서 이 network slimming이 automatic structured pruning인 이유는, 해당 scaling factor들이 각각의 레이어 뿐만이 아니라 모든 레이어에 걸쳐서 비교되기 때문에, 어떤 레이어에서 얼마만큼의 channel들이 잘려나갈지는 해당 과정이 이루어지기 전까지는 모른다는 점입니다.
- Rethinking-Network slimming
Network slimming에 Fine-tune, scratch-E, scratch-B를 적용한 결과는 위와 같이 scratch-B가 대부분 가장 앞서고, scratch-E는 fine-tune보다 살짝 떨어지거나 혹은 비슷한 모습을 보이고 있습니다.
3.2.2. Sparse Structure Selection
Sparse Structure Selection (Huang & Wang, 2018)은 Network Slimming에서 사용하던 방법처럼 특정 structure에 대해 부과된 scaling factor을 바탕으로 pruning 여부를 결정하는 방법입니다. 아래의 그림은 Sparse Structure Selection에서 하는 방법입니다.
Sparse Structure Selection의 방법
위의 그림에서처럼, 해당 논문에서는 Block(가장 오른쪽), Group(가운데 부분), 그리고 Neuron(가장 오른쪽)에 scaling factor λ를 부여한 후 해당 λ를 Accelerated Proximal Gradient 방법으로 학습시키는 과정을 보여주고 있습니다.
아래는 이 Sparse Structure Selection에 Rethinking 방법론을 적용한 결과로, 마찬가지로 scratch-B가 가장 좋은 정확도를 보이는 것을 볼 수 있습니다.
- Rethinking- Sparse Structure Selection
위의 network slimming과 sparse structure selection을 통해, automatic pruning이라고 하더라도, structured pruning의 경우는 scratch-B가 가장 올바른 학습방법이라고 생각될 수 있습니다.
3.3. Unstructured Magnitude-based pruning
Unstructured magnitude-based weight pruning (Han et al., 2015)는 최근의 pruning 논문들 중 가장 초기작이라고 할 수 있으며, 기존의 딥러닝 모델들이 굉장히 over-parameterize 되어 있기 때문에 단순히 weight의 magnitude (절댓값) 기준으로 작은 것들을 잘라낸 후 fine-tuning 하는 것만으로도 많은 양의 가중치들을 잘라낼 수 있다는 점을 보여주었습니다.
Magnitude based weight pruning
일단 weight pruning의 특징으로는, 어떤 weight이 어떻게 잘려나갈지 모르므로 unstructured pruning이자 automatic pruning의 한 종류로 분류될 수 있습니다. 하지만 이렇기 때문에 결과로 얻어진 희박한 구조를 실제 속도/용량 이득으로 가져오려면 하드웨어적인 특별한 처리가 필요하다는 단점이 있습니다. 그럼에도 불구하고 weight pruning이 계속 제기되는 이유 중 하나로는, 일반적으로 structured pruning에 비해 굉장히 많은 양의 weight들을 제거할 수 있기 때문입니다. 이는 아래 표를 보시면, 위의 다른 structured pruning과는 달리 95%라는 굉장히 많은 수치의 weight까지도 pruning을 시도했다는 사실을 보실 수 있습니다.
- Rethinking- Magnitude based weight pruning
Weight Pruning에게 따로 section이 할당된 것을 보면, unstructured pruning의 경우 앞서 살펴보았던 structured pruning 기법들과 다른 무언가가 있음을 짐작할 수 있습니다. 가장 먼저 CIFAR 데이터셋들에 대한 결과를 보겠습니다. 80% 이하의 weight들을 pruning 한 경우, scratch-E는 가끔씩 fine-tune보다 좋지 못하지만 scratch-B의 경우 더 좋은 결과를 보여줄 수 있는 것처럼 보입니다. 하지만 95% 이상으로 굉장히 많은 weight들이 pruning 된 경우, fine-tuning은 from scratch 방법보다 좋은 모습을 보여주는 모습을 보여주고 있습니다. ImageNet과 같은 큰 benchmark에서는 이 모습이 더 두드러집니다. Scratch-E는 물론이고, 대부분의 경우에서 Scratch-B가 fine-tune보다 좋지 못한 모습을 보여주고 있습니다.
저자들은 이 현상이 굉장히 sparse한 network를 직접 학습시키는 것이 어렵다(CIFAR)라는 이유, 혹은 dataset 자체가 굉장히 학습시키기 어렵고 복잡하기 때문(ImageNet)에 unstructured pruning에서 scratch-B가 fine-tune보다 좋지 못한 모습을 보여준다고 가설을 세우고 있습니다. 또한 추가적인 제안으로, unstructured pruning은 structured pruning과 달리 가중치 분포를 기존과 굉장히 다르게 바꿔놓는다는 현상을 보이는데, 이것이 원인이 되지 않겠느냐는 주장을 하고 있습니다.
아쉽게도 저자들은 다른 unstructured pruning (Dynamic Network Surgery, Guo et al., 2016)으로 실험해보지 않고 더 이상의 분석도 진행하지 않은 것처럼 보여 정확한 원인은 파악할 수 없지만, 그래도 굉장히 흥미로운 현상을 제시하여 해당 원인에 대해 추가적인 연구의 가능성을 던져주고 있습니다.
4. Structured와 Unstructured Pruning의 weight 분포 변화 비교
그 결과 structured pruning의 경우 automatic이든 predefined이든 상관없이 scratch-B로 학습시키는 것이 일반적으로 좋은 성능을 보여준다는 점을 배울 수 있었습니다. 즉 기존의 pruning 방법론들에서 주로 찾고자 하는 것은 어떤 위치에 있는 특정 weight의 값이 중요하다는 것보다는, pruning 결과로서 남은 architecture 자체가 중요하다는 점을 시사하고 있습니다.
위의 그래프 중 왼쪽의 그래프는 Automatic Pruning 중 하나인 Network Slimming의 Pruning 결과와, 해당 Pruning 결과와 동일한 파라미터 수를 가지도록 모든 channel에서 uniform하게 prune을 진행한 결과를 비교한 모습입니다. 모든 경우에서 network slimming으로 얻은 architecture가 월등한 모습을 보임을 알 수 있어, 확실히 automatic pruning에서 얻어지는 architecture가 굉장히 efficient하다는 점을 알 수 있습니다. 오른쪽 그래프는 unstructured pruning인 magnitude based pruning으로 같은 실험을 진행한 결과며, 마찬가지로 uniform하게 prune 시켜서 얻은 구조보다 pruning을 거쳐 얻은 구조가 훨씬 efficient하다는 사실을 알 수 있습니다.
하지만 Uniform Pruning이 Automatic Pruning보다 항상 좋은 모습을 보여주지는 못했습니다. 위의 그래프에서 볼 수 있듯이, PreResNet이나 Desnet 같은 비교적 최신의 Network Architecture들에서는 automatic pruning과 uniform pruning 결과의 차이가 그리 크지 않다는 사실을 볼 수 있었습니다. 저자들이 해당 pruning 후 남은 weight의 비율을 stage 별로 살펴본 결과, 해당 구조들에서는 automatic pruning을 진행하더라도 stage 별로 거의 uniform하게 pruning을 진행하는 모습을 보였고, 따라서 uniform pruning과 거의 차이가 없게 되었다는 것을 알 수 있었습니다. 이는 VGG에서 automatic pruning 결과가 stage 별로 굉장히 non-uniform 하다는 점으로 뒷받침됩니다.
5. Generalizable Design Principles from Prune Architectures
저자들은 pruning에서 얻은 발견들을 바탕으로, architecture design 시 general하게 적용할 수 있는 원리들을 제안하고 있습니다. 이를 위해 저자들은 몇 가지 실험들을 진행했습니다.
Network Slimming을 이용하여 pruning을 진행한 후의 architecture 결과에서, 각각 stage의 평균적인 channel 개수를 구하여 새로운 네트워크의 stage 별 channel 개수로 선정하였고 이를 ‘Guided Pruning’이라고 설정하였습니다. 마찬가지로 magnitude based pruning으로 얻은 average sparse pattern을 바탕으로 architecture kernel의 구조를 설계한 것을 ‘Guided Sparsification’이라 하였고, 그 결과는 unstructured pruning과 비슷한 성능을 보여줬습니다.
하지만 여기까지만 보면 그렇게 효율적인가에 대해서는 논란의 여지가 있을 수 있습니다. 따라서 저자들은, 해당 Guided design pattern을 pruning 대상이 되었던 architecture가 아닌, 별개의 architecture에 적용한 후 얼마나 효과적으로 해당 구조가 동작하는지 실험해보았습니다. 즉, VGG-16+CIFAR-10에서 얻은 Guided Architecture가 VGG-19+CIFAR-100에 적용되었을 때의 결과를 본 것입니다. 이는 논문에서 “Transferred Guided Pruning/Sparsification”이라 부르고 있습니다.
결과를 보면, Guided Pruning과 Transferred Guided Pruning 모두 좋은 결과를 내어, Guided를 이용하는 방법이 굉장히 효과적이라는 사실을 확인할 수 있었습니다.
6. 이론을 바탕으로한 활용 및 구현
'ML' 카테고리의 다른 글
인공신경망(SOLOv2)의 data pipeline의 구성과 Resized model의 효과 (0) | 2021.08.13 |
---|---|
SOLOv2 Structured pruning (MMDetection, pytorch structured pruning) (1) | 2021.08.07 |
HOG (Histogram of Oriented Gradient for human detecting) (0) | 2021.07.21 |
SIFT (Scale-Invariant-Feature TRansform)를 활용한 이미지 특징 추출 및 매칭 알고리즘 (1) | 2021.07.20 |
SOLOv2 논문 리뷰 (0) | 2021.07.18 |