https://arxiv.org/pdf/1512.03385v1
Author:
Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun [Microsoft Research]


CIFAR-10 데이터셋을 사용한 20층과 56층의 신경망에서 발생한 학습 오류와 테스트 오류
Layer를 깊게 쌓았지만 얕게 쌓은 network보다 더 성능이 좋지 않았다.
본 논문에서는 네트워크가 깊어질수록 학습이 어려워지는 문제를 지적한다.
이 문제는 주로 기울기 소실(Vanishing gradient)/폭발(Exploding gradient) 문제로 인해 발생하며, 이는 네트워크가 수렴하는것을 방해한다고 한다.
기울기 소실/폭발 문제는 정규하된 초기화와 중간정규화 계층를 통해 해결할 수있다.
그리고 기술들은 수십 개의 레이어를 가진 네트워크가 확률적 경사 하강법(SGD)과 역전파를 통해 수렴을 시작할 수 있게 한다.
네트워크가 더 깊어질때 성능 저하 문제(degradation problem)가 노출이 되고 네트워크 깊이가 증가함에 따라 정확도가 포화되고 급격히 저하되는 현상이 발생한다.
이 저하는 과적합(Overfitting)때문이 아니며, 적절히 깊은 모델에 층을 더 추가하면 학습 오류가 증가하는 현상이 관찰되었기 때문이라고 한다.

본 논문에서는 Residual learning framework를 제안
ResNet의 Residual Block(잔차 블록) 구조이며, 이 블록은 잔차 학습의 핵심 개념이다.
Residual learning F(x)와 원래의 입력값 x는 합쳐지는데 이 연산은 덧셈으로 이루어지고 출력이 F(x) + x가 된다.
마지막으로 합쳐진 결과에 다시 ReLU가 적용되어 다음 레이어로 전달된다.
VLAD
이미지의 로컬 특징과 사전(dictionary)에 있는 시각적 단어들 간의 잔차 벡터를 인코딩하는 방법을 의미한다.
특징: 각 로컬 특징이 가장 가까운 시각적 단어와의 차이를 계산하여, 이러한 잔차들을 집계한 벡터로 이미지를 표현하는 특징.
Fisher Vector
효과: VLAD, Fisher Vector 모두 이미지 검색과 분류에서 강력한 얕은(shallow)표현으로 사용되며, 높은 성능을 보인다.
[부분 미분 방정식(PDE) 해결을 위한 멀티그리드 방법]
[계층적 기저 전처리]
잔차학습 핵심 개념:
목표함수 H(x): 몇 개의 누적된 레이어가 근사해야 할 기본적인 매핑을 H(x)라고 가정한다.
잔차함수 F(x): 다수의 비선형 레이어가 복잡한 함수를 점근적으로 근사할 수 있다고 가정하면
잔차함수는 로 볼 수 있다. -> 즉
이 아이디어는 네트워크가 깊어질수록 성능이 떨어지는, 즉 '성능 저하 문제'에서 영감을 받았다.
이론적으로는, 네트워크의 층을 추가하면 성능이 떨어지지 않아야 하는데, 실제로는 이런 층들이 데이터의 동일성을 유지하는 데 실패하곤 했다.
잔여 학습 방식을 사용하면, 이런 층들이 동일성 매핑, 즉 입력과 동일한 출력을 내도록 유도할 수 있다. 이는 층들이 결과를 거의 바꾸지 않고 그대로 전달하게 만든다.

1. 잔차 학습의 적용 방식:
- 범위: 잔차 학습을 몇 개의 연속된 레이어마다 적용
빌딩 블록 정의:
: 입력 벡터
: 출력 벡터
ex) 두 개의 레이어로 구성된 경우 이며, 여기서 는 ReLU 활성화 함수를 의미한다.
2. Shortcut 연결의 특징:
3. 차원이 다른 경우의 처리:
차원 맞추기 필요성:
수식 에서 의 차원이 같아야 하지만, 입력과 출력의 채널 수가 달라지는 경우가 있다.
선형 변환 적용: shortcut 연결을 통해 선형 변환 를 적용하여 차원을 맞춘다.

각 블록에서 두 개의 3x3 convolution 레이어가 있으며, 이 레이어들은 입력 데이터를 변형하는 역할을 한다. 이때, 변형된 결과는 잔차 함수로서 계산된다.
각 블록마다 보이는 곡선 화살표가 바로 Identity connection이다. 이 연결은 입력 데이터를 변형하지 않고 그대로 다음 층으로 전달하는 역할을 한다.
각 블록의 출력은 잔차 함수 F(x)와 입력값 x를 더한 결과로 계산된다. 이 덧셈 연산을 통해 입력값이 직접 전달되기 때문에, 네트워크가 깊어지더라도 중요한 정보가 사라지지 않고 학습이 잘 이루어진다.
블록마다 크기가 달라지는 경우가 있다. 예를 들어, 출력 크기가 절반으로 줄어드는 경우(dotted shortcut)는 차원 축소가 필요한 경우이며, 이때는 1x1 convolution을 사용하여 Identity connection에서도 차원을 맞춰주는 작업을 한다.

구조
비교적 얕은 네트워크로, 총 8개의 Residual Block을 포함.
각 Residual Block은 2개의 3x3 컨볼루션 레이어로 구성.
Residual Block은 shortcut connection을 통해 입력값을 그대로 다음 레이어에 더한다.
특징
비교적 적은 층수로 인해 학습이 빠르고 연산 비용이 낮다.
이미지 분류, 객체 탐지 등의 실시간 응용에서 많이 사용.
경량 모델이기 때문에 임베디드 장치나 모바일 장치에 적합.
장점
연산이 빠르고, 파라미터 수가 적어 경량화된 응용에 적합.
단점
네트워크 깊이가 얕기 때문에 매우 복잡한 데이터셋에서는 성능이 다소 제한적일 수 있다.
구조
ResNet34는 16개의 Residual Block으로 구성된 네트워크.
ResNet18과 마찬가지로 각 블록은 2개의 3x3 컨볼루션 레이어로 구성.
특징
ResNet18보다 깊지만, 여전히 중간 수준의 연산 복잡도를 가지고 있다.
이미지 분류에서 더 정교한 성능을 요구하는 문제에 적합.
장점
더 깊어진 층수 덕분에 더 복잡한 패턴을 학습할 수 있으며, 상대적으로 성능이 향상.
단점
더 깊어지면서 연산량이 증가하여 ResNet18보다는 속도가 느리지만 여전히 실시간 응용에서 사용 가능한 수준입니다.
구조
ResNet50부터는 Bottleneck 블록이 도입된다.
Bottleneck 블록은 3개의 컨볼루션 레이어로 구성되며, 1x1, 3x3, 1x1 컨볼루션으로 이루어진다.
1x1 컨볼루션은 차원을 줄이거나 늘려 연산 효율성을 높이는 역할을 한다.
특징
Bottleneck 구조를 통해 더 깊은 네트워크에서도 효율적으로 학습이 가능하도록 최적화 되어있다.
VGG 네트워크와 비교했을 때, 더 깊지만 연산 비용은 오히려 적은 편이다.
장점
Bottleneck 구조 덕분에 파라미터 수는 적지만 성능은 우수하다.
복잡한 데이터셋에서도 높은 성능을 발휘하며, 이미지 분류 및 객체 탐지에 많이 사용된다.
단점
ResNet34에 비해 복잡도가 증가하고 연산량도 커지기 때문에 더 많은 자원이 필요하다.
구조
ResNet101은 33개의 Bottleneck 블록으로 구성.
특징
매우 깊은 네트워크로, 더 복잡한 패턴을 학습할 수 있어 대규모 데이터셋에서 탁월한 성능을 발휘. 더 깊은 층수로 인해 일반화 성능이 향상.
장점
복잡한 이미지 분류나 객체 탐지, 세그멘테이션 등 다양한 비전 작업에서 우수한 성능을 발휘.
대규모 데이터셋에서 높은 정확도를 달성할 수 있다.
단점
연산 비용이 크게 증가하며, 학습 및 추론 시간이 더 오래 걸린다.
따라서 더 많은 컴퓨팅 자원(GPU 등)이 필요하다.
구조
50개의 Bottleneck 블록으로 구성된 가장 깊은 ResNet 모델.
특징
ResNet152는 ResNet의 대표적인 초대형 모델로, 매우 깊은 구조를 통해 다양한 복잡한 문제를 해결하는 데 적합. ILSVRC(ImageNet Large Scale Visual Recognition Challenge)에서 뛰어난 성능을 발휘한 모델.
장점
네트워크가 매우 깊기 때문에 복잡한 패턴을 정확하게 학습할 수 있다.
이미지 분류, 객체 탐지, 세그멘테이션 등 고난이도의 비전 작업에서 높은 성능을 보장한다.
단점
ResNet101보다 더 깊어 연산 비용과 메모리 요구량이 매우 크다.
고성능 GPU가 필요하며, 학습 시간이 길어진다.
Pytorch 코드구현: https://github.com/namduhus/ResNet
Pytorch: 2.5.1
IDE: VSCode, Pycharm
GPU: CUDA 12.1