Resnet 논문리뷰

피리붐·2024년 12월 5일

논문리뷰

목록 보기
2/4

ResNet: Residual Network

  • CNN 구조의 한 종류로, 2015년에 Kaiming He 등이 제안한 아키텍처
  • ResNet에서는 신경망의 깊이가 깊어짐에 따라 발생하는 훈련 문제를 해결하기 위해 '잔여 학습(Residual Learning)'이라는 개념을 도입
    • 또한, 이전 층의 출력이 다음 층의 입력에 그대로 추가되는 '스킵 연결' 또는 '단순히 지나가는 경로'를 도입하여 신경망의 깊이에 따른 문제의 실마리를 제공
    • 아래 그림을 보면 깊은 네트워크의 성능이 더좋을 거라는 예상과는 다르게 나온결과.
      • 20개의 layer, 56개의 layer 각각 모델을 실험한 결과 오히려 56개의 layer를 쌓은 모델이 training error가 더 높았습니다.
  • ResNet은 최대 152개 층까지 쌓을 수 있게 되었으며, 그래디언트 소실(Vanishing Gradient) 문제와 그래디언트 폭발(Exploding Gradient) 문제를 해결

Key idea

ResNet의 핵심 아이디어는 residual block을 이용해 네트워크의 최적화 난이도를 낮추는것 입니다.

위 그림에서 H(x)는 Identity를 매핑해주는 함수이기 때문에 H(x)-x를 최소화하면서 H(x) = x 가 되는 것을 목표로 한다.(Identity 매핑이 아니었다면 H(x)-y를 최소화!)
H(x)를 기존의 네트워크라고 할 때, H(x)를 복잡한 함수에 근사시키는 것 보다 F(x) := H(x) - x일 때, H(x) = F(x) + x이고, F(x) + x를 근사시키는 것이 더 쉬울 것이라는 아이디어에서 출발한다. 기존 신경망이 H(x) - x = 0을 만들려 했다면 ResNet은 H(x) - x = F(x) 로 두어 F(x)를 최소화한다.

  • Residual learning : 원래 Output에서 자기자신을 빼는 것이 F(x)의 정의
  • Skip Connection : x가 F(x)를 통과하고 나서 다시 x를 더해줌

Implementation


비교를 위한 Plain Network는 (i)VGG처럼 3x3 filter를 사용하고 output feature map size를 같도록 하기 위해 같은 개수의 filter를 사용합니다. (2) 그리고 feature map의 size가 절반으로 줄어들면 filter의 개수를 2배로 늘려 layer마다 time complexity를 보존합니다.
별도의 pooling layer를 사용하지 않고 stride 값을 2로 해서 downsampling을 하고 layer 마지막 부분에서 average pooling을 사용합니다.

Residual Network는 그림 처럼 실선으로된 shortcut connection을 삽입해 residual block을 구현하였고 같은 색상의 layer들이 하나의 block으로 동작합니다 block이 바뀔때 각 block의 첫번째 layer는 점선으로 shortcut connection이 표현되어 있는데 이는 입력단과 출력단의 dimension이 달라 맞춰주는것을 표현한것 입니다. 같은 색상인 block 내부에서는 입력과 출력의 output feature가 같은 것을 확인할 수 있습니다. 마지막 layer는 똑같이 average pooling을 사용합니다.

ResNet18

ResNet18은 18개의 층으로 이루어진 ResNet을 의미하는데 2442443의 image를 input으로 받습니다. 그리고 4개의 Conv block과 Adaptive Average Pooling을 시행한 후 Fully Connected layer(FC layer)를 통과시켜 이미지를 분류합니다. 각각의 Conv block은 두 개의 3*3 Conv 레이어로 구성되어 있습니다.

  • 첫 번째 컨볼루션 레이어:
    입력에서 신경망이 특징을 추출하도록 3×3크기의 필터로 입력 데이터를 합성곱
  • 활성화 함수 (ReLU):
    비선형성을 추가하여 네트워크가 복잡한 패턴을 학습할 수 있도록 컨볼루션 결과에 ReLU 활성화 함수를 적용합니다.
  • 두 번째 컨볼루션 레이어:
    3×3 크기의 필터로 특징을 추출, 첫 번째 레이어의 출력과 동일한 수의 필터를 사용하여 차원을 일치시킵니다.
  • 잔차 연결 (Residual Connection):
    두 번째 컨볼루션 레이어의 출력에 첫 번째 레이어의 입력을 직접 더함. 이는 잔차를 학습하도록 하며, 기울기 소실 문제를 완화시켜 더 깊은 네트워크를 효과적으로 훈련시킴.
  • 활성화 함수 (ReLU):
    잔차 연결 후에도 ReLU 활성화 함수를 적용하여 비선형성을 유지
import torchvision

model = torchvision.model.resnet18(pretrained=True/False)

PyTorch에서는 위 코드와 같이 불러올 수 있다. pretrained를 True로 설정하면 ImageNet 데이터베이스의 1백만 개가 넘는 영상에 대해 훈련된 버전을 불러올 수 있고 영상을 키보드, 마우스, 연필, 각종 동물 등 1000가지 사물 범주로 분류할 수 있다. pretrained를 False로 설정하면 사전 학습이 안 된 모델 뼈대만을 가져올 수 있다.

profile
끄적이다

0개의 댓글