본문 바로가기

개발자/AI

ResNet 논문 리뷰[퍼옴]

반응형

오늘은 Deep Residual Learning for Image Recognition에서 마이크로소프트팀이 소개한 ResNet에 대해 다뤄보려 한다. ResNet은 수학적으로 어려운 개념이 적용되었다기보다는 방법론적으로 신박한 개념이 도입되었는데, 바로 잔차 (Residual)라는 개념이다.

 

residual 개념

 

Residual이란 쉽게 말해서 결과의 오류 정도로 생각하면 되는데 Y에서 X를 뺀 나머지라고 생각하면 된다. 그렇기에 이전에는 Residual을 평가의 기준으로만 삼았지, 이를 이용해 학습을 진행한다는 생각은 없었는데 마이크로소프트에서는 이 Residual을 학습하는데 이용하였고, 그 결과 ILSVRC 2015에서 1위를 차지할 수 있었다!

그럼 무려 152 layer를 달성할 수 있었던 ResNet의 비결에 대해 알아보자!

 

ILSVRC 대회에 제출된 각 모델의 성능 및 layer 수

 

1. Abstract

 

초록에서는 depth의 중요성과 residual learning에 대해 간략히 설명하고 있다.

역대 ILSVRC 대회 결과를 보면, dept의 깊이가 모델의 성능에 큰 영향을 준다는 것을 알 수 있다. 즉, visual recognition task에서 depth는 매우 중요한 요소이다. 하지만, depth가 올라감에 따라 필연적으로 발생하는 문제도 있는데, 오버 피팅, gradient의 소멸, 연산량의 증가 등이 있다. 따라서 심층 신경은 학습시키기가 상당히 까다로운데, 이에 마이크로소프트 팀은 residual learning framework를 이용하여 이전보다 훨씬 깊은 네트워크를 더 쉽게 학습시킬 수 있었다고 한다.

 

여기서 residual learning이란 쉽게 말해 이전 layer의 결과를 다시 이용하는 것이라 보면 된다. 즉, 입력 layer를 다시 이용하는 (참조하는) residual function을 사용하여 더 쉬운 최적화와 깊은 네트워크에서의 정확도 향상이 가능했다고 한다. 결과적으로 ResNet은 VGGNet의 8배인 152 layer를 자랑하며, 여기에 앙상블 기법을 적용해 오차를 3.75%까지 줄일 수 있었다.

 

2. Introduction

 

소개에서는 residual learning에 대해 자세하게 설명하고 있어 내용이 조금 길다. 따라서 섹션 2. 소개에서 이에 대한 내용을 설명하고 섹션 3에서는 해당 내용을 스킵하도록 하겠다!

 

 

심층 신경망은 추상화에 대한 low / mid / high level의 특징을 classifier와 함께 multi-layer 방식으로 통합한다. 여기서 각 추상화 level은 쌓인 layer의 수에 따라 더욱 높아질 수 있다. 즉, 높은 추상화 특징은 high layer에서 파악할 수 있다는 것이다.

 

layer의 level에 따라 다르게 추출되는 특징

 

최근 연구결과에 따르면 네트워크의 깊이는 매우 중요한데, 실제로 많은 모델들이 깊은 네트워크를 통해 좋은 성능을 보였다고 한다. 이렇게 depth의 깊이가 중요해지면서, layer를 쌓는 만큼 더 쉽게 네트워크를 학습시킬 수 있는지에 대한 의문이 생기기 시작했고, 특히 그중에서도 Vanishing / Exploding gradient 현상이 큰 방해 요소였다. 다행히도 SGD를 적용한 10개의 layer까지는 normalization 기법과 Batch normalization과 같은 intermediate normalization layer를 사용했을 경우, 문제가 없었다고 한다.

 

그림 1. layer 수에 따른 training error와 test error

 

 

하지만 심층 신경망의 경우, 성능이 최고 수준에 도달할 때 degradation 문제가 발생하였고, 이는 네트워크의 깊이가 깊어 짐에 따라 정확도가 포화하고, 급속하게 감소하는 것을 의미한다. 이러한 degradation 문제의 원인은 오버 피팅이 아니라, 그저 layer의 수가 더 추가되었기 때문인데 test error 만이 아닌, training error도 함께 높아졌기 때문이다. 또한 이는 서로 다른 system들이 최적화되는 방식이 다르다는 점을 의미한다.

 

 

하지만, deeper 모델에서도 제한된 상황에서는 최적화될 수 있는 방법이 있다. 이 방법은 추가된 레이어가 identity mapping이고, 추가되지 않은 다른 레이어들은 더 얕은 모델에서 학습된 layer를 사용하는 것이다. 이같이 제한된 상황에서의 deeper 모델은 shallower 모델보다 더 낮은 training error를 가져야 하고, 마이크로소프트 팀은 이 개념을 모델에 적용하였다.

 

기존 네트워크는 입력 x를 받고 layer를 거쳐 H(x)를 출력하는데, 이는 입력값 x를 타겟값 y로 mapping 하는 함수 H(x)를 얻는 것이 목적이다. 여기서 ResNet의 Residual Learning은 H(x)가 아닌 출력과 입력의 차인 H(x) - x를 얻도록 목표를 수정한다. 따라서 Residual Function인 F(x) = H(x) - x를 최소화시켜야 하고 이는 즉, 출력과 입력의 차을 줄인다는 의미가 된다. 여기서 x의 값은 도중에 바꾸지 못하는 입력 값이므로 F(x)가 0이 되는 것이 최적의 해이고, 결국 0 = H(x) - x로 H(x) = x가 된다. 즉, H(x)를 x로 mapping 하는 것이 학습의 목표가 된다.

 

기존 네트워크와 ResNet의 구조

 

이전에는 Unreferenced mapping인 H(x)를 학습시켜야 한다는 점 때문에 어려움이 있었는데 (알지 못하는 최적의 값으로 H(x)를 근사 시켜야 하므로), 이제는 H(x) = x라는 최적의 목표값이 사전에 pre-conditioning으로 제공되기에 Identity mapping이 Identity mapping인 F(x)가 학습이 더 쉬워지는 것이다.

 

결과적으로 H(x) = F(x) + x 이므로 네트워크 구조 또한 크게 변경할 필요가 없는데, 단순히 입력에서 출력으로 바로 연결되는 shortcut만 추가하면 되기 때문이다. 또한, 입력과 같은 x가 그대로 출력에 연결되기에 파라미터 수에 영향이 없으며, 덧셈이 늘어나는 것을 제외하면 shortcut 연결을 통한 연산량 증가는 없다.

 

무엇보다도 곱셈 연산에서 덧셈 연산으로 변형되어 몇 개의 layer를 건너뛰는 효과가 있었는데, 이 덕에 forward와 backward path가 단순해지는 효과가 있었으며, gradient의 소멸 문제를 해결할 수 있었다고 한다.

 

수식을 보면 기존의 곱센 연산에서 덧셈 연산으로 바뀌는 것을 확인할 수 있다.

 

덧셈 연산으로 바뀌는 과정은 이 링크를 참고하면 된다.

 

ResNet은 depth가 매우 깊어도 최적화가 쉬웠지만, 일반적인 CNN model인 plain net은 depth가 증가하면 training error도 함께 증가하였다. 반면에, ResNet은 매우 깊은 구조 덕에 높은 정확도를 쉽게 얻을 수 있었고, 그 결과는 이전의 다른 네트워크보다 월등했다. 또한 ImageNet, CIFAR-10 모두에서 훌륭한 성능을 보였고, 여러 ResNet 모델을 ensemble 했을 때, 에러는 3.75%에 불과하였다.

 

 

출처 : https://phil-baek.tistory.com/entry/ResNet-Deep-Residual-Learning-for-Image-Recognition-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0

반응형

'개발자 > AI' 카테고리의 다른 글

[PyTorch] Dataset 과 Dataloader  (0) 2022.11.27
Pytorch Study -1일차  (0) 2022.08.14