안녕하세요! 이번에 소개할 논문은 PolyNet: A Pursuit of Structural Diversity in Very Deep Networks 입니다.
PolyNet은 ILSVRC2016 대회에서 3등을 차지한 모델입니다.
Inception-ResNet-v2 를 기억하시나요?! Inception-ResNet-v2는 3 종류의 인셉션 모듈을 사용하는 모델인데요, PolyNet은 Inception-ResNet-v2 구조에서 인셉션 모듈을 PolyInception module로 교체한 것입니다! 아래 포스팅에서 Inception-ResNet-v2 논문 리뷰를 확인하실 수 있습니다. 그러면 PolyInception module이 무엇인지 알아보겠습니다.
PolyIncetiop module
신경망의 성능을 향상시키는 방법은 일반적으로 (1) 깊게 (2) 넓게, 두 가지가 있습니다. 모델을 일정 수준보다 깊게하면 결과값이 사라지는 문제가 발생하는데, 아래 표를 보면 ResNet-269 이후부터는 깊이에 따른 성능 향상 효과가 감소하고, ResNet-1000 이후로는 결과값이 사라집니다. 그리고 모델을 넓게 하면 연산량이 제곱배로 상승하는 문제점이 발생합니다.
PolyInception module은 깊이와 넓이보다 인셉션 모듈 구조에 집중하여 성능을 향상시킨 모듈입니다. 깊이나 넓이를 증가시키는 것보다 인셉션 모듈 구조를 다양하게 구성하면 더 효과적으로 성능을 향상시킬 수 있다고 합니다.
기존의 inception-resnet 모듈은 다음과 같습니다.
아래는 PolyInception 모듈입니다.
기존의 인셉션 모듈을 F로 묶었을 때, 2개 이상의 인셉션 모듈로 구성한 모듈이 PolyInception 모듈입니다. PolyInception 모듈은 한 가지 구조로 정의된 것이 아니라 어떻게 F를 배치하느냐에 따라서 다양하게 정의됩니다.
PolyInception 이름이 붙여진 이유는 인셉션 모듈을 다항식(polynomidal)구조로 쌓았기 때문입니다. 입력값 I가 인셉션 모듈F를 거쳐 출력값 F가 생성된다고 가정하겠습니다. 인셉션 모듈이 F(x) 연산을 하여 I가 입력되면 F가 생성되는 것입니다. 위 가정 하에 4가지 모듈을 살펴보겠습니다.
(a) poly-2(a)의 결과값은 I + F + F^2 입니다.
(b) poly-2(b)의 결과값은 1 + F + F^2 입니다. a 구조보다 연산량이 2/3 적습니다.
(c) mpoly-2의 결과값은 I + F + FG 입니다. F와 G은 파라미터를 공유하지 않는 인셉션 모듈입니다. 이렇게 모듈을 구성하면 성능은 향상하지만 연산량이 더 많습니다.
(d) 2-way의 결과값은 I + F + G 입니다.
이 이외에도 mpoly-3(1+F+GF+HGF), poly-3(1+F+F^2+F^3), 3-way(I+F+G+H)등 차수를 더 높여서 구성할 수 있습니다.
PolyNet은 Inception-ResNet-v2에서 inception 모듈을 PolyInception 모듈로 대체한 것입니다.
모듈을 이렇게 구성하면 성능이 더 좋을까요?? 위 그림에서 A,B,C구간을 PolyInception 모듈로 대체하여 실험한 결과를 확인하겠습니다.
성능이 향상되었네요. 다양한 PolyInception 구조를 섞어서 사용하면 성능이 더 향상됩니다.
PolyNet
최종적으로 PolyNet은 A구간에 10개의 2-way PolyInception, B구간에 각각 10개의 poly-3와 2-way를 혼합한 PolyInception(20개), C구간에 각각 5개의 poly-3와 2-way을 혼합한 PolyInception(10개)을 사용합니다. 논문에 따로 사진 첨부는 안되어 있네요. 최종 PolyNet은 그 당시 state-of-thr-art 모델인 Inception-ResNet-v2의 성능을 뛰어 넘습니다.
참고자료
[1] arxiv.org/pdf/1611.05725.pdf
[2] towardsdatascience.com/review-polynet-2nd-runner-up-in-ilsvrc-2016-image-classification-8a1a941ce9ea