courses
더 깊은 신경망일수록 성능이 좋아져야 합니다. 하지만 실제로는 항상 그렇지 않습니다.
특정 깊이를 지나면 정확도가 오히려 떨어질 수 있습니다. 이는 과적합 때문이 아니라, 학습 자체가 무너지기 때문입니다. 기울기가 초기 층에 도달하기 전에 사라지는 경향이 있어 그 층들이 학습을 멈춥니다. 더 많은 층을 추가하면 해결될 것 같지만, 대개는 상황을 악화시킵니다.
ResNet은 스킵 연결이라는 핵심 아이디어로 이를 해결했습니다. 모든 층이 처음부터 전부 학습하도록 강제하는 대신, 네트워크가 일부 층을 건너뛰고 입력을 출력에 직접 더할 수 있도록 합니다.
이 글에서는 ResNet의 작동 방식, 아키텍처 구조, 그리고 현대 딥러닝에서 여전히 즐겨 쓰이는 이유를 다룹니다.
ResNet을 실제로 보고 싶으신가요? ResNet으로 이미지 분류 연습 문제를 PyTorch로 배우는 이미지 딥러닝 과정의 일부로 풀어보세요.
ResNet 아키텍처란?
ResNet은 Residual Network의 약자로, 깊은 네트워크의 학습을 실용적으로 만든 신경망 아키텍처입니다.
이 아이디어는 2015년에 Microsoft Research에서 제안되었습니다. 이 알고리즘은 잔차 연결을 사용해 당시 깊은 네트워크를 제한하던 학습 문제를 우회했습니다. 아이디어는 단순했지만, 그 발견 이후 처음으로 50, 101, 심지어 152층짜리 네트워크도 성능 저하 없이 안정적으로 학습할 수 있게 되었습니다.
ResNet 이전에는 그렇게 깊게 가는 것이 사실상 불가능했습니다.
깊은 네트워크가 학습하기 어려운 이유
층이 많을수록 네트워크가 학습할 가능성도 커져야 합니다. 그러나 실제로는 일정 깊이를 넘으면 문제가 발생합니다.
여기에는 두 가지 문제가 작용합니다.
첫째는 기울기 소실 문제입니다. 신경망은 오류 신호를 네트워크 뒤쪽에서 앞으로 보내며 학습합니다. 이를 역전파라고 합니다. 각 층은 그 신호에 따라 가중치를 조정합니다. 그러나 신호가 많은 층을 거슬러 올라가면서 작은 수에 반복적으로 곱해지며 줄어듭니다. 초기 층에 도달할 때쯤이면 거의 남아 있지 않습니다. 그 층들은 업데이트를 멈추고, 곧 학습을 멈춥니다.
둘째는 성능 열화 문제입니다. 이는 직관에 반합니다. 56층 네트워크가 20층 네트워크만큼은 최소한 잘할 것이라 예상하겠지만(용량이 더 크므로), 연구자들은 반대 결과를 발견했습니다. 더 깊은 네트워크가 심지어 학습 데이터에서도 더 나쁜 성능을 보였습니다. 이는 과적합이 원인이 아님을 의미합니다. 모델이 과도하게 암기하는 것이 아니라, 최적화 자체가 어렵다는 뜻입니다.
핵심 차이는 이것입니다. 드롭아웃이나 정규화로 해결할 수 있는 일반화 문제가 아니라, 애초에 좋은 가중치를 찾지 못하는 최적화 문제입니다.
ResNet은 이 두 가지 문제를 해결하도록 설계되었습니다. 그 방법을 보여드리겠습니다.
핵심 아이디어: 잔차 학습
전통적인 신경망은 입력에서 출력으로의 직접 매핑을 학습하려고 합니다. 각 층은 들어온 것을 보고 무엇이 나가야 하는지를 파악하려고 하죠. 얕은 네트워크에서는 잘 작동합니다. 하지만 더 깊어질수록 앞서 언급한 두 문제가 발생합니다.
ResNet에서는 각 블록이 전체 매핑을 학습하도록 요구하는 대신, 더 단순한 질문을 던집니다. 올바른 출력을 얻기 위해 입력에 무엇을 더해야 하는가?
이 차이를 잔차(residual)라고 합니다.
즉, 다음과 같이 학습하는 대신:

잔차 학습 (1)
네트워크는 다음을 학습합니다:

잔차 학습 (2)
여기서 F(input)는 잔차, 즉 네트워크가 수행해야 하는 작은 보정입니다. 층이 아무 것도 바꿀 필요가 없다면, F(input)를 0에 가깝게 만들고 입력을 변경 없이 그대로 통과시킬 수 있습니다.
사소한 변경처럼 보일 수 있지만, 이는 네트워크가 학습해야 하는 대상을 바꿉니다. 작은 보정을 학습하는 것은 처음부터 전체 변환을 학습하는 것보다 훨씬 쉬운 최적화 문제이며, 이것이 더 깊은 네트워크의 학습을 가능하게 합니다.
ResNet의 스킵 연결이란?
스킵 연결은 말 그대로 하나 이상의 층을 우회하여 입력을 네트워크의 더 뒤쪽 지점으로 직접 전달하는 경로입니다.
전통적인 네트워크에서는 데이터가 각 층을 순차적으로 통과합니다. 모든 층이 입력을 변환하고 결과를 다음 층에 전달합니다. 스킵 연결은 원래 입력을 블록 더 아래에 있는 층의 출력에 직접 더합니다.
이를 단순하게 그리면 다음과 같습니다:

스킵 연결 그래프 예시
입력 x는 두 경로를 동시에 이동합니다. 한 경로는 합성곱 층을 통과하며 잔차 F(x)를 학습합니다. 다른 경로는 그 층들을 건너뛰어 덧셈 단계에 연결됩니다. 최종 출력은 F(x) + x입니다.
이 지름길은 학습에 중요한 역할을 합니다. 역전파 동안 기울기는 중간 층을 거치지 않고 스킵 연결을 통해 역으로 전달될 수 있습니다. 그 결과 초기 층이 학습하기에 더 깨끗하고 강한 신호를 받게 되며, 이는 ResNet 이전의 깊은 네트워크에서 부족했던 부분입니다.
ResNet 블록의 구조
잔차 블록은 ResNet을 구성하는 반복 단위입니다. 하나의 블록을 이해하면 전체 네트워크를 이해한 것입니다.
단일 블록 내부에서 일어나는 일은 다음과 같습니다:
-
입력
x가 블록에 들어와 두 경로로 분기합니다 -
한 경로는 두 개의 합성곱 층을 거치고, 각 층 뒤에는 배치 정규화와 ReLU 활성화가 이어집니다
-
다른 경로는 그 층들을 건너뜁니다 - 이것이 스킵 연결입니다
-
두 경로는 덧셈 단계에서 만나며, 원래 입력이 합성곱 층의 출력에 더해집니다
-
최종적으로 ReLU 활성화를 적용합니다
도식으로 보면 다음과 같습니다:

ResNet 블록 다이어그램
여기서 스킵 연결은 항등 매핑(identity mapping)이라고 부릅니다. 입력이 변경 없이 통과해 학습된 출력에 직접 더해집니다. 변환도, 추가 매개변수도 없는 가장 단순한 지름길입니다.
하지만 덧셈이 동작하려면 두 경로가 동일한 모양의 텐서를 만들어야 합니다. 합성곱 층이 공간 차원이나 채널 수를 바꾸면 입력 x를 그대로 더할 수 없습니다. 이 경우 ResNet은 투영 지름길을 적용합니다. 즉, 스킵 경로에 1×1 합성곱을 두어 x의 모양을 맞춥니다.
대부분의 ResNet 블록은 항등 지름길을 사용합니다. 투영 지름길은 보통 네트워크가 단계 간을 이동하며 차원이 바뀔 때만 등장합니다.
ResNet 아키텍처의 유형
ResNet은 총 층 수로 이름 붙인 표준 변형들이 있습니다. 어떤 변형을 선택할지는 속도, 정확도, 혹은 그 사이의 균형 중 어디에 방점을 찍느냐에 달려 있습니다.

ResNet 아키텍처 비교
ResNet-18과 ResNet-34는 표준 베이직 블록을 사용합니다. 이는 스킵 연결이 있는 두 개의 3×3 합성곱 층으로 구성됩니다. 빠르고 비용이 적어 프로토타이핑이나 제한된 하드웨어에서 시작점으로 좋습니다.
ResNet-50 이상은 두 층 대신 세 층을 사용하는 병목(bottleneck) 블록으로 전환됩니다. 이 변경은 연산 비용이 비례해 증가하지 않으면서 더 깊은 네트워크를 학습하기 쉽게 만듭니다. 자세한 내용은 다음 섹션에서 다룹니다.
ResNet-101과 ResNet-152는 한 단계 더 나아가지만 학습 시간이 길어지고 메모리 사용량이 증가합니다. 정확도가 속도보다 중요한 연구나 프로덕션 시스템에서 흔히 사용됩니다.
대부분의 실무 작업에서는 ResNet-50이 기본 시작점입니다. 깊이와 비용의 균형이 좋고, 주요 딥러닝 프레임워크 전반에서 폭넓게 지원됩니다.
ResNet 병목 아키텍처
더 깊은 ResNet은 얕은 모델과 같은 블록 설계를 사용하지 않습니다. ResNet-50부터는 병목 블록을 사용하는데, 깊이가 증가해도 연산을 감당할 수 있도록 설계된 3층 구조입니다.
이 블록은 세 개의 합성곱을 순서대로 사용합니다:
- 1×1 합성곱 - 채널 수를 줄여 입력을 작게 만듭니다
- 3×3 합성곱 - 축소된 표현에서 실제 특징 학습을 수행합니다
- 1×1 합성곱 - 채널을 원래 크기로 다시 확장합니다
앞뒤의 1×1 합성곱이 병목 역할을 합니다. 더 비용이 큰 3×3 합성곱을 수행하기 전에 데이터를 압축하고, 이후에 복원합니다.
채널 수가 많은 입력에 대한 3×3 합성곱은 연산량이 큽니다. 먼저 채널을 줄이면 병목 블록은 3×3 층이 훨씬 작은 입력에서 작업하도록 합니다. 결과적으로 연산 비용이 비례해 증가하지 않으면서 더 깊어질 수 있습니다.
스킵 연결은 베이직 블록과 동일하게 작동합니다. 최종 활성화 전에 입력을 출력에 더합니다. 차이점은 이 안에서 채널 차원이 바뀌므로, 여기서는 투영 지름길이 거의 항상 필요하다는 점입니다.
ResNet이 기울기 소실 문제를 해결하는 방법
기울기 소실 문제는 거리의 문제입니다. 기울기가 네트워크를 통과해 갈수록 줄어들며, 초기 층에 도달할 때쯤에는 학습에 쓸 만한 신호가 거의 남지 않습니다.
스킵 연결은 기울기가 이동할 더 짧은 경로를 제공해 이 문제를 회피합니다.
역전파 중에는 기울기가 모든 층을 순차적으로 통과할 필요가 없습니다. 스킵 연결을 통해 합성곱 층들을 완전히 우회하여 바로 역으로 전파될 수 있습니다. 이 지름길 덕분에 기울기가 충분히 커서 초기 층을 실제로 업데이트할 수 있게 됩니다.
또한 각 블록이 학습해야 하는 대상도 바뀝니다. 처음부터 전체 변환을 찾는 대신, 입력 위에 작은 보정만 학습하면 됩니다. 훨씬 쉬운 최적화 문제이므로, 학습이 불안정해지지 않고 더 깊어질 수 있습니다.
요약하면, 이전에는 신뢰성 있게 학습할 수 없었던 깊이의 네트워크가 학습 가능해집니다.
ResNet과 전통적 CNN 아키텍처의 비교
전통적인 CNN과 ResNet은 모두 이미지에서 특징을 학습하지만, 접근 방식이 다릅니다.
전통적인 CNN에서는 데이터가 직선적으로 층을 통과합니다. 각 층은 이전 층의 출력을 받아 변환을 적용하고 결과를 전달합니다. 일정 깊이까지는 잘 작동합니다. 그러나 그 이후에는 순차 구조가 역전파 동안 불안정해집니다. 기울기가 줄고, 초기 층이 학습을 멈추며, 정확도가 떨어지기 시작합니다.
ResNet은 직선적으로만 가지 않습니다. 스킵 연결은 입력이 하나 이상의 층을 우회해 블록 더 아래의 출력에 직접 더해지도록 합니다. 네트워크는 여전히 변환을 학습하지만, 데이터와 기울기가 지나는 직통 경로도 갖게 됩니다.
두 접근 방식을 비교하면 다음과 같습니다:

ResNet과 전통적 CNN 비교
스킵 연결은 기울기에 도움을 줄 뿐 아니라 최적화를 더 매끄럽게 만들어, 네트워크가 좋은 가중치를 더 빠르고 안정적으로 찾도록 돕습니다.
ResNet 아키텍처의 활용 분야
ResNet 아키텍처는 다양한 실제 과제에서 광범위하게 사용됩니다.
이미지 분류가 ResNet이 시작된 분야입니다. 2015년 ImageNet 대규모 시각 인식 챌린지에서 우승했으며, 의료 영상, 위성 이미지, 제품 사진 등 이미지를 범주로 분류하는 데 여전히 기본 선택지입니다.
객체 탐지 워크플로에도 ResNet이 자주 사용됩니다. Faster R-CNN과 Mask R-CNN 같은 프레임워크는 ResNet을 탐지 헤드와 결합해 이미지 내 객체를 식별하고 위치를 찾습니다. ResNet은 특징 추출을, 탐지 헤드는 나머지를 담당합니다.
전이 학습은 대부분의 데이터 사이언티스트에게 ResNet이 특히 유용한 분야입니다. 처음부터 학습하는 대신(며칠이 걸리고 많은 데이터가 필요), ImageNet으로 사전학습된 ResNet을 불러와 자신의 데이터셋에 파인튜닝합니다. 사전학습된 가중치는 이미 에지, 질감, 형태 같은 유용한 저수준 특징을 인코딩하므로 훨씬 유리한 출발점입니다.
특징 추출도 비슷한 접근을 합니다. 사전학습된 ResNet으로 이미지를 통과시켜 후반부 층 중 하나의 출력을 가져옵니다. 이 출력은 이미지를 의미 있게 압축한 밀집 표현으로, 더 단순한 분류기나 군집 알고리즘에 투입할 수 있습니다.
이 모든 사용 사례에서 ResNet은 사전학습된 출발점으로 작동합니다. 대부분의 딥러닝 프레임워크는 ResNet 사전학습 가중치를 기본 제공하므로, 시작하기 가장 쉬운 아키텍처 중 하나입니다.
ResNet의 장점과 한계
ResNet은 딥러닝의 큰 도약이었지만, 모든 아키텍처처럼 트레이드오프가 있습니다. 장단점을 몇 가지 살펴보겠습니다.
장점
가장 분명한 장점은 깊이입니다. 스킵 연결 덕분에 데이터 사이언티스트는 50, 100, 심지어 150+ 층의 네트워크도 성능 열화 문제 없이 학습할 수 있습니다. ResNet 이전에는 신뢰성 있게 가능하지 않았습니다.
학습이 더 안정적이기도 합니다. 지름길 경로가 기울기가 네트워크를 거슬러 올라가는 명확한 경로를 제공하므로, 튜닝 부담이 줄고, 학습 붕괴가 적으며, 다양한 작업과 데이터셋에서 보다 예측 가능한 결과를 냅니다.
그리고 성능도 강점입니다. ResNet 변형은 이미지 벤치마크에서 꾸준히 상위권을 차지하며, 사전학습된 ResNet은 새로운 도메인으로의 전이가 좋아 여전히 많은 컴퓨터 비전 프로젝트의 기본 시작점으로 쓰입니다.
한계
ResNet은 연산 비용이 큽니다. ResNet-101과 ResNet-152 같은 더 깊은 변형은 많은 메모리와 연산 능력을 요구해, 하드웨어가 제한적이거나 빠른 추론이 필요한 경우 제약이 될 수 있습니다.
모든 작업에 최적은 아닙니다. 소규모 데이터셋이나 단순한 문제에서는 더 가벼운 아키텍처가 훨씬 적은 비용으로 비슷한 성능을 내기도 합니다. 무조건 ResNet-50을 기본으로 선택하는 것이 항상 옳지는 않습니다.
그리고 일부 영역에서는 ResNet이 대체되기도 했습니다. EfficientNet 같은 아키텍처는 이미지 작업에서 매개변수 대비 더 나은 정확도를 제공하며, 다른 분야에서는 트랜스포머가 주도권을 잡았습니다. ResNet은 여전히 널리 쓰이지만, 이제 유일한 유력 옵션은 아닙니다.
현대 딥러닝에서의 ResNet
도입된 지 11년이 지난 지금도 ResNet 아키텍처는 굳건합니다. 딥러닝에서 이는 흔치 않은 일입니다.
대부분의 실무자는 컴퓨터 비전 과제에서 신뢰할 수 있는 기준선이 필요할 때 여전히 ResNet을 선택합니다. 잘 알려져 있고, 모든 주요 프레임워크에서 폭넓게 지원되며, 주요 라이브러리마다 사전학습 가중치가 제공됩니다. 많은 실험 없이도 잘 작동하는 무언가가 필요하다면, 보통 가장 먼저 시도하는 옵션이 ResNet입니다.
그 영향력은 자체 변형을 넘어섭니다.
ResNet의 핵심 아이디어—정보와 기울기의 흐름을 돕기 위해 층을 가로지르는 지름길을 추가할 수 있다는 것—는 광범위하게 유용하다는 사실이 드러났습니다. DenseNet은 한두 층을 건너뛰는 데 그치지 않고 모든 층을 서로 연결함으로써 이 아이디어를 확장했습니다. 트랜스포머는 아키텍처가 다르지만, 각 트랜스포머 블록 내부의 잔차 연결도 ResNet이 소개한 원칙을 따릅니다.
EfficientNet, ConvNeXt, 비전 트랜스포머 같은 최신 아키텍처가 특정 영역에서 성능을 더 끌어올렸습니다. 그러나 이는 ResNet을 대체했다기보다 그 토대 위에 구축한 것입니다.
결론
ResNet 아키텍처의 핵심은 스킵 연결 하나입니다. 이 아이디어는 깊은 네트워크를 가로막던 두 가지 문제—기울기 소실과 성능 열화—를 해결해, 이전에는 불가능했던 깊이의 네트워크를 실용적으로 학습할 수 있게 했습니다.
층 사이에 지름길을 추가하는 발상은 이제 현대 딥러닝의 표준 구성 요소로 자리 잡았으며, DenseNet, 트랜스포머, 그리고 2015년 이후에 등장한 대부분의 아키텍처에서 찾아볼 수 있습니다.
오늘 컴퓨터 비전 문제를 다룬다면 ResNet은 여전히 탄탄한 출발점입니다. 가장 최신 옵션은 아니지만 가장 신뢰할 수 있는 옵션 중 하나입니다. 기준선으로 삼아 보세요 — 2026년인 지금도 경쟁 모델을 능가하는 경우가 적지 않습니다.
딥러닝이 처음이지만 파이썬 기초를 알고 있다면, Introduction to TensorFlow in Python 과정을 살펴보세요. 주말 동안 ResNet 같은 주제의 기초를 다질 수 있습니다.
FAQs
ResNet이란 무엇이며 왜 중요했나요?
ResNet은 Residual Network의 약자로, 2015년 Microsoft Research가 발표한 딥러닝 아키텍처입니다. 깊은 네트워크의 학습을 어렵게 했던 두 가지 문제—기울기 소실과 성능 열화—를 해결했습니다. 스킵 연결 메커니즘 덕분에 50, 100, 심지어 150+ 층의 네트워크도 신뢰성 있게 학습할 수 있게 되었습니다.
신경망에서 스킵 연결이란 무엇인가요?
스킵 연결은 하나 이상의 층을 우회해 입력을 더 뒤쪽 층의 출력에 바로 더하는 직접 경로입니다. 이를 통해 데이터와 기울기 모두가 네트워크를 가로지르는 지름길을 갖게 되어, 학습 중 초기 층을 업데이트하기에 충분히 강한 기울기 신호를 유지합니다.
기울기 소실 문제란 무엇인가요?
기울기 소실 문제는 기울기가 깊은 네트워크를 거슬러 이동하며 점점 작아질 때 발생합니다. 신호가 초기 층에 도달할 즈음에는 너무 작아 업데이트가 불가능해져, 그 층들이 학습을 멈춥니다. ResNet은 스킵 연결을 통해 기울기가 중간 층을 우회해 역전파되도록 하여 이 문제를 완화합니다.
ResNet의 베이직 블록과 병목 블록의 차이는 무엇인가요?
베이직 블록은 두 개의 3×3 합성곱 층을 사용하며 ResNet-18과 ResNet-34 같은 얕은 변형에 쓰입니다. 병목 블록은 ResNet-50 이상에서 사용되며, 1×1 - 3×3 - 1×1 합성곱 순서를 통해 비싼 3×3 합성곱 전에 채널을 압축해 연산을 줄입니다.
프로젝트에 맞는 ResNet 변형은 어떻게 선택하나요?
대부분의 실무에서는 ResNet-50이 좋은 기본값입니다. 깊이, 정확도, 연산 비용의 균형이 좋습니다. 하드웨어가 제한적이면 ResNet-18과 ResNet-34가 더 빠른 대안이며, 정확도가 최우선이고 연산이 제약이 아니면 ResNet-101이나 ResNet-152를 고려하세요.