| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 프로젝트
- Class
- Commpot
- channels
- 파이썬
- vscode
- github
- 백준
- WIL
- WebSocket
- 마스킹
- 프로그래머스
- 정보처리기사실기
- js
- 정보처리기사
- 채팅
- REDIS
- 1주차
- 알고리즘
- sql
- Git
- 2주차
- WHERE절
- 미니프로젝트
- 가상환경
- resnet50
- re-id
- 장고
- poetry
- 개발일지
- Today
- Total
개발일기
RESNET(Residual Network) 개요 본문
논문 [Deep Residual Learning for Image Recognition](https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf)
논문리뷰1 https://ropiens.tistory.com/32
논문리뷰2 https://dnddnjs.github.io/cifar10/2018/10/09/resnet/
깃헙 https://github.com/dnddnjs/pytorch-cifar10/tree/enas/resnet
pytorch-cifar10/resnet at enas · dnddnjs/pytorch-cifar10
The state-of-the-art algorithms on CIFAR-10 dataset in PyTorch - dnddnjs/pytorch-cifar10
github.com
RESNET 이란?
Residual Network의 줄임말로, 깊은 신경망(Deep Neural Network) 을 안정적으로 학습하기 위해 고안된 잔차(Residual) 학습 프레임워크이다.
Deep Network의 학습 난이도 문제
- Vanishing/Exploding Gradient Problem
네트워크가 너무 깊어지면, 역전파(Backpropagation) 시 기울기(gradient)가 매우 작아지거나(소실), 너무 커지는(폭발) 문제가 발생. - Degradation (성능 저하)
일정 이상 네트워크의 깊이를 늘리면 네트워크의 정확도가 변화가 없거나 오히려 떨어지는 성능 저하 현상이 발생한다. 단순히 Batch Normalization 등으로도 완전히 해결되지 않는 어려움이 있음.

-> Depth가 깊어짐에 따라 Degradation이 발생하는 문제를 극복하기 위해, Resnet 등장
핵심 아이디어
#1 Residual Block

- 일반적인 CNN 레이어(예: Conv-BN-ReLU 등) 출력 F(x)에,
입력 x를 바이패스(skip connection, shortcut connection) 시켜 결과를 x+F(x)로 만드는 구조. - 이렇게 하면, 네트워크가 학습해야 할 목표 함수를 “F(x)=H(x)−x” 형태(즉, ‘잔차(residual)’를 학습)로 바꿀 수 있음.
- H(x)는 우리가 원하는 최종 함수를, F(x)는 실제로 학습하는 “잔차(차이)”를 의미.
- Output = x + F(x)
- 네트워크가 “입력 x에서 얼마나 더 수정해야 하는가(residual)”를 학습하면, 기울기 소실 문제를 크게 완화할 수 있음.
- 출력과 입력 사이에 직접 경로(direct path)가 생기므로, 역전파 시 기울기가 어느 정도 직접 전달됨.
#2 Global Average Pooling (GAP)
- 과거 CNN(예 : VGG, AlexNet 등) 에서는 마지막 컴볼루션 출력(예 : C x H x W)을 flatten한 뒤 완전연결(FC) 레이어에 넣어 분류를 수행했다.
- 기존 FC Layer를 사용한 분류에서는 Flatten Layer를 이용해서 입력받은 값을 굉장히 긴 하나의 벡터로 만든 다음,
그 벡터를 FC Layer에 넣는 방식으로 하나하나 매핑해서 클래스를 분류
-> 공간적 정보도 많이 잃어버리고, 굉장히 많은 파라미터, 즉 가중치가 많이 필요했다.
-> GAP(Global Average Pooling) 등장 - Global Average Pooling은 마지막 특징 맵의 공간 위치별 정보를 단순 평균으로 합쳐서,
각 채널마다 하나의 스칼라만 남깁니다.
- 즉, 최종적으로 [C] 차원의 벡터를 얻음(Height/Width가 1x1이 됨).

- i번째 feature map의 평균값을 구해서 i번째 출력노드에 입력한다.
- 장점
1. Location 정보를 FC Layer보다 적게 잃는다.
2. 파라미터를 차지하지 않아 계산 속도가 빠르다.
3. 마찬가지로 파라미터가 많아지지 않기 때문에 오버피팅을 방지한다.
4. feature map 안의 값들의 평균을 사용하기 때문에 global context 정보를 가진다.
(Global average pooling operation which aggregates the spatial information into channels)
#3 Bottleneck Block
- Resnet의 깊이가 점점 깊어지면 parameter 수가 너무 많아지므로 Residual Block을 다른 구조로 사용한다.
- Residual Block의 원래 구조는 아래 그림의 왼쪽과 같다.
50층 이상인 Resnet에서는 오른쪽 그림과 같은 Residual Block을 사용한다.

- 1x1 convolution을 통해 filter size를 줄인 이후에 3x3 convolution을 하면 파라메터의 수를 아낄 수 있다. 이러한 구조의 Residual Block을 Bottleneck Block이라 한다.
Plain network와 ResNet 공통점과 차이점

1. 공통점
- 만약 feature map size가 같다면 해당 convolutional layer의 filter 개수는 같다.
- 만약 feature map size가 반으로 준다면 filter의 개수는 2배가 된다.
- feature map size를 반으로 줄이는 것은 convolution을 할 때 stride를 2로 설정하는 것으로 한다.
- 마지막 convolutional layer의 output은 global average pooling을 통해서 pooling을 한다.
- 그 결과를 fully connected layer를 통해 class 개수만큼의 출력으로 변환한다.
2. 차이점
- ResNet은 Plain network에서 두 개의 convolutional layer에 shortcut connection을 추가한 것이다.
- 그림의 shortcut connection 중에서 점선인 것은 feature map size가 반으로 줄어든 경우를 의미한다.
- 다른 실선의 shortcut connection은 모두 parameter가 없지만
- 점선의 shortcut connection의 경우 1x1 convolution과 batch normalization을 적용하기 때문에 학습 대상인 connection이다.

한계와 극복방안
Resnet도 1000개 이상의 깊이를 가지게 되면 다시 degradation 문제가 생긴다.

-> overfitting이 원인으로 추정
-> Dropout등을 통해 해결 가능하다.

'오늘의 공부일기 > 머신러닝, 딥러닝 공부일기' 카테고리의 다른 글
| Yolo Segmentation 커스텀모델 Training, JsonToYolo 포함 (0) | 2025.05.19 |
|---|---|
| OSNET(Omni-Scale Network) 개요 (0) | 2025.03.19 |
| [RE-ID] RE-ID (Re-Identification) 개요 2 (0) | 2025.03.05 |
| [RE-ID] RE-ID (Re-Identification) 개요 1 (0) | 2025.03.05 |
| [OpenAI] ChatGpt & DALL-E 이용하여 내 맘대로 이미지 만들기 (0) | 2023.05.18 |