ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Paper Review] Deep Residual Learning for Image Recognition(He et al., 2015)
    Paper Review/Model Architectures 2026. 2. 3. 15:55

    이때 당시(2015), 딥러닝의 핵심은 '깊이(Depth)'에 있었다. 층을 깊게 쌓을수록 모델은 이미지의 아주 미세한 특징부터 복잡한 구조까지 단계별로 학습할 수 있게 된다는 의미이다. 하지만 연구자들이 실제로 층을 계속 쌓아보니 이상한 현상이 발생했다.

    과거에는 층이 깊어지면 'Gradient Vanishing/Exploding' 문제로 학습 자체가 안되는 게 문제였지만, 이는 배치 정규화(Bath Normalization)같은 기술로 어느정도 해결된 상태였다. 그런데 그 문제가 해결되었음에도 불구하고, 일정 깊이를 넘어서면 Degradation(퇴화)이라는 새로운 문제가 발생한다.

    위 그림을 보면 확인할 수 있는게, 56층짜리 일반(Plain) 네트워크가 20층짜리보다 훈련 오차(Training error)와 테스트 오차(Test error)가 모두 높게 나타난다. 이건 Overfitting이 아닌다. Overfitting이라면 훈련 오차는 낮고 테스트 오차만 높아야하기 때문이다. 즉, 모델이 너무 복잡해서 길을 잃은 것이 아니라, 층이 너무 깊어서 수학적으로 '최적화(Optimization)' 자체를 못 하고 있다는 사실을 발견한 것이다.

    여기서 저자들은 가설을 세운다. "만약 앝은 모델보다 깊은 모델이 성능이 나쁘다면, 최소한 추가된 층들이 '아무것도 안하는 상태(Identity mapping)'만 유지해도 얕은 모델만큼은 성능이 나와야하는 것이 아닐까?"라는 의문이였다.

    기존의 방식은 층(Layer)들이 입력값 $x$를 받아서 우리가 원하는 정답 $H(x)$를 통째로 만들어내도록 강요했다. 하지만 층이 깊어질수록 이 복잡한 $H(x)$를 직접 매핑하는 것은 너무나 어려운 일이였다.

    그래서 저자들은 Residual Learning(잔차 학습)이라는 개념을 도입한다. 목표치 $H(x)$를 직접 배우는 대신, 입력값 $x$를 뺀 나머지 차이인 $F(x) = H(x) - x$만 배우게 하는 것이다. 이렇게 되면 실제 출력은 층이 계산한 $F(x)$에 원래 입력값(x)을 더한 $F(x) + x$가 된다.

    그렇다면, 이게 왜 효과적일까? 만약 특정 층이 학습 과정에서 성능에 도움이 안 된다고 판단되면, 그 층의 가중치를 0에 가깝게 만들어 $F(x)$를 0으로 수렴시키기만 하면 된다. 그러면 자연스럽게 입력 $x$가 출력으로 전달되는 '항등 함수(Identity function)'이 되는 것이다. 즉, 무에서 유를 창조하는 것보다, 기존의 것에서 미세한 변화(잔차)만 주는 것이 훨씬 최적화하기 쉽다는 원리이다.

    이 아이디어를 실제 구조로 구현한 것이 바로 Shortcut Connection(Skip connection)이다.


    위 그림처럼 한 층이나 여러 층을 건너뛰어 입력값을 출력 단에 그대로 '더해주는' 통로를 만든 것이다.

    이 방식의 가장 큰 장점은 추가적인 파라미터나 연산량이 거의 없다는 점이다. 단순히 더하기 연산 하나가 추가될 뿐인 것이다. 덕분에 모델은 훨씬 깊어지면서도(VGG보다 8배 깊은 152층), 연산 복잡도는 오히려 낮게 유지할 수 있었다.

    Related Work

    저자들은 가장 먼저 딥러닝 이전의 전통적인 컴퓨터 비전과 수학적 방법론을 언급한다.

    잔차 표현(Residual Representations)
    이미지 검색이나 분류에서 쓰이던 VLAD나 Fisher Vector 같은 방식들은 데이터를 직접 표현하는 대신, 기준점(Dictionary)과의 '차이(Residual Vector)'를 인코딩 한다. 특히 벡터 양자화(Vector Quantization) 분야에서는 데이터를 통째로 표현하는 것보다 잔차를 인코딩하는 것이 훨씬 효율적이라는 사실이 이미 입증되어 있었다.

    수학적 최적화(Multigrid Method)
    미분 방정식을 풀 때 사용하는 '멀티 그리드' 방법은 문제를 여러 스케일로 나눈다. 여기서 각 하위 문제는 거친(Coarse) 스케일과 정밀한(Fine) 스케일 사이의 '잔차 솔루션'을 찾는 역할을 한다. 결과적으로 시스템을 처음부터 푸는 것보다 '잔차' 중심으로 재구성했을 때 수렴 속도가 훨씬 빠르다는 것이 수학적으로 이미 증명이 되었다.

    즉, 저자들은 수학이나 전통 비전에서도 잔차가 최적화에 유리했는데, 왜 신경망이라고 안되겠어?라는 근거를 제시한다.

    Shortcut Connection
    네트워크 입력과 출력을 직접 연결하는 '지름길(Shortcut)' 자체는 ResNet이 처음 만든 것은 아니다.

    초창기 MLP(다층 퍼셉트론)에서도 입력층과 출력층을 선형적으로 연결하려는 시도가 있었고, GoogleNet(Inception) 같은 모델도 중간에 보조 분류기(Auxiliary Classifiers)를 달아 기울기 소실 문제를 해결하려 했다.

    하지만 결정적인 차이는 어떻게 연결하느냐였다.

    Highway Networks vs ResNet
    논문에서 가장 중요하게 비교하는 대상은 당시 경쟁 관계였던 Highway Networks이다. 하이웨이 네트워크도 ResNet처럼 지름길을 가졌지만, 결정적으로 게이트(Gating function)라는 것을 사용했다.

    • Highway Networks : 이 방식은 LSTM처럼 도로를 열고 닫는 '게이트' 파라미터가 있다. 데이터에 따라 지름길을 얼마나 열지 모델이 학습해야 한다. 만약 게이트가 닫히면 일반적인 신경망(Non-residual)으로 돌아가 버린다.
    • ResNet : 반면 ResNet은 어떠한 파라미터도 없는 Identity Shortcut을 고집한다. 지름길은 항상 열려 있으며, 정보는 아무런 제약 없이 흐른다.

    저자들은 여기서 하이웨이 네트워크를 정중히 비판한다. 하이웨이 네트워크는 게이트 파라미터가 늘어나 복잡도가 증가할 뿐만 아니라, 층이 100층 이상으로 깊어졌을 때 성능 이득을 증명하지 못했다는 것이다. 반면 ResNet은 단순함이 복잡함을 이긴다.는 것을 보여주며, 지름길에 파라미터를 추가하지 않고도 초심층 망을 학습시키는 데 성공했다.

    Deep Residual Learning

    1. Residual Learning

    먼저 수식적으로 접근해보자. 우리가 층을 쌓아서 학습시키고 싶은 궁극적인 정답 함수를 $H(x)$라고 해보자. 기존의 방식은 층들이 직접 이 $H(x)$를 만들어내라고 강요하는 방식이었다. 하지만 저자들은 만약 여러 개의 비선형 층이 복잡한 함수를 근사할 수 있다면, $H(x) - x$라는 잔차 함수도 근사할 수 있지 않을까?라는 질문을 던진다.

    그래서 출력값을 다음과 같이 정의힌다.
    $$
    H(x) = F(x) + x
    $$
    여기서 $F(x)$는 저자들이 새롭게 정의한 잔차 함수(Residual Function)이다.

    이것이 중요한 이유는, 앞서 말한 Degradation 문제 때문이다. 만약 어떤 특정 구간에서 추가된 층들이 성능에 아무런 도움이 안 된다면, 가장 이상적인 해결책은 그 층들이 '입력을 그대로 출력하는(Identity Mapping)' 것이다.

    그런데 기존 방식($H(x)$를 직접 학습)으로는 가중치들을 아주 정교하게 조절해서 입력과 똑같은 값을 만들어내는 것이 수학적으로 매우 어렵다. 반면 ResNet 방식 $F(x) + x$ 에서는 층의 가중치들을 0으로 수렴(Drive to Zero)시키기만 하면 된다. 0을 만드는 것이 특정 입력값과 똑같은 값을 복제해내는 것보다 훨씬 쉽기 때문에, 모델은 훨씬 더 효율적으로 최적화의 길을 찾게 된다.

    2. Identity Mapping by Shortcut

    이 잔차 학습을 실제 구조로 구현한 것이 바로 Shortcut Connection이다. 논문의 식을 봐보자.

    $$y = F(x, {W_i}) + x$$

    이 수식이 시사하는 바는 굉장히 크다.

    • 파라미터 0개 : $x$를 더해주는 행위 자체에는 어떠한 가중치($W$)도 필요 없다.
    • 연산량 미미 : 단순한 요소별 덧셈(Element-wise addition)만 추가될 뿐이다.
    • 공정한 비교 가능 : 모델의 파라미터 수나 연산 복잡도를 늘리지 않고도 '깊이의 효과'만 순수하게 검증할 수 있게 한다.

    하지만 여기서 한 가지 문제가 발생한다. 신경망을 쌓다 보면 채널 수를 늘리거나 이미지 크기를 줄여야 할 때가 있다. 이때는 입력 $x$와 출력 $F(x)$의 차원(Dimensioin)이 맞지 않아 직접 더할 수 있다. 이때 사용하는 것이 아래 식이다.

    $$y = F(x, {W_i}) + W_s x$$

    여기서 $W_s$는 차원을 맞춰주기 위한 선형 투영(Linear Projection) 행렬이다. 1x1 Convolutioin을 써서 채널 수를 맞추는 식이다. 저자들은 실험을 통해 차원이 같을 때는 그냥 $x$를 쓰는게 최고로 경제적이고, $W_s$는 오직 차원을 맞출 때만 쓰는 것이 좋다고 결론을 내린다.

    저자들은 이 $F(x)$라는 잔차 함수가 꼭 두 층일 필요는 없다고 말한다. 세 층일 수도 있고, 완전 연결 층(FC layer)이든 컨볼루션 층(Conv layer)이든 상관없다. 다만, 단 한 개의 층에 대해서만 잔차 학습을 적용하면($y = W_1 x + x$), 이건 결국 일반적인 선형 층과 다를 바 없이 큰 이득이 없다는 점도 명시하고 있다. 그래서 보통 2~3개의 층을 하나의 Residual Block으로 묶어서 사용하게 된다.

    3. Network Architecture

    저자들은 비교를 이해 먼저 'Residual'이 없는 'Plain Network'를 설계했다. 이 구조는 당시 가장 유명했던 VGGNet의 설계 철학을 따르고 있다.

    • Rule 1 : 출력 피처 맵(Feature Map)의 크기가 같으면, 필터(채널)의 수도 동일하게 유지한다.
    • Rule 2 : 연산 복잡도를 일정하게 유지하기 위해, 피처 맵의 크기가 절반으로 줄어들면(Downsampling) 필터의 수는 두 배로 늘어난다.
    • VGG와 차이점 : VGG보다 층은 더 깊지만, 복잡도는 훨씬 낮다. VGG-19가 약 19.6G FLOPs의 연산량을 가지는 반면, ResNet-34 plain 모델은 약 3.6G FLOPs에 불과하다. 이는 ResNet이 훨씬 효율적인 구조를 지향하고 있음을 보여준다.

    이제 위에서 설계한 Plain Network에 shorcut conection을 추가하여 Residual 버전으로 변신시킨다.

    지름길로 $x$를 더해주려는데, 만약 층을 거치며 채널 수가 늘어나거나 이미지 크기가 줄어들면 $F(x)$와 $x$의 모양이 달라 더할 수가 없게 된다. 이에 두 가지 해결책을 제시한다.

    • Option (A) zero-padding : 차원이 늘어난 만큼 0을 채워 넣어서 강제로 맞추는 방식이다. 파라미터가 전혀 늘어나지 않는다는 장점이 있다.
    • Option (B) Projection Shortcut(1x1 Conv) : 1x1 컨볼루션을 통과시켜 차원을 물리적으로 맞추는 방식이다. 약간의 파라미터가 추가되지만 더 유연하다.

    4. Implementation

    이 파트에서는 실험의 공정성을 위해 사용된 상세 설정을 설명한다. 이 설정들은 지금도 딥러닝 학습의 표준(Standard)으로 불린다.

    • 데이터 증강(Data Augmentation) : 이미지를 다양한 크기로 리사이즈하고 크롭(Crop)하며, 좌우 반전과 색상 변화를 준다. 모델이 이미지의 본질적인 특징을 배우도록 돕는 과정이다.
    • 배치 정규화(Batch Normalization, BN) : 저자들은 모든 컨볼루션 직후, 활성화 함수(ReLU) 직전에 BN을 넣는다. 이는 학습 안정성을 크게 높여준다.
    • 가중치 초기화 및 최적화 : He 초기화를 사용하고, SGD를 이용해 학습을 한다. 특이한 점은 DropOut을 사용하지 않았다는 것인데, BN이 이미 정규화 효과를 주고 있기 때문이다.

    아래는 Resnet의 구조 표이다.

    Experiment

    Plain vs ResNet


    먼저 저자들은 18층과 34층 모델을 가지고 Plain 방식과 Residual 방식을 비교했다.

    • Plain Network : 실험 결과, 34층 일반 모델이 18층보다 성능이 더 나빴다(Top-1 Error 28.54% vs 27.94%). 위 그래프 이미지를 보면(왼쪽 그래프), 34층 모델(빨간색 실선)의 훈련 오차가 18층보다 전체 학습 과정 내내 높게 형성되어 있다. (Degradation Problem)
    • ResNet : 잔차 학습을 적용하자 상황이 역전되었다. 오른쪽 그래프를 보면, 34층 ResNet이 18층보다 훨씬 낮은 오차를 기록하며 성능이 역전되었다.(Top-1 Error 25.03% vs 27.88%) 층이 깊어질수록 성능이 좋아지는 '딥러닝 상식'을 회복한 것이다.

    왜 이런 차이가 발생했을까?
    저자들은 여기서 아주 중요한 분석을 덧붙인다. 34층 Plain 모델의 성능이 낮은 이유가 단순히 'Vanishing Gradient' 때문은 아니라는 점이다.

    실제로 배치 정규화(BN)를 사용했기 때문에 신호는 앞뒤로 잘 전달되고 있었고, 학습 자체가 불가능한 상태는 아니었다. 하지만 저자들의 추측에 따르면, 깊은 일반 네트워크는 최적화 속도가 기하급수적으로 느려져서 현실적인 시간 내에 좋은 해답을 찾지 못하는 것이 문제였다. 반면 ResNet은 잔차 학습 구조 덕분에 훨씬 더 빠른 수렴 속도를 보여주었다.

    Shortcut Option

    논문에서는 차원이 늘어날 때 사용하는 Shortcut 방식에 따른 세 가지 옵션을 비교했다.

    • Option A : 차원이 늘어날 때 0을 채움(Zero-padding). 파라미터 증가 X
    • Option B : 차원이 늘어날 때만 1x1 Conv 사용
    • Option C : 모든 Shortcut에 1x1 Conv 사용

    실험 결과, C가 B보다 아주 미세하게 좋고, B는 A보다 조금 더 좋았다.


    저자들은 A/B/C 사이의 성능 차이가 크지 않으므로, 복잡한 Projection Shortcut(C)은 굳이 필수가 아니다. 라고 결론을 내린다.

    152 layer

    마지막으로 저자들은 50층, 101층을 넘어 152층까지 모델을 쌓아 올린다. VGG보다 훨씬 깊음에도 불구하고 파라미터 효율성이 좋아 연산량은 더 낮았다. 결과적으로 ResNet-152는 단일 모델만으로도 기존의 모든 모델을 압도했고, 앙상블 모델을 통해 3.57%라는 경이로운 Top-5 Error를 기록하며 ILSVRC 2015 우승을 거머쥔다.

    Bottlenect Architecture

    네트워크가 깊어질수록 가장 큰 적은 '훈련 시간'과 '메모리'이다. 기존의 Basic Block은 3x3 컨볼루션을 두 개 쌓는 방식인데, 층이 깊어지면 채널 수가 늘어남에 따라 연산량이 기하급수적으로 폭증한다. 이를 해결하기 위해 저자들이 고안한 것이 바로 Bottleneck 디자인이다.

    이 구조는 하나의 잔차 함수($F$)를 위해 3개의 층을 사용한다.

    • 1x1 Conv(축소) : 입력 채널의 차원을 대폭 줄여준다.
    • 3x3 Conv(병목) : 줄어든 차원에서 핵심적인 특징을 추출한다. 여기가 바로 병목 구간이다.
    • 1x1 Conv(확장) : 다시 원래의 높은 차원으로 복원한다.

    이렇게 설계하면 3x3 컨볼루션이 훨씬 적으느 채널 수에 대해서만 연산을 수행하기 때문에, 전체적인 연산량(FLOPs)을 Basic Block과 비슷하게 유지하면서도 층을 더 깊게 쌓을 수 있게 된다. ResNet-50/101/152가 바로 이 Bottleneck 구조를 채택한 모델들이다.

    CIFAR-10 and Analysis

    저자들은 ImageNet보다 작은 데이터셋인 CIFAR-10에서도 동일한 현상이 나타나는지 확인헀다. 여기서는 훨씬 가벼운 구조를 사용해 실험한다.

    결과는 ImageNet과 일관되었다. 일반(Plain) 네트워크는 층이 깊어질수록 훈련 오차가 오히려 늘어나는 퇴화 문제를 보였지만, ResNet은 20층부터 110층까지 깊어질수록 성능이 꾸준히 향상되었다. 특히 110층 ResNet은 아주 얇고 깊은 구조임에도 불구하고 당시 최고 수준의 성능을 보여주며, 잔차 학습이 단순히 특정 데이터셋의 문제가 아니라 딥러닝 최적화의 근본적인 해결책임을 증명했다.

    아래 그래프는 각 층의 응답(Response, BN 이후 활성화 전 값)의 표준편차(Std)를 분석한 결과이다.


    저자들은 ResNet의 잔차 함수$F(x)$가 내놓은 값들이 일반 네트워크의 값들보다 훨씬 작다는 것을 발견했다. 이는 저자들이 앞서 가설로 세웠던 잔차 학습은 0을 기준으로 미세한 변화(Perturbation)만 학습한다.는 점을 실증적으로 보여준 것이다. 특히 모델이 깊어질수록 개별 층이 신호를 변화시키는 정도는 더 작아졌다.

    추가적으로 저자들은 1202층 실험을 진행했다. 1000층이 넘는 모델임에도 불구하고, 훈련 오차를 0.1% 미만으로 떨어뜨리는 데 성공했으나, 테스트 오차는 110층 보다 나쁘게 나왔다. 원인은 과적합(Overfitting)이다. 데이터셋 크기에 비해 모델이 너무 거대해진 것이다. 저자들은 이를 통해 "최적화 문제는 해결했으나, 모델의 복잡도와 정규화(Regularization) 사이의 균형은 여전히 중요하다고 말한다.

    Object Detection

    마지막으로 ResNet은 이미지 분류를 넘어 객체 탐지(Object Detection)에서도 좋은 성능을 보였다. PASCAL VOC와 MS COCO 데이터셋에서 기존의 강자였던 VGG-16을 ResNet-101로 교체하는 것만으로도 성능(mAP)이 비약적으로 상승했다.

    특히 MS COCO 데이터셋에서 보여준 28%의 상대적 성능 향상은 매우 고무적이다. 이는 ResNet이 학습한 특징 표현(Representation)이 얼마나 강력하고 범용적인지를 보여준다. 이 성과를 바탕으로 ResNet은 ILSVRC & COCO 2015 대회의 5개 주요 부문(분류, 탐지, 로컬라이제이션, 세그멘테이션 등)에서 모두 1위를 휩쓸었다.

    Conclusion

    ResNet은 단순히 층을 많이 쌓아 성능을 높였다는 수준을 넘어서 네트워크가 깊어질수록 발생하는 원인을 분석하고 해결한 연구이다.

    잔차학습이라는 아이디어를 도입하면서, 입력값 x를 shortcut으로 건네주dj, 층이 Resudual만 학습하게 함으로써 최적화의 난이도를 획기적으로 줄인 것이다.

    ResNet은 어떻게 보면 문제의 형태를 바꿔 학습 효율을 끌어올렸다. 현재 연구하고 있는 Quantization 분야에서도 단순히 비트를 줄이는 것이 아니라, 어떻게 하면 양자화된 모델이 학습하기 가장 좋은 형태가 될지 고민하는 것이 핵심일 것 같다.

    또한 shortcut connection은 단순히 기울기를 전달하는 통로가 아닌, 가장 순수한 형태의 입력 정보를 마지막 층까지 보존하는 생명선이라고 할 수 있다. 양자화를 진행할 때 이 생명선에 노이즈가 최대한 섞이지 않도록 하는것이 모델 전체의 성능 하락을 막는 전략이 될 수 있을 것 같다.

Designed by Tistory.