CastleJo의 개발일지

Computer Vision - Image Classification 2

|

Flow of Deep Learning

Going Deeper with Convolutions

Alexnet부터 점점 발전하면서 CNN류의 모델이 발전한 주된 특징은 층을 깊게 쌓는다는 것이다.

층을 깊게 쌓아올려 feature을 잘 강조한다는 특징이 있다.

그렇다면, 무조건 층을 깊게 쌓아올리는것이 좋은것인가?

그것은 아니다. ResNet이 나오기 전 까진 보통 대략 18~19층 정도를 유지했다. 그 이유는 여러가지가 있지만, 최적화(optimize)의 어려움도 있고, 모델이 훈련 데이터셋에 과적합이 될 수도 있다고 예측되어서도 있다.

마지막으로는 Vanishing Gradient, 즉 상당히 많은 연산이 진행되오면서 낮은 층의 미분값들이 소멸되는 문제점이 있었다.

GoogLeNet

구글에서는 Vanishing Gradient를 해결하기 위해, 그리고 많은 층을 쌓음으로서 파라미터 수가 기하급수적으로 증가하는 것을 해결하기 위하여 두 가지 해결책을 제시했다.

  1. 1x1 convolutions
    1x1 convolution 연산을 진행하면 채널의 수, 즉 output의 클래스 수만 바뀌며 공간의 크기는 변화가 없어진다.
    이런 연산을 이용하여 채널의 수를 줄여 파라미터 수를 줄이는 방식을 제시했다.
  2. Auxiliary classifier Vanishing Gradient 문제를 방지하기 위해 낮은 층의 연산을 중간중간 softmax 연산을 통해 미리 결과를 출력해둔다.
    그 다음 Back Propagation을 할 때 결과의 미분값을 참고하여 적용한다.

ResNet

현재도 많은 CNN 모델의 Backbone으로 자주 사용되는 ResNet이다.
층이 많아짐으로서 Loss가 잘 줄어들지 않는 이유가 기존의 예상인 과적합때문이었다는것이 아니라는 것을 논문을 통하여 증명했다.

증명하면서 어떤 가설을 내세웠냐 하면, 이름 그대로 Plain Network에 있다.

그게 무엇인가? 한다면,
기존의 네트워크는 x의 입력이 들어가면 다음 레이어에는 그 결과값 f(x)가 들어온다.
이때, f(x)= x+f(x)로 바꾸어 근사하는 것이 더 쉽다고 가정하는데 이를 Skip connection이라고 하고 이를 적용한 것이 Plain Network 이다.
다만 이런 Skip Connection도 모든 블록에서 적용되진 않는데, 한 블록에 Skip Connection을 적용할 때 늘어나는 경우의 수는 2^n개라고 한다.
따라서 너무 많은 분기가 생기는걸 방지하기 위하여 특정 행위들이 반복되는 블록을 기준으로 Skip Connection을 진행한다.

Beyond ResNet

  • DenseNet
    ResNet과 비슷하지만, Skip Connection에서 채널을 합치는것이 아닌 붙이는(Concat)것으로 더 좋은 효과를 보이지만 더 많은 메모리가 필요하다는 점이 있다.
  • SENet
    Transformer에서 유명한 특징인 Attention을 이용한다는 점이 있다.
  • EfficientNet
    CNN분야에서 상당히 효과적인 모델인데, 대충 모든 방법을 적절히 섞어 엄청난 효과를 냇다고 생각하면 좋은 것 같다.