본문 바로가기
  • CobsLab upgrades your company value by AI technology
이미지 처리 논문

이미지 처리 깊게 더 깊게 ResNet

by divers 2022. 5. 16.

오늘 소개해 드릴 논문은 ‘ResNet: Deep Residual Learning for Image Recognition’입니다.

콥스랩(COBS LAB)에서는 주요 논문 및 최신 논문을 지속적으로 소개해드리고 있습니다. 

해당 내용은 유투브 ‘딥러닝 논문읽기 모임’ 중 ‘ResNet’ 영상 스크립트를 편집한 내용으로,

영상으로도 확인 하실 수 있습니다. (영상링크: https://youtu.be/JI5kXF_OUkY)

 

ResNet 논문에서는 많은 층으로 구성되어 있는 네트워크가 항상 좋은 퍼포먼스를 보여주는 것은 아니다 라고 시작하면서, 과거에는 많은 층으로 구성된 네트워크가 Overfitting 문제로 좋은 퍼포먼스를 보여주지 못하였음을 말합니다. 하지만 레이어 weite를 처음에 잘 초기화하고 좀 더 효율적인 normarization 방법으로, 이 문제가 어느 정도 해결되었고, 지금 상황에서는 Degradation 문제 때문에 많은 층으로  구성된 네트워크가 더 적은 층으로 구성되어 있는 네트워크에 비해 성능면에서 더 떨어지는 결과를 보여준다고 설명합니다.

여기서 Overfitting과 Degradation의 차이점은, overfitting은 딥 러닝 모델이 트레이닝 데이터셋에 너무 적합되게 훈련되어 있어 막상 테스트 데이터셋에서는 트레이닝 데이터셋에서 보여주었던 성능을 보여주지 못하는 경우를 말합니다. 반면에 degreaddation은 위에 그래프처럼 training data와 test data 모두에서 적은 레이어로 구성되어 있는 네트워크보다 높은 에러를 보여주는 현상을 말합니다. 그래서 이 논문은 이 degreadation 문제를 해결하기 위한 방법으로써 제시한 것이 deep residual learning 즉 ResNet입니다.

본격적으로 resnet에 대해서 알아보기 전에, residual의 사전적인 의미를 알아보면 ‘남은’, ‘잔여의’ 라는 뜻입니다. 또한 수학적인 관점에서 residual을 본다면 예측값과 실제 값의 차이를 의미합니다. 이런 의미를 기억하고 resnet의 원리를 이해하면 좀 더 편하게 접근할 수도 있습니다. resnet은 기본적으로 수학적인 배경에서 나온 개념이라기보다는, 오리지널 매핑보다 레스 듀얼 매핑이 더 최적화하기 쉬울 것이라는 직관에 의해서 시작된 개념입니다. 오리지널 매핑은 입력값 x를 모두 학습하지만 resdual 매핑은 타겟과 입력 사이의 차이점만 학습하겠다는 개념입니다. 그림에서 보시면 H(x)가 목표 출력값이라고 정의할 때, 왼쪽에 보이는 flow가 일반 network flow입니다. 일반 network에서는 x 전체를 학습하지만, 오른쪽 flow를 보시면 resnet network에서는 f(x) 즉, 입력값과 출력 값의 차이만 학습하게 됩니다. 이러한 관점의 전환으로 최적화의 경우 fx가 0이 되어야 하기 때문에, 학습할 방향이 미리 결정되어 precondition 역할을 하게 됩니다. f(x)가 거의 0이 되는 방향으로 학습하게 되면 입력 x의 작은 움직임을 쉽게 검출할 수 있기 때문에 특징을 뽑아내기도 좀 더 수월합니다.

resnet에서는 중요한 제약 조건이 있는데, 입력값 x와 출력값 y의 dimension이 항상 같아야 더하기 연산을 수행할 수 있습니다. 그렇기 때문에 입력 값을 출력값으로 바로 보내주는 shortcut이 두 가지가 존재하는데 Identity shortcut은 입력값 x와 출력값 y의 dimension 이 같을 경우 사용되는 것입니다. 반면 projection shortcut은 x와 y의 dimonsion이 다른 경우, square matrix인 Ws를 통해서 x와 y의 dimension을 맞춰주는 경우입니다.

중간 아래쪽에 그림에서는, fx가 어떤 식으로 나오는지 어떤 식으로 나오는지 확인할 수 있습니다. 첫 번째 입력값 x가 첫 번째 layer인 weight layer를 거치면서 w1의 적용을 받게 되고, 그 후에 activation function인 ReLU의 영향을 받게 되고, 마지막 레이어인 weight 레이어를 통해서 w2의 적용을 받게 되어, f 값을 얻게 됩니다.

그 다음으로는 실제 코딩에서 ResNet이 어떻게 적용되는지 알아보겠습니다. 그림에서 확인해보시면, Identity block의 구조와 그것을 코딩으로 구현한 것입니다. 첫 번째 레이어에서는 Convolution layer를 통해서 진행되고 그다음에 batchNormalization과 activation function인 ReLU에 입력값이 지나게 됩니다.

그 후에 또 convolution layer를 지나고 batchNormalization을 지납니다. 여기까지는 일반적인 cnn 모델과 똑같습니다.

마지막으로 shortcut인 x를 레이어에 더해줌으로써 resnet의 개념이 완성됩니다.

그 다음 블록은 Convolution block 입니다. 기본적으로 Identity block 과 비슷한 구조를 가지고 있다고 보면 됩니다. 하지만 여기서는 shortcut connection에서 convolution layer를 추가해줌으로써 x의 입력 값의 dimension과 y 출력 값의 dimension을 맞춰줌으로써, 더하기 연산을 가능하게 해줍니다.

이 논문은 두 가지 실험을 통해 resnet의 성능과 특징을 나타냅니다. 첫 번째 실험인 image classification에서는 세 가지 포인트에 대해서 실험을 진행합니다. 첫 번째로 Plain network와 ResNet network를 비교하는 실험을 진행 하고, 다음으로 Identity shortcut과 Projection shortcut이 ResNet의 performance에 어떤 영향을 미치는지에 대한 두 번째 포인트에 대해서 실험을 진행하고, 마지막 포인트에서는 ResNet이 layer가 늘어남에 따라 Degradation 문제가 발생하지 않고, 효과적으로 error rate를 줄여줄 수 있는지 실험을 통해서 확인합니다.

첫 번째로 plain 네트워크와 ResNet 네트워크를 비교하는 모습입니다. 왼쪽에 보시면 architecture가 나와 있습니다. 기본적으로 34 layer와 18 layer로 구성된 plain network와 resnet워크를 비교합니다. 그래프를 보시면 plain network의 경우 34 layer로 구성되어 있는 network가 좀 더 높은 error rate를 보여주는 반면, ResNet에서는 34 layer가 18 layer로 구성되어 있는 ResNet보다 좀 더 좋은 퍼포먼스를 보여줍니다. 그리고 전체적으로 plain network에 비해서 ResNet네트워크가 좀 더 좋은 error rate의 퍼포먼스를 보여주는 것을 확인할 수 있습니다.

그 다음으로, Identity shortcut과 Projection shortcut 이 ResNet에서 어떻게 쓰이는지 알아보는 실험입니다. 여기서는 세 가지 ResNet을 만듭니다. ResNet-A는 identity 쇼커만 사용하는 ResNet이고 ResNet-B는 Projection shortcut과 Identity shortcut을 혼합하는 모델입니다. 마지막으로 ResNet-C는 Projection shortcut만 사용하는 ResNet입니다. error rate를 보시면 ResNet-A보다 ResNet-B가 좀 더 좋은 퍼포먼스를 보여주고 ResNet-B보다 ResNet-C가 좀 더 좋은 퍼포먼스를 보여줍니다. 하지만 그 차이가 미세하고 ResNet-A보다 ResNet-C가 메모리 타임 complexity가 훨씬 높기 때문에, 효율적이지 않다고 여겨서, 이 논문에서는 별 차이가 없다고 설명합니다.

마지막으로 ResNet의 layer가 깊어짐에 따라 Degradation 문제가 일어나는지 확인하는 실험입니다. ResNet 34에서는 building block을 사용하는 반면 ResNet 50 101 그리고 152에서는 Bottleneck block을 사용하여 더 깊은 구조를 만듭니다. bottleneck을 보시면 첫 번째에서는 256 dimension을 64 dimension으로 parameter를 줄이기 위해서 dimension을 줄여줍니다. 그리고 3×3 layer를 통해서 feature를 추출하고 마지막 레이어에서 다시 256 layer로 맞추기 위해서 dimension을 다시 늘려줍니다.

앞선 과정으로 layer를 늘려서, 그림 architecture table에서 보시는 것처럼, layer가 늘어나는 것을 알 수 있습니다. layer가 늘어남에 따라서, 오른쪽 result table을 보시면, error rate가 점점 낮아지는 것을 알 수 있습니다. 이 실험을 통해서 ResNet은 layer가 늘어남에 따라 Degradation 문제가 발생하지 않는 것을 알 수 있습니다.

두 번째 실험으로써, CIFAR-10 데이터셋을 이용하는 실험입니다. imagenet classification과 달리 CIFAR-10 데이터셋은 32×32 작은 이미지 입니다. 왜냐하면 좀 더 깊은 훨씬 더 깊은 네트워크의 ResNet을 실험하기 위함 입니다.

하지만, ResNet에서 더 많은 레이어를 쌓을 경우, 위 그림상에서는 1202 layer를 쌓을 경우, overfitting 문제가 일어나는 것을 알 수 있습니다. 하지만 이 논문에서는 ResNet의 architecture만 소개하기 위해서, max out이나 drop out 같은 정규화를 쓰지 않았다고 합니다. 본 논문에서는, 정규화를 통해서 맥스아웃이나 드로아웃 같은 정교화를 통해서 좀 더 좋은 효과를 결과를 기대할 수 있다고 마무리 짓습니다.

ResNet 논문은 2016년에 나오고, 그 당시에 image classification contest의 많은 부분에서 1등을 차지하게 됩니다. 그만큼 범용적인 범용적으로 어느 부위에서 쓰여도 효과적인 아키텍처임을 알 수 있고, 이 ResNet을 바탕으로 여러 가지 좀 더 효율적인 architecture가 아직도 연구되고 있습니다.

 

댓글