AI Tech - 1x1 convolution

YeonJu Kim·2021년 8월 13일
0

Boostcamp AI Tech 2nd

목록 보기
7/13
post-thumbnail

Modern CNN, 1x1 convolution의 중요성

ILSVRC(ImageNet Large-Scale Visual Recognition Challenge)

AlexNet(8 layers, 60M)


5 conv layer, 3 dense layer (8단)

당시 GPU가 부족했기 때문에, 두 GPU에 따로 training해 네트워크가 두 개로 나뉘어져 있다.
11*11 filter(input) 사용시 하나의 conv 커널이 볼 수 있는 이미지 레벨에서의 영역은 커지지만(receptive field), 상대적으로 더 많은 params가 필요해진다

성공이유

  • ReLu

    • activation function이 가져야 하는 중요한 성질 : nonlinear
    • 마지막 scope가 1이기 때문에 네트워크 깊게 쌓았을 때 망치게 하는 성질이 별로 없고, linear 모델이 가지고 있는 좋은 성질을 가지고 있다
    • easy to optimize with GD
    • 0을 기점으로 값이 커지면 slope가 줄어들게 되는데(gradient) -> 내가 가지고 있는 neural network 값이 많이 크면(0에서 많이 벗어나면) 그 곳에서 나오는 gradient가 0에 가까워져 vanishing gradient problem이 생기게 되는데, Relu는 이런 문제를 없애준다.
  • GPU 사용

  • LRN : 입력공간에서, response가 많이 나오는 몇 개를 죽이는 것. 최종적으로 sparse한 activation 나오게 된다

  • Data augmentation

  • Dropout

지금 시점에서 보면, gpu, activation function Relu, Data augumentation, Dropout 은 당연한 것이지만, 그 당시에는 당연하지 않았다. 지금의 일반적으로 잘되는 기준을 잡아준 네트워크라고 볼 수 있다.

VGGNet (19 layers, 110M)

  • 3*3 conv filter만 사용(중요) : conv filter 크기가 커지면 하나의 conv filter가 찍을때 고려되는 input 크기가 커진다. (receptive filter)

  • Dropout

  • VGG 16, 19

    3*3 convolution filter를 사용했을까?

마지막 레이어 하나의 값은 , input layer 5*5의 픽셀이 합해진 값이 된다. receptive field 입장에서는 3*3X2 와 5*5X1 이 같지만, parameter 수는 전자가 훨씬 적어지게 된다.

앞으로 나올 다른 네트워크들도 비슷한 이유로 convolution filter의 크기는 대부분 7*7을 거의 벗어나지 않는다.

GoogLeNet (22 layers, 4M)

1*1 convolution 은 dimension(channel) reduction 효과가 있다. conv feature map이 special dimension 텐서의 depth 방향으로 있는 채널을 줄이기 때문에, 1*1convolution 잘 활용하면 param 수를 줄일 수 있게 된다.
11*11, 7*7, 등의 conv보다, 3*3 을 여러번 활용하는 것이 좋다

  • 22 layers
  • NIN(Network in Network) 구조 : 네트워크 모양이 네트워크 안에 있는 구조. 비슷하게 보이는 네트워크가 반복된다.

  • Inception blocks : 하나의 입력이 들어왔을 때, 여러 개가 퍼졌다가 하나로 합해진다. 각각의 path를 보면, 1*1convolution 후 3*3, 5*5.
    • 하나의 입력에 대해, 여러 개의 receptive field를 갖는 필터를 거치고, 이것을 통해 여러 응답을 concat하는 효과도 있지만, 1*1이 중간에 들어가면서, 전체적인 네트워크 params가 줄어든다.

1*1convolution 이 왜 params를 줄일까?

ResNet

params 많으면 어떤 문제가 생길까?

  • overfitting : training error 줄어들지만, testing error는 커진다

  • 하지만.. Deeper Neural Network도 학습하기 힘들다

  • training error, testing error가 같이 줄어들긴 하지만, training error가 더 작아져도 test error가 더 커서 더이상 학습이 되지 않는 경우가 발생한다.
    -> ResNet : Identity map 추가

skip connection : input이 밑에서, 위로 올라갈때 neural network의 출력값에 더해주는 것 -> convolution layer가 차이만 학습

네트워크를 더 깊게 쌓을 수 있는 가능성을 보여준다!

x를 더해주는 구조는 같지만, 더해주려면 차원이 같아야 한다.
Projected Shortcut : 차원을 맞추어 주기 위해 1*1 convolution으로 채널을 바꾸어 준다. (but 일반적으로는 Simple Shortcut을 더 많이 사용한다.)

순서에 대한 논쟁은 있지만 원 논문에서는 BN이 Convolution 뒤에 일어나는 구조이다.

3*3conv 전에 input 채널을 줄이고, conv 후 채널을 다시 늘여 output과 차원을 맞춘다.

DenseNet

convolution 을 통해 나오는 값을 더해준다. 이 때 값을 섞이게 더하는 것이 아니라 concat하는 구조이다.

이 때 concat하면 채널이 점점 커지게 되고, (1배, 2배, 4배, 8배, ...) conv feature map의 채널 역시 같이 커지고 params 수도 같이 커진다.
따라서 중간에 channel을 한번씩 줄여줘야 한다! ->1*1 conv

-> Dense Block으로 늘이고 다시 Transition Block으로 줄이는 것을 반복한다

간단한 neural network or 분류 문제에 있어서 DenseNet, ResNet 구조를 쓰면 웬만큼 성능이 잘 나온다

Summary

Key takeaways : recepted field를 늘이는 입장에서,

  • VGG : 3*3 반복.
  • GoogLeNet : 1*1 conv으로 채널 수를 줄여 params 줄임
  • ResNet : skip-connection으로 네트워크 깊게 쌓을수있게
  • DenseNet : concat

0개의 댓글