안녕하세요. 

'Going deeper with convolutions' 라는 논문을 읽고 내용을 한번 정리해보고자 글을 작성하게 되었습니다.


 

https://kmhana.tistory.com/3

 

딥러닝을 위한 논문 가이드

☆딥러닝 공부를 위해서 꼭 읽어야 할 논문(사이트)들의 리스트를 정리해보고자한다. 순수히 개인적인 의견으로, 사용자의 관점에서 평가했다. 실제 AI 프로젝트를 진행할 때 도움이 되었던 논

kmhana.tistory.com

딥러닝 논문에 대해서 정말 정리가 잘되어있어서 어떠한 논문으로 시작할지 고민하던 중 많은 도움을 얻었습니다.

혹시나 어떤 논문을 보아야할지 고민이 되신다면 해당 사이트에 들어가셔서 읽어보시면 큰 도움이 되실 것 같습니다.

 

많은 논문 중 해당 논문을 선택한 이유는 ILSVRC 2014 에서 우승한 모델이기도 하며, 구글넷의 시초가 되는 모델이어서 좀 더 자세히 알고 싶어 선택하게 되었습니다.

 


1. Introduction 

Introduction에는 GoogleNet이 나오게 된 배경과, 이미지 인식 및 물체 탐지에 대한 딥러닝 기술의 동향에 대해서 소개하고 있습니다.

 

딥러닝에 더불어 CNN 분야에서 엄청난 발전이 이루어졌습니다. 고무적인 것은 이러한 발전이 발전된 하드웨어, 데이터 셋의 증가, 커진 모델만의 결과가 아닌 새로운 아이디어와 알고리즘 그리고 향상된 네트워크 구조에 의한 발전이라는 것입니다. 구글넷은 2012년 ILSVRC에서 우승했던 모델 보다도, 12배 적은 파라미터를 사용하며 정확도 또한 높습니다. 또한, 물체 탐지 분야의 발전은 단순히 심층 네트워크의 효율성 또는 커진 모델에 의한 것이 아니라 심층 구조와 기존 컴퓨터 비전의 시너지로 부터 이뤄냈습니다.

 

또 다른 주목할만한 요인은 모바일와 임베디드 컴퓨팅 분야에서 알고리즘의 효율성이 대두되고 있다는 점입니다.

이에 모델은 추론시간 내에 15억번의 multiply-adds 연산을 넘지 않도록 설계되어 합리적인 cost로 실사용 되게끔 설계되었습니다.

 

논문에서는, Inception이라는 코드네임을 가진 컴퓨터 비전의 심층 신경망의 효율성에 초점을 맞출 것입니다.

 

*정말 놀란 점은, 파라미터 수를 12배 가량 줄였다는 것입니다.

12배 감소로 인하여, Overfitting의 문제와 Computational Cost를 과연 얼마나 개선할 수 있을지 기대가 되면서도 어떻게 파라미터수를 12배 가량 감소할 수 있었는지 궁금하였습니다. 새삼 구글은 정말 대단하다는 것을 느낄 수 있는 대목이었습니다.


 

2. Related Work

CNN은 Convolution layer에 1개 이상의 FC Layer가 따라오는 표준적인 구조를 가지고 있습니다. ImageNet과 같이 더욱 커진 데이터셋에 대하여 Overfitting 문제를 다루기 위해 dropout을 적용하며 레이어의 갯수와 크기를 증가시키는 것이 최신 트렌드 입니다.

Max-pooling layer들이 정확한 공간적 정보에 대하여 손실을 야기할 수 있음에도 불구하고, AlexNet과 같이 같은 Convolutional Network 구조에서 성공적으로 적용되었습니다. Inception 모델의 모든 필터는 학습하며, Inception layer들이 반복되어 22개 레이어를 가진 GoogLeNet모델을 구성합니다.

 

Network-In-Network는 신경망의 표현력을 증가시키기 위해 Lin et al.에 의하여 제안된 접근법 입니다. NIN을 Convolution layer에 적용하는 것은 1x1 Convolutional layer에 ReLU 함수를 적용하는 것과 같은 관점으로 볼 수 있습니다. 이러한 방법은 현재 CNN 파이프라인에 쉽게 적용될 수 있도록 해줍니다. GoogLeNet도 이러한 접근법을 사용했는데요. 다만, GoogLeNet에서는 1x1 Convolution은 두가지 다른 목적을 가집니다. 첫번째로, 차원 감소 모듈로써 사용하여 병목현상을 제거하는 것이고, 두번째로는 엄청난 성능 감소 없이 네트워크의 깊이와 넓이를 증가시키기 위함입니다.

 

현재 물체 탐지 분야에서 가장 앞서고 있는 접근법은 R-CNN입니다. R-CNN은 두 단계를 거쳐 물체를 탐지합니다. 이에 우리는 우리의 탐지 기법 중 이와 유사한 파이프 라인을 채택하였습니다. 다만, 두 단계에 대하여 끊임없이 발전 시키는 방법과 더 나은 Bounding box proposal의 범주화를 위한 접근법들을 연구하고 있습니다.


 

3. Motivation and High Level Considerations

심층신경망의 성능 증가를 위한 가장 쉬운 방법은 depth(Level의 수)와  width(각 Level의 유닛의 수 증가)를 증가시키는 방법이 있습니다. 이 방법은 좋은 모델을 훈련시키는 쉽고 안전한 방법이지만 두가지 결점이 존재합니다. 큰 사이즈는 아주 많은 수의 파라미터를 의미하는데 이는 학습데이터가 제한된 상황에서 overfitting을 야기하기 쉽습니다.  고품질의 학습 데이터 셋을 만드는 것은 힘들고 비용이 많이 드는 작업이기 때문에 심각한 병목현상을 야기할 수 있습니다. 

 

또 다른 결점으로는 컴퓨팅 resource의 사용량 증가입니다. 예를들어, 심층 비전 신경망에서 일률적은 filter 수의 증가는 연산량을 제곱으로 증가시킵니다. 만약 추가된 기능이 비효율적으로 사용된다면 이는 많은 양의 컴퓨팅 자원의 낭비로 이어집니다. 

 

두가지 문제를 해결하기 위한 가장 근본적인 방법은 Convolution 안이라 할지라도 fully-connected 구조에서 sparsely connected 구조로 변경하는 것입니다. 핵심은 데이터셋의 확률분배를 크고 sparse한  심층신경망으로 표현할 수 있다면, 가장 최근 레이어의 활성화에 대한 연관성 분석과 연관성이 높은 클러스터링 뉴런을 바탕으로 가장 최적의 네트워크 구조를 구성할 수 있다는 것입니다. 이를 수학적으로 증명하기 위해서는 강력한 조건이 요구되지만, 핵심은 덜 엄격한 조건하에서도 실용적으로 적용 가능하다는 것입니다(by Hebbian principle).

 

다만, 오늘날의 컴퓨팅 환경은 균일적이지 않은 sparse data 구조를 다루기에는 cache 누락과 색인에 대한 오버헤드로 인하여 매우 비효율적입니다. 더군다나, 빠른 dense 행렬곱을 가능케하는 라이브러리의 성능 개선과 CPU와 GPU의 사용으로 인하여 그 차이는 점점 벌어졌습니다. 그럼에도 불구하고, sparse한 matrix 연산에 대한 많은 논문들이 sparse matrix를 상대적으로 dense한 submatrix로 클러스터링 하는 것을 제안하였고, 연산에 있어서 실용적인 성능을 보여주었습니다. 이에 Inception 구조는 위 제안을 바탕으로 sparse 구조를 구성하기 위한 정교한 네트워크 구조 구축 알고리즘의 결과를 측정하고 가설의 결과물을 보충하기 위한 하나의 case study로써 시작되었습니다.  추측에 근거한 작업에도 불구하고 우리는 Learnig rate, Hyperparmeter 그리고 발전된 학습 기법을 튜닝하는 것을 통하여 Inception 구조가 Localization과 object detection에 좋은 성능을 보임을 알 수 있었습니다 . 다만, 한가지 주의할 점은 제안된 구조가 컴퓨터 비전에 대하여 성공적이라 할지라도 이것이 의도했던 원칙에 의한 결과인지는 장담할 수 없습니다.


 

4. Architectural Details

출처: https://arxiv.org/pdf/1409.4842v1.pdf

* patch는 fliter라고 보셔도 무방합니다. 

* path-alignment issue란, 사이즈가 짝수일 경우 patch의 중심을 어디로 해야할지 정해야 하는 issue를 의미합니다.

 

Inception 구조의 핵심은 CNN에서 최적의 local sparse 구조를 이용가능한 dense component로 구성하는 방법을 찾는 것입니다. 즉, 최적의 local 구조를 찾아 공간적으로 반복하기만 하면 됩니다. Arora et al.의 연구는 마지막 레이어의 연관성을 분석하여 그들을 연관성에 따라 클러스터링 하는 layer-by layer 구조를 제안하였습니다. 이러한 클러스터링은 다음 레이어의 유닛을 구성하고 이전 레이어의 유닛과 연결 될 것입니다.  그렇게 되면 input에 가까운 낮은 레이어 들에서 연관성이 있는 유닛들은 local region에 집중되게 됩니다. 즉, 단일 region에 많은 클러스터가 집중될 것이며, 이는 NIN에서 제안되었다시피 다음 레이어의 1x1 convolution 레이어에 의해 구성될 수 있습니다.

큰 patch를 기반으로한  convolution에 의하여 cluster들이 공간적으로 넓게 퍼질 것이며, 이를 바탕으로 더욱 커진 region에 대한 patch의 수를 줄일 수 있습니다.  또한, path-alignmet issue들을 피하기 위하여 Inceptuon 구조의 필터 사이즈는 1x1, 3x3, 5x5로 제한하였습니다. (다만 이 결정은 필요성에 의한 것이 아닌 편하기 위한 결정입니다.)  추가적으로, pooling 연산은 필수적인 요소이기 때문에 Figure2(a)와 같이 대체 가능한 parallel pooling path를 추가해준다면  부가적인 이로운 효과를 가질 것입니다.

 

이러한 "Inception module"들이 서로 쌓이게 된다면, output의 연관성은 달라지게 될 것입니다.  높은 레이어에서 더욱 추상화된 feature들이 추출 되기 때문에, 공간적 집중도는 감소될 것이며 이는 레이어가 높아질 수록 3x3, 5x5 convolution의 비율이  증가될 것임을 의미합니다.

 

하지만 Figure 2(a)와 같이 초기 형태에 한하여 Inception Module들은 한가지 큰 문제점이 있습니니다. 적은 수의 5x5 convolution을 사용한다 하더라도 많은 수의 필터를 사용하게 된다면 비용이 너무 비싸질 수 있다는 것입니다. 이 문제는 pooling 유닛 추가되면 더욱 두드러 지는데, convolution layer에 pooling layer가 결합되게 된다면 엄청난 채널 수의 증가를 야기합니다. 설령 이러한 구조에 최적의 sparse 구조를 적용한다하더라도 매우 비효율적이며, 적은 단계로도 엄청난 계산량 증가를 일으킵니다.

 

그래서 이러한 문제점들을 해결하기 위하여 제안된 두번째 아이디어는 계산 요구량이 증가되는 부분에 차원 축소를 적용하는 것입니다. 

이는 성공적인 임베딩을 위한 것인데요. 적은 차원의 임베딩일지라도 큰 이미지 patch에 대한 많은 정보를 포함할 수 있습니다. 다만, 임베딩은 압축된 형식이기 때문에 처리하기 매우 어렵습니다.  또한, Arora et al.의 연구 조건에 따르면 우리는 representation을 최대한 sparse 하게 유지해야하며 신호들을 압축할 수 있어야 합니다. 이를 위해, cost가 큰 3x3 & 5x5 convolution 전에 계산량 감소를 위한 1x1 convolution이 사용됩니다. 그리고 1x1 convolution을 사용함으로써 계산량 감소에 더불어 ReLU 함수를 적용이라는 두가지 목적을 달성할 수 있습니다. 그 최종 결과는 Figure 2(b)와 같습니다.

 

*ReLU 함수를 적용한다는 것은 레이어에 비선형성을 더해준다는 것과 같습니다.

*따라서, 1x1 convolution 추가는 차원 감소를 통한 연산량 감소 & 레이어에 비선형성을 더해주는 역할로 두가지 이점이 생겨나게 됩니다.

 

이 구조의 장점 중 하나는 계산 복잡도의 증가를 신경쓰지 않고도 각 단계에서 유닛의 수를 늘릴 수 있다는 것입니다. 이는 차원 감소를 유기적으로 활용함에 따라, 큰 patch size의 차원 convolution에 앞서 차원을 감소 시킴으로써 input filter들의 수를 조절할 수 있기 때문입니다. 또 다른 장점은 서로 다른 scale의 feature들을 한번에 추상화 할 수 있다는 점입니다.

 

발전된 컴퓨팅 resource 사용을 바탕으로 stage의 수와 더불어 각 단계의 width도 증가시킬 수 있습니다. 성능은 약간 떨어질지 모르나, 값 싼 cost로 활용할 수 있다는 것이죠. 또한, Inception 구조에 포함되어 있는 장치(knobs and levers)들을 통한 컴퓨팅 자원의 밸런싱을 바탕으로 non-Inception 구조를 가진 비슷한 성능의 네트워크보다 2 ~ 3배 빠른 네트워크를 만들 수 있음을 알아내었습니다. 


5. GoogLeNet

출처: https://arxiv.org/pdf/1409.4842v1.pdf

ILSVRC14에 제출한 팀 이름인 GoogLeNet은 Yann LeCuns의 LeNet-5에서 오마주 하였으며, Inception 구조의 한 형태를 말합니다. 모델을 더 깊고 넓게 구성하는 것은 성능에 크게 영향을 미치지 못하였으며, 앙상블 기법을 적용했을 때는 약간의 성능 항샹을 보였습니다.

실험 결과 정확한 구조적 파라마터들의 영향은 미미한 것으로 밝혀져 네트워크에 대한 세부사항은 생략하도록 하겠습니다. Table 1은 Inception 구조에서 가장 성능이 잘나왔던 instance들을 나타낸 표입니다. 

 

Inception 모듈의 내부에 있는 것까지 포함하여 모든 convolution들은 ReLU함수가 적용되어 있습니다. 또한 Input은 평균차감(mean subtraction)이 적용된 224x224 사이즈의 RGB 채널입니다. '#3x3 reduce' & '#5x5 reduce'는 3x3, 5x5 convolution 전에 사용된 1x1 필터의 갯수를 의미합니다. 또한, 모든 reduction/projection 레이어들에도 ReLU함수가 적용되어 있습니다.

 

이 네트워크는 컴퓨팅 효율성와 실용성에 초점을 맞추어 고안되었으며, 파리미터가 있는 레이어만 셀 경우 22개의 레이어로 구성되어 있습니다. 네트워크를 구성하는 전체 레이어의 갯 수는 약 100개 입니다. NIN을 근거하여 classifier 이전에 average pooling을 사용하는 것은 각기 다른 데이터 셋을 편리하게 조정하고 연결할 수 있도록 해줍니다. 다만, 우리는 이것이 엄청난 영향을 끼친다고 생각하지는 않습니다.  FC layer를 average pooling으로 변경하는 것은 top-1 정확도를 약 0.6% 증진시켰습니다. 하지만, 여전히 dropout은 필수 요소로 남아있습니다.

 

네트워크가 깊어질수록 효과적인 방식으로 역전파를 진행하는 것이 우려되었습니다. 한가지 흥미로운 insight는 네트워크 중간의 레이어들에서 나오는 feature들이 명확하게 식별될수록 shallower network에서 성능이 향상된다는 것입니다. 따라서, 중간 레이어들에 보조 분류기(Auxiliary classifier)을 붙임으로써 낮은 stage들에서 식별성을 강화하고, 역전파 과정에서 gradient signal을 증가시켰으며, 추가적인 정규화를 적용하였습니다. 학습을 하는 동안, classifier의 loss은 0.3의 비중으로 total loss에 더해집니다. 또한 추론시간에는, 이러한 보조 네트워크는 버려집니다.

 

출처: https://arxiv.org/pdf/1409.4842v1.pdf

 

 

Average pooling layer(주황색 사각형 내부)

side에 위치한 보조 네트워크의 정확한 형태는 다음과 같습니다.

  • 필터 사이즈는 5x5이며 stride는 3인 average pooling layer -> (4a)에서는 4x4x512의 shape, (4d)에서는 4x4x528의 shape을 갖습니다.
  • 차원 감소와 ReLU 함수를 적용하기 위한 128개의 filter로 이루어진 1x1 convolution
  • dropout(0.7)
  • softmax를 사용하는 FC Layer

Figure3는 전체 네트워크를 도식화 한 것입니다.


6. Training Methodology

GooLeNet은 DistBelief 라는 분산 머신 러닝 시스템을 활용하여 학습하였습니다. 또한, momentum을 0.9로 한 비동기 SGD와 고정된 learning rate 스케쥴링(매 8 epoch 마다 learning rate 4% 감소)을 활용하였습니다. Polyak averaging은 추론 시간에 사용할 최종 모델을 만드는데 사용하였습니다.

 

대회가 끝난 후 증명된 한가지 사실이 있습니다. 크기가 이미지 영역의 약 8% ~ 100% 사이에 분포하고 가로-세로 비율이 3/4 ~ 4/3에 해당하는 이미지의 패치의 샘플링이 매우 좋은 성능을 보여준다는 것입니다. 또한, Andrew Howard의 'photometric distortions'연구가 어느정도 overfitting을 억제하는데 유용하다는 것을 알아냈습니다. 다만, random interpolation method(무작위 보간법)을 사용하였기 때문에 최종 결과들에 위와 같은 활용이 긍정적인 영향을 끼쳤는지는 명확히 이야기 할 수 없습니다.


7. Conclusions

GooLeNet이라는 결과물은 쉽게 이용 가능한 dense building block에 의해 최적의 sparse 구조를 근사화 하는 것이 컴퓨터 비전의 신경망을 발전 시키기 위해서 실행 가능한 방안이라는 것을 보여줍니다. 이 방식의 핵심적인 이점은 shallower 하고 less wide한 네트워크에 비해 약간의 cost 만으로도 엄청난 퀄리티를 얻을 수 있다는 것입니다. 또한, 우리의 탐지 작업은 문맥 활용과 bounding box regression의 수행 없이도 경쟁적이라는 것을 알 수 있으며, 이러한 사실은 Inception 구조의 강점을 보여줍니다. 비슷한 depth와 width를 가진 cost가 큰 네트워크에 의해서 비슷한 퀄리티를 기대해 볼 수는 있지만, 우리의 접근법은 sparser 아키텍쳐를 활용하는 것이 실행가능하고 유용한 아이디어라는 것을 보여줍니다. GoogLeNet을 통하여 NIN에 기반한 자동화된 방식으로 sparser한 아키텍쳐와 더욱 개선된 구조를 위한 미래 연구를 제안합니다.


첫 논문리뷰(?)를 해보았는데 단순히 요약하고 정리하는 과정인데도 불구하고 생각했던거보다 어려웠습니다. 내용도 어려운데 번역하는 과정을 거쳐야 하다보니 더 어렵게 느껴지더라구요. 다만, 1x1 convolution을 통한 차원 감소 등 아직은 생소하지만 획기적인 아이디어 덕분에 몰입하며 읽을 수 있었고 단순히 '~~ 했다'/ '~~한 구조다'가 아닌 '이러한 근거로 이렇게 적용했다 / 이러한 문제점이 있어 해결하기 위해 ~~ 했다' 라는 식으로 원인과 결과가 명확하게 서술되어 있어서 저의 호기심을 충족시켜주었을 뿐만 아니라 배워가는 재미도 많이 느꼈습니다. 저는 이유가 항상 궁금한 사람이거든요. 

 

이번 인셉션에 대해서 공부하던 와중 흥미로운 두가지 사실을 알게 됐기 때문인데요.

ILSVRC 2014에서 우승은 GooLeNet이 했지만, 실제 활용도는 VGGNet이 더 높았다는 사실과 

이듬해 ResNet이 2배의 성능으로 우승하여 결국 구글에서 Inception에 ResNet을 적용했다는 사실을 알게 되었습니다.

 

이에 다음 논문리뷰는 VGGNet과 ResNet에 대해서 써보려고 합니다.

 

아직 실력이 모자라기에 잘못 요약해놓은 부분들도 있을 수 있고, 핵심적인 내용을 캐치하지 못하고 놓쳤을 수도 있습니다.

글에 대한 피드백, 조언은 언제나 감사드리기에 부족한 점이 있다면 편하게 댓글 달아주시면 감사하겠습니다.

읽어주셔서 감사합니다.


References

https://arxiv.org/pdf/1409.4842v1.pdf

https://sike6054.github.io/blog/paper/second-post/

https://phil-baek.tistory.com/entry/3-GoogLeNet-Going-deeper-with-convolutions-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0  

https://jjuon.tistory.com/26 

https://velog.io/@whgurwns2003/Network-In-NetworkNIN-%EC%A0%95%EB%A6%AC

 

+ Recent posts