koos808

Edwith 논문으로 짚어보는 딥러닝의 맥 정리 Step2(CNN) 본문

Deep Learning/딥러닝 강의 정리

Edwith 논문으로 짚어보는 딥러닝의 맥 정리 Step2(CNN)

koos808 2020. 10. 7. 05:40
728x90
반응형

이전 포스트에 이어서 STEP 2를 정리했습니다. STEP 2에서는 CNN에 관한 내용입니다.

 

 

※ STEP 2 : 4가지 CNN 살펴보기: AlexNET, VGG, GoogLeNet, ResNet

  • 핵심 키워드

      CNN(Convolutional Neural Network)
      Conv2D
      AlexNet
      VGG
      GoogLeNet
      ResNet
  • Layer를 Deep하게 쌓으면서 동시에 성능을 잘 나오게 하기 위한 테크닉들이다.

  • AlexNet(ILSVRC 2012 1등)

    • What is the number of parameters?

      • parameter의 수 : 11x11x3x48+48(channel)

    • Why are layers divided into two parts?

      • Gpu의 낮은 성능 때문!

    • Relu 사용

    • LRN(Local Response Normalization) 사용

      • regulization 테크닉 중 하나이다. Out put으로 나온 convolutional feature map 중에서 일정 부분만 높게 activation한다. 즉, convolution feature map 중에서 일정 부분만 높은 값을 갖고 나머지는 낮은 값을 갖도록 만드는 역할을 한다.

      • It implements a form of lateral inhibition(측면 억제) insppired by real neurons.

    • Regularization in AlexNet

      • Main objective is to reduce overfitting.

      • More details will be handled in next week.

      • In the AlexNet, two regularization methods are used.

        • Data augmentation : data를 늘리는 것. Flip augmentation(물체 좌우반전) & Crop(이미지 부분으로 나누기) + Flip augmentation. 하지만, 숫자와 같은 이미지들은 Flip augmentation을 하면 안되므로 하려는 이미지를 파악하고 Data augmentation을 적용해야한다.

          • Original Image(256x256) -> Smaller Patch(224x224) : This increases the size of the training set by a factor of 2048(32x32x2(좌우반전)). Two comes from horizontal reflections. 즉, 데이터를 뻥튀기 시켜서 학습을 시켰기 때문에 성능이 좋아졌다고 얘기했음.

          • Original Patch(224x224) -> Altered Patch(224x224) : 또한, Color variation을 적용했다. Color variation이란 것은 다음과 같다. RGB Image이기 때문에 그냥 Noise 성능이 아니라, 각각의 RGB Channel에 어떤 특정값을 더하게 된다. 더하는 특정값이란 것은 학습데이터에서 해당 RGB가 얼마나 많이 변했는지를 학습을 통해 알아내고 이 값에 비례해서 RGB 값을 넣게 된다. 예를 들어서 Data augmentation을 할 때, 빨간색에 Noise를 많이 넣게 되면 전혀 다른 라벨의 데이터가 나오기 때문에 학습데이터에서 허용할 수 있는 만큼의 noise만 넣어야 한다.

          • Probabilistically, not a single patch will be same at the training phase! (a factor of infinity!)

        • Dropout : 일반적인 Dropout은 해당 Layer에서 일정 퍼센트만큼의 노드를 0으로 만들어 준다. 하지만 여기서는 단지 output에 0.5만큼을 더했다. <- 이렇게 쓴거는 AlexNet 논문이 처음이자 마지막이다.

          • Original dropout sets the output of each hidden neuron with certain probability.

          • In this paper, they simply multiply the outputs by 0.5.

  • VGG

    • 매우 간단하다. Convolution은 모두 stride를 1로, 3x3을 Convolution에 활용했다.

    • Convolution은 3x3을 활용했으며, stride는 1로 하며, max pooling과 average pooling을 통해서 space한 정보를 줄이게 된다.

    • 3,1,1(feature map size 유지)로 모든 Layer를 만들고, Block이란 개념을 도입함.

    • Block을 사용해서 vanishing gradient 문제를 피할 수 가 있었음. end-to-end가 아니라서 부분 부분 좋은것들만 찾아서 합쳤기 때문.

  • GoogLeNet(ILSVRC 2014 1등)

    • 22 Layers Deep Network

    • Efficiently utilized computing resources, Inception Module : Inception Module을 알면 GoogLeNet을 다 이해한 것이다!

    • Significantly outperforms previous methods on ILSVRC 2014

    • Inception Module이란?

      • AlexNet처럼 동일한 모양의 네트워크가 갈라진게 아니라, 1x1 convolutions, 3x3 convolutions, 5x5 convolutions 등의 다른 역할을 하는 convolutions들을 filter concatenation을 하여 방향순으로 쌓임.

      • filter concatenation이란 것은 Filter를 채널 방향으로 더한 것임.

      • one by one convolution을 추가함으로써 channel의 수를 중간에 한번 줄이고 이 네트워크를 정의하는 파라미터의 수를 줄일 수 있다. 즉, Layer가 한번 더 추가했는데도 파라미터의 수가 줄어든다. 정보를 축약도 하면서 파라미터 수를 줄인다.

      • 5x5로 보는 이유는 처음 학습할 때 크게 크게 보기 위해서임. base가 되는 것을 찾기 위해.

    • GoogLeNet은 Inception Module이 반복된 구조로 이루어져 있음. 1x1 convolution을 통해서 채널을 줄임으로써 전체 파라미터 수를 줄였음.

    • Conclusion

      • Very Clever idea of using one by one convolution for dimmension reduction!

      • Inception Module의 또 다른 차별점은 여러개로의 갈림길이 있기 때문에 더 다양한 정보들에서 추출할 수 있음.

      • 즉, GoogLeNet은 Inception Moduleone by one convolution을 가지고 Network를 만들었으며, 이를 통해 더욱 Deep한 Network를 만들 수 있으면서도 성능을 올릴 수 있었다.

      • GoogLeNet이 VGG보다 DEEP하면서도 파라미터 수가 절반 이상 적다.

      • 서로 다른 receptive field를 만들기 위해서 Image를 바로 convolutions을 하는게 아니라 1x1 convolutions, 3x3 convolutions, 5x5 convolutions로 각각 해보고 그것들을 concatenation한다. 그렇게 concatenation convolution feature map 위에 다시 1x1 convolutions, 3x3 convolutions, average pooling 등을 해주며 다시 concatenation한다. 이런식을 계속 반복하면서 output단의 input image 밑의 receptive field를 굉장히 다양하게 만들어 준다. 또한 one by one convolution을 통해서 channel dimmension reduction을 해주면서 Layer를 정의하기에 필요한 파라미터의 수를 줄인 것이 GoogLeNet 논문의 핵심이다.

      • Inception module보조 classifier가 GoogLeNet이 한 일임.

      • 보조 classifier를 사용해서 vanishing gradinent가 발생해도 아래까지 weight가 업데이트 될 수 있도록 만들었음. 즉, signal이 아래까지 갈 수 있도록 만들었음.

      • 1x1 conv, 3x3 conv, 5x5 conv 다해보고나서 채널적으로 중복된 정보가 많기 때문에 중복 정보를 줄이기 위해 1x1 conv(filter)를 사용한다(액기스만 가져온다). -> conv 하고 싶은거 다하고, 나중에 좋은거 선택하는 방식으로 했음.

      • space 측면에서 bulky하다면 stride와 (max) pooling을 하지만 무조건 줄이면 information loss이 발생할 수 있다. 따라서 1x1 conv을 통해 채널 channel wise dimmension reduction을 하게 해주고 파라미터 수를 줄인다.

      • 1x1 conv 앞에 두는 것과 뒤에 두는 것의 차이 : weight이 유무의 차이를 확인하기 위함이 아닐까..?

  • Inception v4

    • 최근에 파라미터를 줄이기 위해서 어디까지 노력했냐의 산물

    • Inception v4 model에서는 Inception Module에서 나오는 5x5 같은 convolutions이 더이상 나오지 않는다. receptive field를 늘리는 입장에서는 3x3 convolutions을 두번하던가 5x5 convolutions을 한번 하는 것과 동일하다.

    • 왜 잘되는 지는 알 수 없음.

  • ResNet

    • 역시나 파라미터를 줄이기 위해 BottleNeck architecture를 사용했으며 residual connection이란 것을 사용했다.

    • ResNet 논문에서는 152 Layers Network로 구성되어 있다. 또한 동일한 Network가 여러 가지 대회에서 1등을 했다는 것은 이 방법론이 굉장히 범용적이며 다양한 곳에 활용될 수 있다는 의의를 주었다. 즉, 기존 코드에 residual connection이란 것을 추가하면 성능이 향상되는 의의가 있다.

    • 152 Layer 이상 되면 그게 그거일 것이다~~. 흔들리는 것만 잡자.

    • 논문에서의 문제 제기

      • Is deeper Network always better?(Deep한 Network가 항상 좋나?)

      • What about vanishing/exploding gradients?

        • -> Better initialization methods/batch normalization/ReLU 때문에 vanishing/exploding gradients 문제가 상대적으로 덜 중요해 졌다.

      • Any other problems?

        • Overfitting?

        • No -> Degradation problem : more depth but lower performance.

        • Overfitting과 Degradation의 차이점 : trainning error가 낮아지고 accuracy가 높아질 때, test accuracy가 계속 떨어질 때 Overfitting이라고 한다. 즉 Overfitting의 정의는 trainning data를 너무 잘 맞추려고 한 나머지 test data를 못맞추게 되는 것을 의미한다. Degradation은 무엇이냐면 trainning과 test data에서 잘되는데 성능이 잘 안나오는 것을 의미한다.

    • Degradation problem을 해결하기 위해 Residual learning building block이란 것을 만들었음. 아이디어는 매우 간단함. 입력이 들어오고 출력이 있을 때 입력을 출력에 더한다. 이 때의 유일한 제약조건은 입력과 출력의 dimension이 같아야 하는 것이다. 어떤 target과 현재 입력사이의 차이만 학습을 하겠다는 것이 Residual learning building block이라 한다.

    • Why residual? (Residual이 왜 좋냐)

      • We hypothesize that it is easier to optimize the residual mapping than to optimize the original, unreferenced mapping. - residual mapping을 사용하면 더 좋을 것이라고 가정을 해봤는데 적용도 쉽고 실제로 잘 되더라~. 수학적인 background에서 나온 것이 아니라..

      • Shortcut connections are used.

      • "The extremely deep residual nets are easy to optimize." -> easy

      • "The deep residual nets can easily enjoy accuracy gains from greatly increased depth, producing results substantially better than previous networks."

    • ResNet의 가장 큰 단점은 same dimension.

    • Deeper bottle architecture

      • Inception Module에서 one by one convolution을 사용해서 파라미터를 줄이고 줄어든 파라미터를 가지고 convolution을 한뒤 concatenation 해주었다. ResNet도 비슷하게 one by one convolution으로 채널을 줄이고 convolution을 한뒤 one by one convolution을 다시 해준다(차이점). 즉, ResNet은 Input(256 dimension) -> Dimension reduction(1x1,64) -> Convolution(3x3,64) -> Dimension increasemnet(1x1, 256) 순으로 해주는데, 왜 마지막에 one by one convolution을 다시 해줬냐면 입력을 출력에 더해주기위해(same dimension 때문에) 다시 256채널로 복원해야 했기 때문이다. 즉 Dimension increasement가 Inception module과의 차이점이며 Deeper bottle architecture라고 한다.

    • ResNet 논문의 의의

      • 40개 정도의 Layer에서 생겼던 Degradation 문제를 100단 정도의 Layer에서 Degradation 문제가 발생하도록 밀었다고 볼 수 있음. 하지만 여전히 Layer 개수가 1000개가 넘어가면 Degradation 문제가 발생한다.

    • 객체 검출에서도 많이 사용함.

  • ResNext

  • PolyNet

728x90
반응형
Comments